Можно ли заставить isnan () работать в gfortran -O3 -fast-math?
Я хотел бы скомпилировать программу с gfortran и-O3 -ffast-math
включен, так как это дает хороший прирост производительности. Я был довольно смущен, что Gfortran'sisnan()
поймал немного NaN 'с, но не все из них. После прочтения
Проверка, является ли double (или float) NaN в C ++
как сделать переносную функцию isnan / isinf
Отрицательный NaN не является NaN?
У меня сложилось впечатление, что люди могут проверить на NaN 's в C с помощью бит-трюков даже при включенной быстрой математике. Тем не менее, это озадачивает меня, так как пост-математика
может привести к неправильному выводу для программ, которые зависят от точной реализации правил / спецификаций IEEE или ISO для математических функций.
Согласно справочной странице gcc 4.7.2. Итак, как вы узнаете, какой бит проверять, если числа не представлены в соответствии со стандартом IEEE? И если вы это знаете, как бы вы реализовали это в Фортране 95/03/08?
Дон»постить(x \= x)
или аналогичные решения, которые зависят от правил IEEE. Они дают тот же результат, что иisnan()
, Я тоже в курсе-ffpe-trap=invalid,zero,overflow
но неЯ не хочу останавливать программу. Если это поможет, моя ОС будет 64-битной LinuxMint 14. Если это невозможно в Fortran, было бы неплохо использовать водонепроницаемое C-решение.