在Lua中使用模数运算符时出现不准确的情况。

我刚刚在Lua中使用了模数(%),但是我发现它出奇地不准确。我在《魔兽世界》中使用它,但我认为至少应该是更新的。

无论如何,使用以下示例,输出将为1;

print((0.6/(0.1^(2-1)))%1)

但是当我使用以下内容时,它将返回0;

print((0.6*(10^(2-1)))%1)

就我所受过的教育而言,0.6/0.1应该等同于0.6 * 10。

这不是一个问题,但我只是对原因感到好奇。在数学上的不准确可能是相当灾难性的。

点赞
用户1244588
用户1244588

如果你查看 Lua 手册,% 操作被定义为

a % b == a - math.floor(a/b)*b

因此,表达式

6 - math.floor(6/1) * 1

将等于零。

但是,由于浮点数的不精确性(0.1 不存在浮点数,最接近的应该是 0.1000000014...),这些应该是你的中间结果:

> print(math.floor(0.6*10))
6
> print(math.floor(0.6/.1))
5

所以你得到

6 - 6 * 1 = 0
6 - 5 * 1 = 1

更多阅读

2013-05-26 02:02:15