В GCC мы включаем -ffast-math
для ускорения вычислений с плавающей запятой. Но, как мы полагаемся на правильное поведение значений с плавающей точкой NaN и Inf, мы также включить -fno-finite-math-only
, так что оптимизация, которые принимают значения не являются NaN/InfMSVC эквивалентен GCC -fno-final-math-only?
Для MSVC, то «эквивалент» для -ffast-math
, по-видимому /fp:fast
. Однако, как и у GCC -ffast-math
, это also includes оптимизация, предполагающая, что Nan/Inf нет. (Критически, кажется, что тесты, такие как std :: isnan(), не гарантируют получение «точных» результатов.)
Есть ли опция для компиляции MSVC C++, которая позволяет вам использовать большинство оптимизаций /fp:fast
, но все же рассматривает значения NaN и Inf «правильно»? (Или, по крайней мере, гарантирует, что тесты, как станд :: IsNaN()/станд :: isinf() обнаружит NaN/Inf, если они случаются, которые будут созданы.)
Скорее всего, вы не найдете такой переключатель. Насколько я знаю, каждый коммутатор, добавленный в компилятор, удваивает усилия по тестированию на стороне Microsoft. Вот почему они сейчас неохотно добавляют новые коммутаторы. – stgatilov