【发布时间】:2016-11-23 23:52:54
【问题描述】:
如问题所述:Fortran(90 及更高版本)中复杂 *16 参数是否有等效的 DEXP?
【问题讨论】:
标签: fortran fortran90 fortran95
如问题所述:Fortran(90 及更高版本)中复杂 *16 参数是否有等效的 DEXP?
【问题讨论】:
标签: fortran fortran90 fortran95
complex*16 不是 Fortran(90 或更早或更晚)。
如果你的数据类型是complex(real64)(或者非标准的complex*16),标准的泛型exp()会选择对应的精度和范围。
【讨论】:
每个部分(实部和虚部)都是 64 位的?
如果你说 COMPLEX(KIND=8) (intel),你会得到 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
【讨论】:
use iso_fortran_env, only : real64; complex(kind=real64) z; end 可能是最好的选择。但这并没有真正解决如何对这样一个值求幂的问题。
从 Fortran 77 开始,几乎没有理由直接使用 DEXP(),除非您将其作为参数传递。
在普通表达式中(目前为止最常见的用法,可能是您的情况),只需使用泛型 EXP() 进行所有求幂。
如果您遇到 DEXP() 作为参数传递给函数的罕见情况,那么不,没有等价物,您必须编写一个调用通用 EXP() 的包装函数。
【讨论】:
zexp() 和 cdexp()。 http://gcc.gnu.org/onlinedocs/gfortran/EXP.html
【讨论】: