Lua浮点数错误在表索引中

通常我通过判断两个浮点数是否在一个非常小的范围内来进行比较。但是这种方法不能用于表的键,因为你不知道键是否存在(如果这样说有意义的话)。

例如,在一台 64 位计算机上,使用 lua 5.1:

a, b, c = 1.7, -0.8, -0.4
d = a + b + c -- 防止常量折叠
print(string.format('%1.20f', d)) --  0.49999999999999989000  (约为 0.5)
assert(d ~= 0.5)
t = {[0] = 'foo', [0.5] = 'bar'}
print(t[d]) -- nil  (我希望它打印出 'bar')

基本上,我该如何在考虑浮点数误差的情况下在表中查找键?我希望它可以在不对表中的每个键进行比较的情况下工作,以便在处理大表时仍然能够快速运行。可能已经有内置函数可以做到这一点,但我找不到。

任何帮助都将不胜感激!

点赞
用户107090
用户107090

如果您确实需要从来自不同来源的浮点数索引,请将它们转换为以固定格式为多少位小数的字符串,并使用这些字符串索引表格。

您甚至可以通过为代理表设置适当的 __newindex 元方法自动实现此操作。

2012-10-11 01:41:31