我正在尝试以 64 位编译我的程序。我使用 gfortran 和选项
default-real-8
来编译:
-fdefault-real-8 Set the default real type to an 8 byte wide type.
我使用Fortran的stdlib
但出现错误:
build\dependencies\stdlib\src\stdlib_specialfunctions_gamma.f90:1175:18:
1175 | res = l_gamma(n + 1, 1.0D0)
| 1
Error: There is no specific function for the generic 'l_gamma' at (1)
如果我相信这个错误,则包含此调用的函数是
impure elemental function l_factorial_iint64(n) result(res)
integer(int64), intent(in) :: n
[...]
res = l_gamma(n + 1, 1.0D0)
end function
所以
n
是 int(8) 且 1.0D0
是 real(8),我认为它应该找到这个重载:
impure elemental function l_gamma_iint64dp(z, x) result(res)
integer(int64), intent(in) :: z
real(dp), intent(in) :: x
[...]
end function
但显然不是。对于 Fortran 和
kind
的东西来说还很陌生,我想我错过了一些东西!
1.0D0
将从REAL(8)
提升为REAL(16)
,文档非常清晰:
如果可能,此选项会将 DOUBLE PRECISION 和双实数常数(如 1.d0)的默认宽度提升为 16 个字节。
由于
l_gamma
在real(16)
上没有重载,所以编译失败。