Я буду ссылаться на запись в Википедии о NaN и Fortran Standard, чтобы попытаться перечислить их.
Существует три вида операций, которые могут возвращать NaN: [5]
- Операции с NaN как минимум одним операндом.
В Фортране это будет включать применение арифметических и сравнительных операторов, а также встроенных математических функций.
Неопределенные формы:
- Деления (± 0) / (± 0) и (± ∞) / (± ∞).
- Умножения (± 0) × (± ∞) и (± ∞) × (± 0).
- Сложения (+ ∞) + (−∞), (−∞) +(+ ∞) и эквивалентные вычитания (+ ∞) - (+ ∞) и (−∞) - (−∞).
- Стандарт имеет альтернативные функции для степеней:
- Стандарт Powфункция и функция целочисленного показателя степени задают 0⁰, 1∞ и ∞⁰ как 1.
- Функция powr определяет все три неопределенные формы как недопустимые операции иso возвращает NaN.
Итак, все арифметические операторы включены (а также функции атомарных операций).Все это было довольно очевидно, самое интересное следующее:
- Реальные операции со сложными результатами, например:
- Квадратный корень из отрицательного числа.
- Логарифм отрицательного числа.
- Обратный синус или косинус числа, которое меньше -1 или больше 1.
Это будет означать (как сказал @kvantour в комментариях) любую внутреннюю функцию, вызываемую вне ее домена: SQRT
, LOG
, ATAN
, ATAN2
, ACOS
, ACOSH
, ASIN
, ASINH
, FRACTION
, RRSPACING
, SET_EXPONENT
, SPACING