简单数学编程语言的奇怪行为。操作

时间:2013-12-13 14:14:03

标签: math floating-point

我在解释器中使用python中的以下操作并得到以下结果:

>>> 0.10*3
0.30000000000000004
>>> .10+.10
0.2
>>> 0.10 + 0.10 + 0.10
0.30000000000000004
>>> .2+0.1
0.30000000000000004
>>> _+.1
0.4

我的问题是0.30000000000000004000000000004是怎么来的?

这不仅在Python中,而且在JS中,我也假设在其他语言中。

1 个答案:

答案 0 :(得分:3)

为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?

因为在内部,计算机使用的格式(二进制浮点)无法准确表示0.1,0.2或0.3之类的数字。

编译或解释代码时,“0.1”已经四舍五入到该格式的最接近数字,即使在计算发生之前也会导致小的舍入误差。

十进制数字不能准确地表示像1/3这样的数字,所以你必须舍入到0.33这样的数字 - 而且你不要指望0.33 + 0.33 + 0.33加起来为1,你呢?

计算机使用二进制数,因为它们在处理这些数字时速度更快,并且因为对于大多数计算,小数点后17位的小错误根本不重要,因为你使用的数字不是圆的(或者说(无论如何)。

http://floating-point-gui.de/basic/

这应该有帮助