为什么 OpenSCAD 中的 2 / -2 / 2 等于 -2?(运算的数学顺序)

3D打印 opencad
2021-04-27 23:11:01

最近我一直在 OpenSCAD 中做更复杂的数学运算,但遇到了一些我觉得奇怪的事情。取一个简单的数学表达式:2 / 2 / 2. 对于任何编程语言,这将等于 0.5 (1/2),OpenSCAD 同意。像这样:2 / -2 / 2出于同样的原因,也应该是 -0.5。但是,OpenSCAD 认为这是 -2。那就是echo(2 / -2 / 2);ECHO: -2. 我的计算器、其他编程语言(和我自己)都说它是 -0.5。

这是 OpenSCAD 的一个怪癖,还是我遗漏了一些明显的东西?

2个回答

我怀疑您看到的行为是 OpenSCAD 的一个未记录的功能(又名,错误)。我在最新的稳定版本中发现,如果 - 放在两端,结果是 -0.5,但在中间,我的结果和你的一样。但是,用括号将 -2 括起来会导致正确答案。

括号似乎将数学运算转换为有符号整数。因此,没有括号的操作是从右到左的:

2/2 = 1,负 1 加减号,2/-1 = -2

将此问题作为 OpenSCAD 项目的错误提交,现在有一个修复合并到 master 中,以及一个测试用例以防止回归。从现在开始,最新的每晚构建应该正确处理这个问题。