ifort编译器中“ floating invalid”的含义

时间:2019-01-30 03:52:42

标签: fortran floating intel-fortran traceback

我为Fortran代码使用Intel的ifort编译器。

有时候我在跑步时遇到错误:

forrtl: error (65): floating invalid

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

  1. 下溢,表示太接近0,例如1e-30。
  2. 溢出,这意味着太大,例如无限/无限,除以零。
  3. NaN。

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

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

1 个答案:

答案 0 :(得分:2)

Intel Fortran编译器通常使用IEEE算术。 “浮动无效”消息是由于无效操作的未处理IEEE异常导致的。

下溢和上溢不会被视为无效操作(请注意,将零本身除以零,或将无穷除以另一个无穷是无效的,不会溢出)。从根本上讲,无效运算是一种在数学上不属于运算符范围的运算。不仅是前面提到的两个例子,还包括取平方根或负实数的对数。或不适当地使用NaN。

Intel编译器已经支持Fortran 2003的IEEE功能已有一段时间。您可以使用它们来更好地捕获异常。编译时选项fpe控制编译器如何响应异常。