入力ファイルがあり、最初の行に次の 10 進数が含まれています。
0.5053102074297753
ファイルを読み取って値を出力する Fortran 90 プログラムがあります。
read(*,*) answer
write(*,"(F20.16)") answer
これは出力です:
0.5053101778030396
どうやら、保存されているものと読み取られているものは同じではありません。問題は、なぜですか?
回答はどのように宣言されますか? 単精度実数の場合、10 進数で約 6 桁の精度しか期待できません。
また、値は内部ストレージと計算のためにバイナリに変換されます。これにより、丸めやその他の問題が発生する可能性がありますが、ここでの差は、これが原因であるには大きすぎます。
回答を倍精度として宣言するには、次を使用します。
integer, parameter :: DRK = selected_real_kind (14)
real (kind=DRK) :: answer
これにより、回答が少なくとも 14 桁の 10 進数であることが保証されます。「DRK」はプログラム全体で使用できます。コンパイラによっては、さらに多くの桁数を要求することもできます...そのような型を提供する場合があります。倍精度以上が必要になることはめったにありません。
すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと。
デフォルトの実精度では、小数点以下 16 桁の数値を小数部に格納するには不十分です。