如问题中所述:Fortran(90及更高版本)中复杂* 16参数的DEXP是否等效?
答案 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)
zexp()和cdexp()。 http://gcc.gnu.org/onlinedocs/gfortran/EXP.html