Fortran 中复杂*16 参数是否有等效的 DEXP?

Is there an equivalent of DEXP for complex*16 arguments in Fortran?

如问题中所述:在 Fortran(90 及更高版本)中,复杂*16 参数是否有等效的 DEXP?

complex*16 不是 Fortran(90 或更早或更高版本)。 如果你的数据类型是complex(real64)(或者非标准的complex*16),标准的泛型exp()会select相应的精度和范围。

其中每个部分(实部和虚部)都是 64 位?

如果你说 COMPLEX(KIND=8) (intel) 你会得到 64 位的实数和虚数。我需要看看 gfortran 给出了什么...

最好(我认为最便携)使用 ISO_C_BINDING 然后 'see for yourself' :

PROGRAM ABC
USE ISO_C_BINDING
IMPLICIT NONE

COMPLEX(KIND=C_FLOAT_COMPLEX)  :: A
COMPLEX(C_DOUBLE_COMPLEX)      :: B
COMPLEX(C_LONG_DOUBLE_COMPLEX) :: C

WRITE(*,*) SIZEOF(A)=',SIZEOF(A)
WRITE(*,*) SIZEOF(B)=',SIZEOF(B)
WRITE(*,*) SIZEOF(C)=',SIZEOF(C)

END PROGRAM ABC

从 Fortran 77 开始,几乎没有理由直接使用 DEXP(),除非您将其作为参数传递。

在普通表达式中(到目前为止最常见的用法,可能是你的情况)只需对所有指数使用通用 EXP()

如果您遇到 DEXP() 作为参数传递给函数的罕见情况,那么不,没有等价物,您必须编写一个调用通用 EXP() 的包装函数。

GNU Fortran 中的 zexp() 和 cdexp()。 http://gcc.gnu.org/onlinedocs/gfortran/EXP.html