我想看看float和double内容,但是我得到了很多额外的意外精确数字。
printf("%.55f\n", 1.123456789012345);
cout << setprecision(100) << 1.123456789012345 << endl;
1.1234567890123450251138592648203484714031219482421875000 1.1234567890123450251138592648203484714031219482421875
虽然我期待这样的事情:
... 1.12345678901234500
1.123456789012345
在Octave我也得到意想不到的输出:
>> format long
>> single(1.123456789012345)
ans = 1.12345683574677
答案 0 :(得分:3)
我想看看浮动和双重内容
您实际上是在观察最接近1
的十进制数,该数字可以由浮点表示法表示完全。
请注意,其他一些十进制数字(如std::cout << std::setprecision(100) << 1.123456789012345 << std::endl;
std::cout << std::setprecision(100) << 1.0 << std::endl;
std::cout << std::setprecision(100) << 1.1 << std::endl;
std::cout << std::setprecision(100) << 1.5 << std::endl;
)可以用浮点表示法精确表示。
因此,运行:
1.1234567890123450251138592648203484714031219482421875
1
1.100000000000000088817841970012523233890533447265625
1.5
将打印:
containerView.center.x -= 200
我强烈建议阅读David Goldberg的优秀What Every Computer Scientist Should Know About Floating-Point Arithmetic。