Dav*_*vid 2 math floating-point lua sqrt
据Lua说,我注意到了 2 ~= math.sqrt(2) ^ 2
print(2 == math.sqrt(2) ^ 2) --> false
print(2, math.sqrt(2) ^ 2) --> 2 2
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
大多数浮点数不能精确地存储在Lua的数字类型中(double默认为C ).math.sqrt(2)是其中之一.
如果你试试:
print(2 - math.sqrt(2) ^ 2)
Run Code Online (Sandbox Code Playgroud)
输出:-4.4408920985006e-016这是一个非常小的数字,但仍然使两个数字不完全相同.
这种浮点精度问题不仅存在于Lua中,还存在于许多其他语言中.正如@Thilo评论的那样,在比较实践中的平等时,你可以使用一个小的"delta".您可能会对以下内容感兴趣:C FAQ:检查"足够接近"浮点相等性的好方法是什么?.