gfortran编译器调用递归log_gamma函数时出错

Den*_*eau 1 fortran gfortran

我上传了一个 2F1 超几何函数,但结果发现它无法在我的计算机上编译。是出自这篇文章。我用

GNU Fortran (Built by Jeroen for the R-project) 8.3.0
Run Code Online (Sandbox Code Playgroud)

随 RTools 4.0 一起提供。你能找出为什么它不能编译以及如何解决这个问题吗?在下面的代码中,我只保留了生成错误的一行。接下来给出错误。

MODULE HYP_2F1_MODULE
  !--------------------------------------------------------------------
  IMPLICIT NONE
  INTEGER, PARAMETER :: PR=KIND(1.0D0)
  REAL(PR)     ::  ONE=1.0D0
CONTAINS
  !
END MODULE HYP_2F1_MODULE
!
!----------------------------------------------------------------------
RECURSIVE FUNCTION LOG_GAMMA(Z) RESULT(RES)

  USE HYP_2F1_MODULE
  IMPLICIT NONE
  COMPLEX(PR),INTENT(IN) :: Z
  COMPLEX(PR)  :: RES
  !
     RES = LOG_GAMMA( ONE -z);
  !
END FUNCTION LOG_GAMMA
Run Code Online (Sandbox Code Playgroud)

这是错误消息

 testZ.f90:18:22:

      RES = LOG_GAMMA( ONE - Z);
                 1
Error: 'x' argument of 'log_gamma' intrinsic at (1) must be REAL
Run Code Online (Sandbox Code Playgroud)

Vla*_*r F 5

有一个同名的 Fortran 2008+ 内在函数

16.9.119 LOG_GAMMA (X)
1 描述。伽马函数绝对值的对数。
2 类。基本功能。
3 论证。X 应为实数类型。它的值不能是负整数或零。

这里存在某种我不完全理解的冲突。明显的解决方法是重命名您的函数。我能说的是,如果没有结果子句(由于递归属性,您需要它),内在函数将被隐藏。这可能是一个编译器错误。

还要考虑,同名的内在函数是否也不能满足您的函数的需要。