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
如问题中所述:在 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