为什么Lua算术运算不等于它本身?

当我执行以下 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.428 * 0.2 不等于 5.6 吗?

谢谢。

原文链接 https://stackoverflow.com/questions/6366954

点赞
stackoverflow用户893
stackoverflow用户893

你正在处理二进制浮点数本身的不准确性。你的数字a可能是5.5999999999999996,而你的结果b可能是5.6000000000000005,它们并不相等。

事实上,这里有与Python相同的计算方法:

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

这种行为对所有二进制浮点数的实现都是普遍的。

2011-06-16 04:05:41