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

时间:2018-08-26 14:17:17

标签: for-loop lua floating-point

在LUA中(在introduction of integers in 5.3之前),用于处理for循环中计算出的范围值的典型方法是什么?在 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

不熟悉此领域的程序员可能会因输出 print()而感到困惑,因为它会输出3!

将舍入函数应用于最接近的整数可以在这里工作。我了解approximatation with FP以及失败的原因,我对LUA中典型的样式/解决方案感兴趣。

相关问题:

1 个答案:

答案 0 :(得分:2)

解决方案是避免对浮点数学的依赖,因为浮点数学可能会成为问题。或者,更现实的是,仅需注意何时使用FP并注意精度问题。这不是Lua问题,需要Lua特定的解决方案。

maybethree是一个错误的名词:从不是三个。您上面的代码是确定性的。它将始终仅打印ab。由于maybethree变量小于3,因此for循环当然不会执行3次。

print函数的行为也与定义/预期的一样。使用string.format可以显示其所有FP编号:

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

仍然需要使用计算所得的值来控制您的for循环吗?然后,您已经提到了答案:实现舍入功能。