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