为啥Lua算术不等于自身? [复制]

Posted

技术标签:

【中文标题】为啥Lua算术不等于自身? [复制]【英文标题】:Why is Lua arithmetic is not equal to itself? [duplicate]为什么Lua算术不等于自身? [复制] 【发布时间】:2011-09-16 01:17:53 【问题描述】:

可能重复: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】:

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

其实这里的计算和 Python 做的一样:

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

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

【讨论】:

啊,谢谢你的解释。欣赏它。

以上是关于为啥Lua算术不等于自身? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Lua复数类算术

为啥 [1,2,3] 在 Javascript 中不等于自身? [复制]

算术运算符和算术表达式(初学者)

Lua 错误“尝试对字符串值执行算术运算”

为啥 Python 在编译为字节码之前不评估常数算术?

shell算术运算和文件测试及多分支if语句