我为Fortran代码使用Intel的ifort编译器。
有时候我在跑步时遇到错误:
forrtl: error (65): floating invalid
编译器没有给出确切的“无效”原因。据我了解,这是否暗示以下情况之一?
这很有用,因为我可以使用if语句来检查实际发生了其中一种情况。
此外,我正在使用-g -traceback
选项进行调试。有没有提供更多详细信息的选项?
答案 0 :(得分:2)
Intel Fortran编译器通常使用IEEE算术。 “浮动无效”消息是由于无效操作的未处理IEEE异常导致的。
下溢和上溢不会被视为无效操作(请注意,将零本身除以零,或将无穷除以另一个无穷是无效的,不会溢出)。从根本上讲,无效运算是一种在数学上不属于运算符范围的运算。不仅是前面提到的两个例子,还包括取平方根或负实数的对数。或不适当地使用NaN。
Intel编译器已经支持Fortran 2003的IEEE功能已有一段时间。您可以使用它们来更好地捕获异常。编译时选项fpe
控制编译器如何响应异常。