Lua: 在 for 循环中使用计算值的典型方法是什么?

在 LUA 中处理 for 循环中的计算范围值(在 5.3 版本之前)的典型方法是什么?在 numerical for 循环中对起始值和结束值进行数学计算,会使代码面临风险,可能会引发严重的潜在问题,因为这只会发生在某些值和/或计算排序的更改时。下面是一个编造的例子,展示了一个无法产生所需输出的循环:

a={"a","b","c","d","e"}
maybethree = 3
maybethree = maybethree / 94
maybethree = maybethree * 94
for i = 1,maybethree do print(a[i]) end

这会产生两个而不是所需的三个项目的不幸输出(在 64 位 x86 上的 5.1.4 上测试):

a
b

对于此处,将四舍五入函数应用于最接近整数的值可能管用。我了解 近似 FP 的原理以及其失败原因,但我对 LUA 中的典型风格/解决方案感兴趣。

相关问题:

点赞
用户4403144
用户4403144

解决方法是避免对浮点数的依赖,因为浮点数的精确度可能会变成一个问题。或者更加现实的是,在使用 FP 时要意识到精度问题。这不是一个需要使用 Lua 特定解决方案的 Lua 问题。

"maybethree" 是一个误称:它永远不是三。你上面的代码是确定性的。它总是只打印 "a" 和 "b"。因为 "maybethree" 变量小于三,所以 "for" 循环不会执行 3 次。

"print" 函数也表现得如预期一样。使用 "string.format" 来展示 FP 数字的所有细节:

print(string.format("%1.16f", maybethree)) -- 2.9999999999999996

仍需要使用计算出来的值来控制 "for" 循环吗?那么你已经提到了答案:实现一个舍入函数。

2018-08-26 15:07:18