在Fortran中使用CMPLX函数实现双精度或四精度

时间:2017-12-17 16:42:44

标签: fortran gfortran

这是我的代码:

    Program Complex_Double_Quad_Precision

    Use, intrinsic :: iso_fortran_env

    Implicit none

    Integer, parameter :: sp = REAL32
    Integer, parameter :: dp = REAL64
    Integer, parameter :: qp = REAL128

    Real(sp),parameter:: Some_Value_0 = 4.56
    Real(dp),parameter:: Some_Value_1 = 4.56
    Real(qp),parameter:: Some_Value_2 = 4.56

    Complex(sp):: Value_0
    Complex(dp):: Value_1
    Complex(qp):: Value_2

    Value_0 = cmplx( Some_Value_0 , Some_Value_0 )
    Value_1 = cmplx( Some_Value_1 , Some_Value_1 )
    Value_2 = cmplx( Some_Value_2 , Some_Value_2 )

    Write(*,*) Value_0
    Write(*,*) Value_1
    Write(*,*) Value_2

    End Program Complex_Double_Quad_Precision

我的IDE: CodeBlocks 16.01。

我打算学习如何在复杂计算中使用双精度或四精度。在我的代码中,在编译和启动代码后,我收到了这条消息:

  

从REAL(8)到默认类COMPLEX(4)的转换可能会失去精度,请考虑使用KIND参数

有没有办法使用CMPLX参数和KIND以及dp来更改qp函数结果的精度?

1 个答案:

答案 0 :(得分:2)

与警告消息一样,您希望使用CMPLX的可选第三个参数来指定返回值的类型。参见例如https://gcc.gnu.org/onlinedocs/gfortran/CMPLX.html

或者,在您的代码中:


Value_1 = cmplx( Some_Value_1 , Some_Value_1, dp )
Value_2 = cmplx( Some_Value_2 , Some_Value_2, qp )