【发布时间】:2011-02-23 23:08:06
【问题描述】:
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' 比它应该的要小。 但是如果我们取 'a' 50 次 - 结果会比它应该的要大。
这是为什么? 在这种情况下如何得到正确的结果?
【问题讨论】:
-
去阅读它。浮点问题需要仔细研究,以免犯危险的错误。
-
要获得精确值,请使用整数(或一些 bignum 库) const int acc=100; int tmp,a=30/acc,b=0; for (char i=1;i>,&
标签: c++ c floating-point precision floating-accuracy