在 64 位系统上获得 +-inf 我使用了下一个代码
double precision, parameter :: pinf = transfer(z'7FF0000000000000',1d0) ! 64 bit
double precision, parameter :: ninf = transfer(z'FFF0000000000000',1d0) ! 64 bit
它运作良好。
在 32 位上,我只有 ninf 的编译错误(!):
double precision, parameter :: ninf = transfer(z'FFF0000000000000',1d0
1
Error: Integer too big for integer kind 8 at (1)
赋值 ninf = -pinf
没有帮助并导致编译算术溢出错误:
double precision, parameter :: ninf = -pinf
1
Error: Arithmetic overflow at (1)
我知道 ieee_arithmetic 模块,但 gcc 不处理它。
是否有任何多架构方法可以将常量设置为正/负无穷大?
更新
Gfortran 选项-fno-range-check
抑制错误并成功编译该代码。
这不重要,但我仍然很有趣。为什么 gfortran 允许不断定义 +Infinity,但大声喊叫与 -Infinity 完全相同的东西?