0

私はfortran90の初心者です(30分前...)、このプログラムがあります:

program example1
    implicit none
    real (kind=8) :: x,y,z
    x = 3.d0
    y = 2.d-1
    z = x + y 
    print *, "y = ", y
    print *, "x = ", x
    print *, "z = ", z 
end program example1

しかし、私がそれを実行すると:

gfortran example1.f90
./a.out

出力は次のとおりです。

y =   0.20000000000000001     
x =    3.0000000000000000     
z =    3.2000000000000002   

なぜ3.2000000000000000ではないのですか??? 私が間違っていることは何ですか?y の最後の桁が 1 なのはなぜですか?? そして、なぜzの最後の桁に2があるのですか?? ばかげた質問で申し訳ありませんが、何が間違っているのかわかりません...

ありがとう!!

4

1 に答える 1

1

あなたのプログラムにはまったく問題はありません。この問題はreal、 がエラーなしで小数を正確に表現できないことに関係しています。問題は、 の負の累乗で構成されていない数2を近似的に表現しなければならないことです。そのため、小数点第 16 位に小さな誤差が生じます。realの表現の詳細については、wikipedia の記事を参照してください。これは、同じ主題に関する別の素晴らしい記事です。

に置き換える0.20.25、 が であるため、問題はなくなり0.25ます2 ^ -2

于 2013-05-20T01:58:52.497 に答える