//g++ 5.4.0
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
std::cout << (int)0.9999999999999999 << std::endl; // 16 digits after decimal
std::cout << (int)0.99999999999999999 << std::endl; // 17 digits after decimal
}
输出:
Hello, world!
0
1
为什么会这样?
答案 0 :(得分:2)
0.99999999999999999
的最准确表示是1.0
。 1)
0.9999999999999999
的最准确表示是0.999999999999999888977697537484
。
1)在64位双精度IEEE754浮点表示中。
由于没有舍入功能,只有截断,当转换为整数类型时,一个给出1
,另一个给出0
。
答案 1 :(得分:1)
值0.99999999999999999(小数点后17位)的最准确浮点表示形式就是1.0。
值0.9999999999999999(小数点后16位)的最准确浮点表示形式小于1.0。
向int的转换将一个截断为0,另一个截断为1。