Search code examples
additionsubtractionassociativity

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


Is a - b + c - d = a + c - b - d mathematically correct?

I believe this statement can be correct but only sometimes if the order of evaluation does not matter so if I were to do {(a - b) + c} - d and choose numbers that would evaluate to {(a + c) - b} - d where b and c are both the same numbers then this may be correct.

Is there a more mathematical and logical explanation for this?

I also think it has to do with associativity but that would prove that this statement is never correct since addition and multiplication are associative (separately) but not addition and subtraction together


Solution

  • This highly depends on the definition of + and -. So far as you have written, they are but free untyped infix symbols so it's hard to tell.

    A simple example. Suppose values are of fixed-width floating point type (like one of those defined in IEEE-754, for instance). Next, if we have

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

    and the expressions are evaluated greedily left-to-right, then

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

    When the type has enough order bits to contain decimal orders of -100 and 100, but its mantissa is not wide enough to correctly represent 10e100 + 10e-100, specifically, the RHS argument is simply lost in this expression, then the value of the whole large expression is

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

    But the second expression would evaluate to

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

    So you see, the result can differ by 100% depending on the order of evaluation.