cmplx中的精度和种类()

时间:2016-03-27 02:16:28

标签: fortran complex-numbers

根据文件。

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的重点是什么?

1 个答案:

答案 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的参数期望双精度复杂论证。