来自ifort编译器的"floating invalid"的含义

The meanings of "floating invalid" from ifort compiler

我将英特尔的 ifort 编译器用于我的 Fortran 代码。

有时我在 运行 期间遇到错误:

forrtl: error (65): floating invalid

编译器没有给出确切的"invalid"原因。据我了解,这是否暗示了以下情况之一?

  1. 下溢,太接近0,例如1e-30.
  2. 溢出,表示太大,例如infinity/-infinity,除以零。
  3. NaN.

这很有用,因为我可以使用 if 语句来检查实际发生了哪些情况。

此外,我正在使用 -g -traceback 选项进行调试。是否有提供更多详细信息的选项?

英特尔 Fortran 编译器通常使用 IEEE 算法。 "floating invalid" 消息是无效操作的未处理 IEEE 异常的结果。

下溢和上溢不被视为无效操作(注意零除以自身,或无穷大除以另一个无穷大是无效的,不是溢出)。在基本术语中,无效运算是指在数学上操作数不在运算符域中的运算。不只是前面提到的那两个例子,还有诸如对负实数求平方根或对数之类的事情。或者不恰当地使用 NaN。

英特尔编译器支持 Fortran 2003 的 IEEE 功能已有一段时间了。您可以使用它们来精细捕获异常。编译时选项 fpe 控制编译器如何响应异常。