Немного странный ответ, но вообще говоря ошибочный код может вести себя произвольным образом и, например, давать правильный ответ на одной аппаратной платформе и неправильный на другой (реальные случаи). Это не повод не делать другие аппаратные платформы или оптимизации
Не... Я не про это, вот смотрите. В математике есть постулат: От перестановки мест слагаемых, сумма не меняется.
С математикой понятно, тут вопросов нет. Другой разговор, когда есть ограничения (а в любом процессоре оно есть). Так как оптимизации предполагают некоторые математические аксиомы для операций (свертывание констант, вынос за скобки и т.д.) мы можем получить следующий оптимизированный код. Я сейчас утрировано и просто, что бы не заморачиваться сложными, реальными примерами:
MAX(INTEGER) - 200 + 100 <- переполнения нет
MAX(INTEGER) + 100 - 200 <- переполнение
И вот такие вопросы и надо знать в первую очередь, так как электронное устройство, в отличие от математического отличается ограничениями на количество оперируемых бит!