是什么导致浮点异常“1.#IO”

What leads to the floating point exception "1.#IO"

我正在调试一个模拟,其中包含许多 Fortran 文件中的许多计算。我习惯于看到一些浮点异常(-1.#QNB 或 1.#QNAN),因为这些错误涉及被零除或超过浮点数最大大小的操作。我假设 -1.#IO 表示无效操作,但我不确定从数学上讲是什么导致了这种情况,而不是 QNB、QNAN 或 QINF。

什么会导致异常-1.#IO?

根据IEEE 754 Standard for Floating Point Operations,无效操作发出信号

when a NaN or infinite operand cannot be represented in the destination format and this cannot otherwise be indicated [...] When a numeric operand would convert to an integer outside the range of the destination format, the invalid operation exception shall be signaled if this situation cannot otherwise be indicated.

This page举几个例子:

  • 零 * 无穷大
  • 零/零
  • 无穷大/无穷大
  • 负操作数的平方根
  • [还有一些]