1

プログラムをRedHatLinuxからIBMAIXに移植しようとしていますが、IBMシステムの精度はRedHatシステムとは異なるようです。なぜこれが起こっているのか誰かが知っていますか?次に例を示します。

program main
implicit none
real(8) a
a=0.2D0
print *,a
end program

Red Hatでは、次の出力が得られます。

0.200000000000000

AIXでは、次の出力が得られます。

0.200000000000000011

私が使用しているシステムのバージョン:

IBM XL Fortran for AIX、V13.1(5724-X15)バージョン:13.01.0000.0005

Linux 2.6.18-8.el5 x86_64

ifortバージョン10.0

4

2 に答える 2

1

これはおそらく、印刷されるデフォルトの桁数の違いにすぎません。0.22進浮動小数点数として正確に表すことはできないため、常に最下位桁にいくらかのガベージがあります。フロートに対して印刷されるデフォルトの桁数はifort、この場合は表示されないように、単純に十分に低く設定されています。実際の計算(ほとんどの場合)の精度は同じです。両方のコンパイラでこれを試してください。

print '(f24.20)',0.2d0

これによりifort、最後にあるものも表示されます。私のコンピューターでは、それは印刷され0.20000000000000001110ます。

于 2012-11-02T21:56:21.920 に答える
1

printステートメントの*は、リスト指向のフォーマットを意味します。実定数の場合、桁数に「適切なプロセッサ依存値」(F2008 10.10.4 p6)が使用されます。あなたはFortranプロセッサーを変更しました、そしてそれらのプロセッサーは単に合理的であるとして異なる桁数を選択しました。

出力形式を明示的に制御する場合は、フィールド幅、10進数の桁数、および(場合によっては)指数文字の数を指定する明示的な出力形式を使用します。これにより、プロセッサへの依存がなくなります。

変数のメモリ内精度は、おそらく両方のプロセッサで同じです(KIND(1.0D0)== 8であり、8のKINDはIEEE倍精度を意味すると仮定します)。ただし、0.2はその浮動小数点表現で正確に表現できないことに注意してください。

于 2012-11-02T22:08:12.023 に答える