浮点 – 表索引中的Lua浮点错误
发布时间:2020-12-14 21:44:57 所属栏目:大数据 来源:网络整理
导读:通常,我通过查看它们是否在一个非常小的数字范围内来比较两个浮点数.它不适用于表键,因为你不知道它们是否存在而不知道它们的键(如果这是有意义的话). 在64位计算机上使用lua 5.1的示例: a,b,c = 1.7,-0.8,-0.4d = a + b + c -- prevents constant foldingp
通常,我通过查看它们是否在一个非常小的数字范围内来比较两个浮点数.它不适用于表键,因为你不知道它们是否存在而不知道它们的键(如果这是有意义的话).
在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') 基本上,如何在考虑浮点错误的同时在表中找到键?我希望它能够在不与表中的每个键进行比较的情况下工作,因此对于大表来说它仍然很快.可能已经有一个内置函数来执行此操作,但我找不到一个. 任何帮助,将不胜感激! 解决方法
如果你真的必须从来自不同来源的浮点数进行索引,我建议你将它们转换为固定格式的字符串,这些字符串要保留多个小数位,并用这些字符串索引表.
您甚至可以通过为代理表设置适当的__newindex元方法来自动完成此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |