通常,我会通过判断两个浮点数是否在非常小的范围内来进行比较。但是对于表键来说,这种方法不适用,因为你不知道它们的键是否存在(如果这样说有意义的话)。
以下是在64位计算机上使用lua 5.1的示例:
基本上,我想知道如何在查找表中查找键时考虑浮点误差?我希望它能在不与表中每个键进行比较的情况下工作,因此它可以在处理大型表时仍然很快。可能已经有一个内置函数来实现这一点,但我找不到。任何帮助都将不胜感激!
以下是在64位计算机上使用lua 5.1的示例:
a, b, c = 1.7, -0.8, -0.4
d = a + b + c -- prevents constant folding
print(string.format('%1.20f', d)) -- 0.49999999999999989000 (around 0.5)
assert(d ~= 0.5)
t = {[0] = 'foo', [0.5] = 'bar'}
print(t[d]) -- nil (I want it to print 'bar')
基本上,我想知道如何在查找表中查找键时考虑浮点误差?我希望它能在不与表中每个键进行比较的情况下工作,因此它可以在处理大型表时仍然很快。可能已经有一个内置函数来实现这一点,但我找不到。任何帮助都将不胜感激!
math.floor
怎么样? - Decoffi.string
(可能需要使用联合魔法)。这将非常节省空间...但可能不值得花费这样的精力。 此外,@Ryan:要修复小数位数,您可以使用string.format('%.4f', num)
。 - Deco