В каких ситуациях Fortran выводит NaN? - PullRequest
0 голосов
/ 10 октября 2018

Я знаю, что деление на ноль и квадратный корень из отрицательного действительного числа выводит NaN.Есть ли другие подобные проблемы?

1 Ответ

0 голосов
/ 14 октября 2018

Я буду ссылаться на запись в Википедии о 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

...