Это сильно зависит от определения +
и -
.Насколько вы написали, это всего лишь бесплатные нетипизированные инфиксные символы, поэтому трудно сказать.
Простой пример.Предположим, что значения имеют тип с плавающей точкой фиксированной ширины (например, одно из тех, что определены в 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% в зависимости от порядка вычисления.