Fortran cmplx()中的精度和种类
根据文件Fortran cmplx()中的精度和种类,fortran,complex-numbers,Fortran,Complex Numbers,根据文件 cmplx(x,y)默认为单精度 但是它有kind参数 CMPLX(x,y,kind)具有实数部分为实数(x, 其虚部是实部(y,kind) 但我试过这个 print*,cmplx(1.12,2.34,kind(0D0)) 它给 (1.12000000476837,2.33999991416931) 它很复杂(8),但精度会降低 虽然我知道在这种情况下,我可以简单地使用(1.12D0,2.23D0)。但是我想知道cmplx中的kind有什么意义 问题在于,这些常量是单精度的,即使它
cmplx(x,y)
默认为单精度
但是它有kind
参数
CMPLX(x,y,kind)具有实数部分为实数(x,
其虚部是实部(y,kind)
但我试过这个
print*,cmplx(1.12,2.34,kind(0D0))
它给
(1.12000000476837,2.33999991416931)
它很复杂(8),但精度会降低
虽然我知道在这种情况下,我可以简单地使用
(1.12D0,2.23D0)
。但是我想知道cmplx
中的kind
有什么意义 问题在于,这些常量是单精度的,即使它们用于定义双精度变量。您需要指定常量的精度。下面的示例程序使用Fortran 2003的ISO Fortran环境中的种类real64(即双精度)来说明这一点:
program test
use, intrinsic :: ISO_FORTRAN_ENV
print*,cmplx(1.12,2.34,kind(0D0))
print*,cmplx(1.12_real64,2.34_real64,kind(0.0_real64))
end program test
这是您使用
1.23D0、2.34D0
实现的。kind
选项在其他上下文中很有用,例如,更改传递给子例程的变量类型以匹配预期参数:调用SomeSub(cmplx(1.12,2.34,kind(0D0))
将与子例程SomeSub
的参数匹配,该子例程需要双精度复杂参数。谢谢您的回答。real64
比D0
更便于移植吗?