我已经阅读了将“FLT_MIN”和“FLT_MAX”值用于浮点数的建议。每当我这样做时,代码块都会告诉我它的
最大值:3.40282e+038 最小值:1.17549e-038
不知道这意味着什么我试图获得真正的价值并得到
最大值:47.2498237715 最小值:-34.8045265148
…但这些并不能澄清事情。
这是我的代码片段
char c; // reserve: 1 byte, store 1 character (-128 to 127)
int i; // reserve: 4 bytes, store -2147483648 to 2147483657
short int s; // reserve: 2 bytes, store -32768 to 32767
float f; // reserve: 4 bytes, store ?? - ?? (? digits)
double d; // reserve: 8 bytes, store ?? - ?? (? digits)
unsigned int u; //reserve: r bytes store 0 to 4294967295
c = 'c';
cout << c <<" lives at " << &c <<endl;
i = 40000;
cout << i <<" lives at " << &i <<endl;
s = 100;
cout << s <<" lives at " << &s <<endl;
f = 10.1;
cout << f <<" lives at " << &f <<endl;
d = 10.102;
cout << d <<" lives at " << &d <<endl;
u = 1723;
cout << u <<" lives at " << &u <<endl;
在代码片段中,我们可以清楚地看到 short int 的 min-max 值,例如 -32768 - 32767。这些是可以理解的正确值,但对于 float 和 int,实际值并不清楚。
原文由 user9318444 发布,翻译遵循 CC BY-SA 4.0 许可协议
<limits>
标头中的std::numerics_limits
类提供有关数字类型特征的信息。对于浮点类型
T
,这里是类型中可表示的最大值和最小值,在“最大”和“最小”的各种意义上。我还包括常见 IEEE 754 64 位二进制类型的值,称为double
在这个答案中。这些按降序排列:std::numeric_limits<T>::infinity()
是最大的可表示值,如果T
支持无穷大。当然,它是无限的。类型T
是否支持无穷大由std::numeric_limits<T>::has_infinity
表示。std::numeric_limits<T>::max()
是最大的有限值。对于double
,这是 2 1024 -2 971 ,大约是 1.79769•10 308 。std::numeric_limits<T>::min()
是最小的正正常值。浮点格式通常有一个区间,其中指数不能变小,但允许有效数字(数字的小数部分)变小,直到它达到零。这是以牺牲精度为代价的,但具有一些理想的数学计算特性。min()
是这种精度损失开始的点。对于double
,这是 2 -1022 ,大约是 2.22507•10 -308 。std::numeric_limits<T>::denorm_min()
是最小的正值。在具有次正规值的类型中,它是次正规的。否则,它等于std::numeric_limits<T>::min()
。对于double
,这是 2 -1074 ,大约是 4.94066•10 -324 。std::numeric_limits<T>::lowest()
是最小有限值。它通常是一个数量级很大的负数。对于double
,这是 -(2 1024 -2 971 ),大约为 -1.79769•10 308 。如果
std::numeric_limits<T>::has_infinity
和std::numeric_limits<T>::is_signed
为真,那么-std::numeric_limits<T>::infinity()
是最小值。当然,它是负无穷大。您可能感兴趣的另一个特征是:
std::numeric_limits<T>::digits10
是最大的十进制位数,因此将具有这么多位数的任何十进制数转换为T
然后转换回相同的十进制位数将产生原始数字。对于double
,这是 15。