Fortran 输出 NaN 的所有情况是什么?

And*_*rej 5 debugging fortran nan

我知道除以零和负实数的平方根会输出 NaN。还有其他类似的问题吗?

Rod*_*ues 5

我将参考关于 NaN 的维基百科条目和 Fortran 标准来尝试枚举它们。

\n\n
\n

可以返回 NaN 的操作有以下三种:[5]

\n\n
    \n
  • 使用 NaN 作为至少一个操作数的运算。
  • \n
\n
\n\n

在 Fortran 中,这将包括算术和比较运算符的应用,以及数学内在函数。

\n\n
\n
    \n
  • 不定形式:

    \n\n
      \n
    • 划分 (\xc2\xb10) / (\xc2\xb10) 和 (\xc2\xb1\xe2\x88\x9e) / (\xc2\xb1\xe2\x88\x9e)。
    • \n
    • 乘法 (\xc2\xb10) \xc3\x97 (\xc2\xb1\xe2\x88\x9e) 和 (\xc2\xb1\xe2\x88\x9e) \xc3\x97 (\xc2\xb10)。
    • \n
    • 加法 (+\xe2\x88\x9e) + (\xe2\x88\x92\xe2\x88\x9e), (\xe2\x88\x92\xe2\x88\x9e) + (+\xe2\x88\x9e) ) 和等效减法 (+\xe2\x88\x9e) \xe2\x88\x92 (+\xe2\x88\x9e) 和 (\xe2\x88\x92\xe2\x88\x9e) \xe2\x88\x92 ( \xe2\x88\x92\xe2\x88\x9e)。
    • \n
    • 该标准具有权力的替代功能:\n \n
        \n
      • 标准 pow 函数和整数指数 pown 函数将 0\xe2\x81\xb0、1\xe2\x88\x9e 和 \xe2\x88\x9e\xe2\x81\xb0 定义为 1。
      • \n
      • powr 函数将所有三种不确定形式定义为无效操作,因此返回 NaN。
      • \n
    • \n
  • \n
\n
\n\n

因此,包括所有算术运算符(以及原子操作函数)。这一切都很明显,接下来就是有趣的事情了:

\n\n
\n
    \n
  • 具有复杂结果的实际运算,例如:\n \n
      \n
    • 负数的平方根。
    • \n
    • 负数的对数。
    • \n
    • 小于 \xe2\x88\x921 或大于 1 的数字的反正弦或余弦。
    • \n
  • \n
\n
\n\n

这意味着(正如 @kvantour 在评论中所说)任何在其域之外调用的内部函数:, SQRT, LOG, ATAN, ATAN2, ACOS, ACOSH, ASIN, ASINH, FRACTION, RRSPACING,SET_EXPONENTSPACING

\n