我写了以下C++代码:
float a, b;
int c;
a = 8.6;
b = 1.4;
c = a + b;
printf("%d\n", c);
Run Code Online (Sandbox Code Playgroud)
输出是10.
但是当我运行以下代码时:
float a, b;
int c;
a = 8.7;
b = 1.3;
c = a + b;
printf("%d\n", c);
Run Code Online (Sandbox Code Playgroud)
输出是9.
两者有什么区别,因为它们提供不同的输出?
Die*_*Epp 15
浮点数没有8.7或1.3这样的数字.有一个数字10,数字-6.5和数字0.96044921875 ......但没有8.7或1.3.
充其量,您的计算机可以将8.7舍入到最近的浮点数,并将1.3舍入到最近的浮点数.计算机将这些舍入的数字相互添加,然后对结果进行舍入.
不要使用浮点数来赚钱.
#include <stdio.h>
int main(int argc, char *argv[])
{
float a = 8.7, b = 1.3;
printf("Looks like: %.1f + %.1f = %.1f\n", a, b, a+b);
printf("The truth: %.20f + %.20f = %.20f\n", a, b, a+b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在x86 GCC/Linux计算机上,我得到结果:
Looks like: 8.7 + 1.3 = 10.0 The truth: 8.69999980926513671875 + 1.29999995231628417969 = 9.99999976158142089844
在PPC GCC/OS X计算机上,我得到了结果:
Looks like: 8.7 + 1.3 = 10.0 The truth: 8.69999980926513671875 + 1.29999995231628417969 = 10.00000000000000000000
注意在这种特殊情况下8.7和1.3是如何向下舍入的.如果您选择了向上舍入的数字,您可能会在右侧看到大于10的数字.
请参阅David Goldberg撰写的"每个计算机科学家应该知道的关于浮点算术的内容"(链接).
| 归档时间: |
|
| 查看次数: |
6700 次 |
| 最近记录: |