我正在使用Fortran语言中的
在文件的其他地方,我可以成功调用
我认为
ieee_arithmetic
,在运行gfortran版本5.4.0的Linux机器上。当我尝试为Inf
和NaN
初始化值时,出现了除以零的错误。在文件的其他地方,我可以成功调用
ieee_is_finite()
而没有任何问题,因此看起来ieee_arithmetic
并没有问题。我认为
ieee_arithmetic
允许在这些特定情况下使用除以零,但我可能是遗漏了什么。下面是一段代码示例:module rcrlib_gnu
use, intrinsic :: ieee_arithmetic ! requires gfortran version 5.0 or higher
implicit none
integer, parameter :: SP=kind(1.0), DP=selected_real_kind(9,99)
integer, parameter :: stderr=0
public SP, DP, is_finite, stderr, initialize
contains
subroutine initialize(infty,nan)
real(kind=DP), intent(out) :: infty, nan
infty = 1.0_dp/0.0_dp ! huge(1.0_dp)
nan = 0.0_dp/0.0_dp
end subroutine initialize
elemental function is_finite(x)
real(kind=DP), intent(in) :: x
logical :: is_finite
is_finite = ieee_is_finite(x) ! This call requires "ieee_arithmetic"
end function is_finite
end module rcrlib_gnu
看起来我缺少一些基础知识,所以我会非常感激任何帮助。
为了重现错误,请将上面的代码片段保存为rcrlib_gnu_example.f90
,然后执行以下命令:
gfortran -o rcr rcrlib_gnu_example.f90
生成的错误输出如下:
rcrlib_gnu_example.f90:12:18:
infty = 1.0_dp/0.0_dp ! huge(1.0_dp)
1
Error: Division by zero at (1)
rcrlib_gnu_example.f90:13:16:
nan = 0.0_dp/0.0_dp
1
Error: Division by zero at (1)
ieee_arithmetic
中,除以零会产生+Inf
或NaN
。 - Tyler R.Inf
和NaN
的方法不仅限于除法。如果您需要的是将十进制表示转换为大于最大有限浮点数加半个ULP的值,则会得到Inf
,而一旦您拥有了Inf
,就可以通过Inf - Inf
获得NaN
。(不确定这是否有用,但我想提一下以防万一。) - Pascal Cuoq