为什么在 Lua 中在 for 循环中减去 0.1 会产生这种不期望的结果?

j=1
for i=1,10 do
    j=j-0.1
    print(j)
end

输出结果为:

0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 1.3877787807814e-16

其中最后一个条目应该为 0 注意:0.1-0.1 返回 0.0 但是,从 j≥0.3 开始反复执行 j=j-0.1 就会产生这个结果

点赞
用户8621712
用户8621712

Lua 中的数字为双精度浮点数,即 双精度浮点数格式。浮点数存在浮点精度误差。实际上,0.1并不完全等于0.1,而是最接近 0.1 的表示方式。

可能的解决方法可能是使用整数或整数与单独的小数部分。相关问题及其答案:C ++ 如何避免浮点运算错误

2020-11-10 18:56:06
用户14614654
用户14614654

round off error!

在 IEEE 64 位浮点数中,0.1 无法准确地表示。

在二进制中,1/10 有一个循环的表示!

2020-11-10 18:56:44