3
当我运行下面的程序:不一致求和
#include <stdio.h>
#include <math.h>
int main()
{
double sum, increase;
long amount, j;
printf("sum = ");
scanf("%lf", &sum);
printf("increase = ");
scanf("%lf", &increase);
printf("amount = ");
scanf("%ld", &amount);
for (j = 1; j <= amount; j++)
{
sum += increase;
}
printf("%lf\n", sum);
return 0;
}
我获得这些值以下响应:
MacBook:c benjamin$ ./test
sum = 234.4
increase = 0.000001
amount = 198038851
432.438851
MacBook:c benjamin$ ./test
sum = 234.4
increase = 0.000001
amount = 198038852
432.438851
MacBook:c benjamin$ ./test
sum = 234.4
increase = 0.000001
amount = 198038853
432.438852
这里,我通过1中的每个增加变量“量”案件。
- 在第一个,总结给我所期望的。
- 在第二个,它惊人地给出了相同的价值。
- 第三,继续总结。
这是为什么发生?
虽然代码似乎不是很有用,但我刚刚写了有问题的部分。我其实想在更大的程序中使用它。
谢谢!
你忘了实际的问题吗? – Malvolio
浮点数的精确度有限,而且我会在某个地方发现足够的精度,导致数量相同。 – Corbin
每个计算机科学家都应该知道的关于浮点运算的问题 - http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – epatel