Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran cmplx()中的精度和种类_Fortran_Complex Numbers - Fatal编程技术网

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
更便于移植吗?