[英]Why do I get so precise floating-point number from std::cout?
该程序
int main ()
{
long long ll = LLONG_MAX;
float f = ll;
std::cout << ll << '\n';
std::cout << std::fixed << f << '\n';
return 0;
}
给出:
9223372036854775807
9223372036854775808.000000
这怎么可能? 如果 23 位尾数只能有 8,388,607 个最大值,为什么 cout 输出一个 64 位数字?
您将 2^63-1 存储在浮点数中,该浮点数四舍五入为 2^63 = 9223372036854775808。2 的幂是完全可以表示的。
可以精确表示的最接近的数字是 2^63 + 2^40 = 92233731363666403584。
long long
对您来说是 64 位数据类型,因此这意味着LLONG_MAX
的值为2^63 - 1
。 您是对的,因为它不能存储在只有 23 位尾数的float
中,但是2^63
比LLONG_MAX
多 1 很容易存储在浮点数中。 它将2
存储在尾数中,将63
存储在指数中,这样就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.