c ++:奇怪的双乘法错误

时间:2013-04-02 09:06:42

标签: c++ double

我使用VC ++ 2010编译器。我的下面的代码给出了509:

double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);

我想念一下吗?

由于

2 个答案:

答案 0 :(得分:6)

浮点数据类型不能代表所有数字。由于您的计算机使用二进制浮点数,因此唯一可表示的数字的格式为 s2 e ,其中 s 是有效数字,而 e 是指数。而且很容易看出5.1不适合这种模具。它不完全可以表示。

page向您显示最接近的可精确表示的双精度二进制浮点值到5.1。值是:

5.09999 99999 99999 64472 86321 19949 90706 44378 66210 9375

因此,与5.1最接近的值略小于5.1。将它乘以100并截断,你有509。

有关该主题的更多信息的标准参考资料是David Goldberg的What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:0)

5.1表示为5.099999,乘以100.0时为509.9990。转换为int后将为509。