Lua 无法将计算的数字与相同的数字进行比较?

Lua 无法将计算的数字与相同的数字进行比较?,lua,luarocks,Lua,Luarocks,我正在学习向量类。在测试vector类时,我在将单位向量的大小与1进行比较时遇到了一个失败的测试用例 当比较它们时,它们看起来都是1,那么是什么导致此测试失败的呢 我已经尽可能多地删节了,以便找出问题的根本原因。我可以将数字转换成字符串并进行比较,但这只能修复测试用例,让问题稍后再次出现。 我正在使用Lua5.1解释器(以确定根本原因),它与Luarock捆绑在一起 localv=0.70710678118655^2+0.70710678118655^2 打印(v,v==1) v==1应该是t

我正在学习向量类。在测试vector类时,我在将单位向量的大小与1进行比较时遇到了一个失败的测试用例

当比较它们时,它们看起来都是
1
,那么是什么导致此测试失败的呢

我已经尽可能多地删节了,以便找出问题的根本原因。我可以将数字转换成字符串并进行比较,但这只能修复测试用例,让问题稍后再次出现。 我正在使用Lua5.1解释器(以确定根本原因),它与Luarock捆绑在一起

localv=0.70710678118655^2+0.70710678118655^2
打印(v,v==1)

v==1
应该是
true
,而不是
false

当然这是一个例子

更多说明:执行此代码

local half = 0.50
local doubleHalf = half + half
if doubleHalf == 1 then
    print('doubleHalf is one')
else
    print('doubleHalf differs '.. doubleHalf - 1 ..'from one')
end
--> doubleHalf is one

local rootHalf = math.sqrt(half)
print('rootHalf is a '.. type(rootHalf) ..' with value', rootHalf)
--> rootHalf is a number with value    0.70710678118654

local square = rootHalf^2 
print('square is a '.. type(square) ..' with value', square)
--> square is a number with value    0.5

if square == half then
    print('square is half')
else
    print('square differs '.. square - half ..' from half')
end
--> square differs 1.110223E-16 from half

vector_length = square + square
if vector_length == 1 then
    print('vector length is one')
else
    print('vector length differs '.. vector_length - 1 ..' from one')
end
--> vector length differs 2.220446E-16 from one

任何处理数值的计算机都将以有限的精度进行计算。

将浮点转换为字符串时,Lua只舍入到15位有效数字。尝试将其设为17位以获得精确的表示

local v = 0.70710678118655^2 + 0.70710678118655^2
print(("%.17g"):format(v), v == 1)
输出:

1.0000000000000071  false

相关:我不认为这是一个浮点错误,因为它仍然将两个数字显示为
1
。如果剩余的数字足够小,它会不会不显示?