为什么Lua算术不等于它自己?

时间:2011-06-16 04:01:05

标签: lua floating-point point

  

可能重复:
  What is a simple example of floating point/rounding error?

当我执行以下Lua代码时:

a = 5.6
b = 14 * 0.4
c = 11.2 / 2
d = 28 * 0.2
print( a == b )
print( a == c )
print( a == d )
print( b == c )
print( b == d )
print( c == d )

我得到以下结果:

false
true
false
false
true
false

有人可以解释为什么14 * 0.4和28 * 0.2不等于5.6?

由于

1 个答案:

答案 0 :(得分:12)

您正在处理二进制浮点数的自然不精确性。您的号码a可能是5.5999999999999996,而您的结果b可能是5.6000000000000005,它们不相等。

实际上,这与Python的计算方法相同:

>>> 5.6
5.5999999999999996
>>> 14 * 0.4
5.6000000000000005

这种行为对于二进制浮点数的所有实现都是通用的。