根据文件。
cmplx(x,y)
默认提供单精度。
但它有kind
参数
CMPLX(x,y,kind)具有复数值,其实部为REAL(x, 那种想象的部分是真实的(y,kind)。
但我试过这个
print*,cmplx(1.12,2.34,kind(0D0))
它给出了
(1.12000000476837,2.33999991416931)
它是complex(8)
,但精度会丢失。
虽然我知道在这种情况下,我可以简单地使用(1.12D0,2.23D0)
。但我想知道 kind
中cmplx
的重点是什么?
答案 0 :(得分:2)
问题是常量是单精度的,即使它们用于定义双精度变量。您需要指定常量的精度。下面的示例程序使用类似real64
,这意味着64位(即双精度),来自Fortran 2003的ISO Fortran环境,以显示:
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
选项在其他上下文中很有用,例如,更改传递给子例程的变量的类型以匹配预期的参数:call SomeSub ( cmplx (1.12, 2.34, kind (0D0) )
将匹配子例程SomeSub
的参数期望双精度复杂论证。