程序
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位数字?
答案 0 :(得分:2)
您将2 ^ 63-1存储在一个浮点数中,将其四舍五入为2 ^ 63 =922337203685477575808。2的幂完全可以表示。
可以精确表示的最接近的数字是2 ^ 63 + 2 ^ 40 = 9223373136366403584。
答案 1 :(得分:1)
long long
是一种64位数据类型,因此意味着LLONG_MAX
的值为2^63 - 1
。没错,它不能存储在只有23位尾数的float
中,但是比2^63
多1的LLONG_MAX
很容易存储在浮点数中。它将2
存储在尾数中,并将63
存储在指数中,就在那里。