Подтвердить что ты не робот

Почему -freciprocal-math небезопасно в GCC?

-freciprocal-math в GCC изменяется следующий код

double a = b / c;

to

 double tmp = 1/c;
 double a = b * tmp;

В руководстве GCC говорится, что такая оптимизация небезопасна и не привязана к стандартам IEEE. Но я не могу придумать пример. Не могли бы вы привести пример?

4b9b3361

Ответ 1

Разделение на 10 и умножение на 0,1000000000000000055511151231257827021181583404541015625 - это не одно и то же.

Ответ 2

Возможно, я имею в виду другой флаг компилятора, но...

Некоторые процессоры имеют инструкции для расчета приблизительной обратной величины. RCPSS om x86 (инструкция SIMD) приходит на ум; он имеет относительную ошибку 1,5 * 2 ^ -12. Использование этого флага может позволить компилятору выбрать приблизительную ответную инструкцию, которая может быть небезопасной в зависимости от вашего приложения.

Надеюсь, что это поможет.