在Fortran中是否存在与复杂* 16参数相当的DEXP?

时间:2016-11-23 23:52:54

标签: fortran fortran90 fortran95

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

4 个答案:

答案 0 :(得分:3)

复杂* 16不是Fortran(90或更早或更晚)。 如果您的数据类型很复杂(real64)(或非标准复杂* 16),则标准通用exp()将选择相应的精度和范围。

答案 1 :(得分:2)

每个部分(Real和Imaginary)是64位?

如果你说COMPLEX(KIND = 8)(英特尔),每个真实和虚数都会得到64位。我需要看看gfortran给了什么......

最好(我认为最便携)使用ISO_C_BINDING然后'自己看':

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

答案 2 :(得分:2)

由于Fortran 77没有理由直接使用DEXP(),除非你把它作为参数传递。

在正常表达式(迄今为止最常见的用法,可能是您的情况)中,只需对所有取幂使用通用EXP()

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

答案 3 :(得分:0)

GNU Fortran中的

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