2016-03-27 5 views
1

文書によると、精度と種類cmplx()

cmplx(x,y)はデフォルトで単精度です。

しかしkindパラメータ

CMPLX(X、Y、種類)は、実部(X、 一種)REALである複素値を有し、虚数部REALである(Y、一種)を有しています。

しかし、私はそれはそれはcomplex(8)ですが、精度が失われた

(1.12000000476837,2.33999991416931) 

を与えるこの

print*,cmplx(1.12,2.34,kind(0D0)) 

を試してみました。

私はこの場合を知っていますが、私は単に(1.12D0,2.23D0)を使用することができます。しかし、私は不思議ですkindの点はcmplxですか?

答えて

2

倍精度変数を定義するために使用されても、定数は単精度であるという問題があります。定数の精度を指定する必要があります。あなたは1.23D0, 2.34D0で達成

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 

:次のプログラム例は、このことを示すためのFortran 2003のISO Fortranの環境から64ビット(すなわち、倍精度)を、意味の種類real64を、使用しています。 kindオプションは、予想される引数と一致するようにサブルーチンに渡される変数のタイプを変更するなど、他のコンテキストでは便利です。SomeSub倍精度複素数引数を必要とするサブルーチンSomeSubの引数と一致します。

+0

ありがとうございます。 'real64'は' D0'より移植性がありますか? – user15964