Я пытаюсь найти стандартизованный способ проверить значения 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
, кажется мне взломанным, и IMHO может вызвать некоторые проблемы с построением - например, если некоторые компиляторы проверяют это во время компиляции, вам нужно будет предоставить специальный флаг.
Есть ли способ, который я могу реализовать в стандартном Fortran 90/95?
function isinf(x)
! Returns .true. if x is infinity, .false. otherwise
...
end function isinf
и isnan()
?