如何识别数学表达式的求值顺序及其正确性?

How to identify the order of evaluation of a mathematical expression and its correctness?

a - b + c - d = a + c - b - d 在数学上是否正确?

我相信这个说法可能是正确的,但只有在评估顺序无关紧要的情况下才会如此,所以如果我要这样做 {(a - b) + c} - d 并选择计算结果为 {(a + c) - b} - d 的数字,其中 b 和 c 都是相同的数字,那么这可能是正确的。

对此是否有更数学和逻辑的解释?

我也认为它与结合性有关,但这将证明这个说法永远不正确,因为加法和乘法是结合的(单独)而不是加法和减法结合

这在很大程度上取决于 +- 的定义。就您所写的而言,它们只是免费的无类型中缀符号,因此很难分辨。

一个简单的例子。假设值是固定宽度的浮点类型(例如 IEEE-754 中定义的那些类型之一)。接下来,如果我们有

a = 10e100
b = -10e-100
c = -10e100
d = -10e-100

然后从左到右贪婪地计算表达式,然后

a - b + c - d = ((a - b) + c) - d

当类型有足够多的阶位来包含-100 和 100 的十进制阶数,但它的尾数不够宽,无法正确表示 10e100 + 10e-100,具体来说,RHS 参数在这个表达式中只是丢失了,那么整个大表达式的值为

((10e100 - -10e-100) + -10e100) - -10e-100 =
= (10e100 + -10e100) - -10e-100 = 0 - -10e-100 = 10e-100

但是第二个表达式的计算结果为

((a + c) - b) - d = ((10e100 + -10e100) - -10e-100) - -10e-100 = 20e-100

所以你看,根据评估的顺序,结果可能相差 100%。