来自ifort编译器的"floating invalid"的含义
The meanings of "floating invalid" from ifort compiler
我将英特尔的 ifort 编译器用于我的 Fortran 代码。
有时我在 运行 期间遇到错误:
forrtl: error (65): floating invalid
编译器没有给出确切的"invalid"原因。据我了解,这是否暗示了以下情况之一?
- 下溢,太接近0,例如1e-30.
- 溢出,表示太大,例如infinity/-infinity,除以零。
- NaN.
这很有用,因为我可以使用 if 语句来检查实际发生了哪些情况。
此外,我正在使用 -g -traceback
选项进行调试。是否有提供更多详细信息的选项?
英特尔 Fortran 编译器通常使用 IEEE 算法。 "floating invalid" 消息是无效操作的未处理 IEEE 异常的结果。
下溢和上溢不被视为无效操作(注意零除以自身,或无穷大除以另一个无穷大是无效的,不是溢出)。在基本术语中,无效运算是指在数学上操作数不在运算符域中的运算。不只是前面提到的那两个例子,还有诸如对负实数求平方根或对数之类的事情。或者不恰当地使用 NaN。
英特尔编译器支持 Fortran 2003 的 IEEE 功能已有一段时间了。您可以使用它们来精细捕获异常。编译时选项 fpe
控制编译器如何响应异常。
我将英特尔的 ifort 编译器用于我的 Fortran 代码。
有时我在 运行 期间遇到错误:
forrtl: error (65): floating invalid
编译器没有给出确切的"invalid"原因。据我了解,这是否暗示了以下情况之一?
- 下溢,太接近0,例如1e-30.
- 溢出,表示太大,例如infinity/-infinity,除以零。
- NaN.
这很有用,因为我可以使用 if 语句来检查实际发生了哪些情况。
此外,我正在使用 -g -traceback
选项进行调试。是否有提供更多详细信息的选项?
英特尔 Fortran 编译器通常使用 IEEE 算法。 "floating invalid" 消息是无效操作的未处理 IEEE 异常的结果。
下溢和上溢不被视为无效操作(注意零除以自身,或无穷大除以另一个无穷大是无效的,不是溢出)。在基本术语中,无效运算是指在数学上操作数不在运算符域中的运算。不只是前面提到的那两个例子,还有诸如对负实数求平方根或对数之类的事情。或者不恰当地使用 NaN。
英特尔编译器支持 Fortran 2003 的 IEEE 功能已有一段时间了。您可以使用它们来精细捕获异常。编译时选项 fpe
控制编译器如何响应异常。