Fortran中的无限

ast*_*rog 9 fortran infinity

在Fortran中将变量设置为+ Infinity最安全的方法是什么?目前我正在使用:

program test
  implicit none
  print *,infinity()
contains
  real function infinity()
    implicit none
    real :: x
    x = huge(1.)
    infinity = x + x
  end function infinity
end program test
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的方法?

Wil*_*cat 9

如果您的编译器支持 ISO TR 15580 IEEE Arithmetic,它是所谓的Fortran 2003标准的一部分,那么您可以使用ieee_*modules中的过程.

PROGRAM main

  USE ieee_arithmetic

  IMPLICIT NONE

  REAL :: r

  IF (ieee_support_inf(r)) THEN
    r = ieee_value(r,  ieee_negative_inf)
  END IF

  PRINT *, r

END PROGRAM main
Run Code Online (Sandbox Code Playgroud)