Как определить порядок оценки математического выражения и его правильность? - PullRequest
0 голосов
/ 03 февраля 2019

Является ли математически корректным a - b + c - d = a + c - b - d?

Я считаю, что это утверждение может быть правильным, но только иногда, если порядок оценки не имеет значения, поэтому если бы я былсделать {(a - b) + c} - d и выбрать числа, которые будут оцениваться как {(a + c) - b} - d, где b и c являются одинаковыми числами, тогда это может быть правильным.

Есть ли более математическое и логическое объяснение этому?

Я также думаю, что это связано с ассоциативностью, но это доказало бы, что это утверждение никогда не бывает правильным, так как сложение и умножение являются ассоциативными (отдельно), но не сложением и вычитанием вместе

1 Ответ

0 голосов
/ 03 февраля 2019

Это сильно зависит от определения + и -.Насколько вы написали, это всего лишь бесплатные нетипизированные инфиксные символы, поэтому трудно сказать.

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

...