double a = 0.3;
std::cout.precision(20);
std::cout << a << std::endl;
結果:0.2999999999999999889
double a, b;
a = 0.3;
b = 0;
for (char i = 1; i <= 50; i++) {
b = b + a;
};
std::cout.precision(20);
std::cout << b << std::endl;
結果:15.000000000000014211
所以..'a'比它應該小。 但是,如果我們採取'一個'50次 - 結果會比它應該更大。
這是爲什麼? 如何在這種情況下獲得正確的結果?
去看看吧。浮點問題需要仔細研究,以免發生危險錯誤。 – Artelius 2010-05-26 00:26:12
有精確的值使用整數來代替(或一些bignum lib)const int acc = 100; int tmp,a = 30/acc,b = 0; for(char i = 1; i <= 50; i ++)b = b + a; std :: cout << int(b/acc)<<「。」; TMP = B%ACC; if(tmp <10)std :: cout <<「0」; std :: cout << int(tmp);爲了加快速度,你可以使用2的冪乘以所以*,/,%轉換爲<<,>>和 – Spektre 2013-08-20 13:07:12