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