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

在Fortran中使用CMPLX函数实现双精度或四精度,fortran,gfortran,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::

这是我的代码:

    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: 代码块16.01

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

从实数(8)到默认类型复数(4)的转换可能会失去精度,考虑使用类参数< /P>


是否有任何方法可以使用
KIND
参数和
dp
qp
更改
CMPLX
函数结果的精度

正如警告消息所说,您希望使用可选的第三个参数来指定返回值的类型。见例

或者,在代码中:


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

正如我所说,我在编译后得到了这个信息,这意味着:1。CMPLX功能将
值1
2从
dp
转换为
sp
。CMPLX函数将
qp
转换为
sp
,用于
Value\u 2
如何强制CMPLX函数得到一个结果,第一种情况是
dp
,第二种情况是
qp
?对不起,我完全误解了你的问题(“使用”as“with out”using”)。我编辑了你的问题,这样其他人就不会犯同样愚蠢的错误。如果你认为我真的改变了你的意思,就把它滚回去。