Я пытался найти совместимый со стандартами способ проверки значений Infinite и NaN в Fortran 90/95, но это оказалось сложнее, чем я думал.
- Я попытался вручную создать переменные Inf и NaN, используя двоичное представление, описанное в IEEE 754, но не нашел такой функциональности.
- Я знаю о встроенном модуле
ieee_arithmetic
в Fortran 2003 со встроенными функциямиieee_is_nan()
иieee_is_finite()
. Однако он поддерживается не всеми компиляторами (особенно gfortran начиная с версии 4.9). ).
Определение бесконечности и NaN в начале, таких как pinf = 1. / 0
и nan = 0. / 0
, кажется мне хакерским, и ИМХО может вызвать некоторые проблемы со сборкой - например, если некоторые компиляторы проверяют это во время компиляции, нужно будет указать специальный флаг.
Есть ли способ реализовать в стандартном Fortran 90/95?
function isinf(x)
! Returns .true. if x is infinity, .false. otherwise
...
end function isinf
и isnan()
?
IEEE_ARITHMETIC
, но поддержка более старых версий по-прежнему является проблемой и будет существовать еще долгое время. - person Vladimir F   schedule 23.05.2016