2012-05-09 10 views
20

Fortran 90で書かれたプログラムのマニュアルには、「実際の変数とパラメータはすべて64ビット精度で指定されています(すなわちreal*8)」となっています。「実際の* 8」は何を意味しますか?

Wikipediaによると、単精度は32ビット精度に対応しますが、倍精度は64ビット精度に対応するため、プログラムでは倍精度が使用されているようです。

しかし、real*8は何を意味しますか?

8は、8桁が小数点以下に続くことを意味すると考えました。しかしながら、Wikipediaは、通常、単精度は6-9桁を提供し、一方double precisionは通常15-17桁を提供すると考えられる。これは、 "64ビット精度"という文がreal*8と矛盾していることを意味しますか?

答えて

28

8は、データ型が使用するバイトの番号を指します。

したがって、32ビット整数は同じ行に沿ってinteger*4です。

「REAL * 4」文は7精度の桁との大きさの範囲を持っている単精度4バイト実数する変数名を指定しています

クイック検索には含まれており、this guide to Fortran data typesを見つけました10から-38から+38まで。 "実際の"ステートメントは、ほとんどすべての32ビットコンピュータで "実際の* 4"ステートメントと同じです。

「REAL * 8」の文は、+ 15、精度の桁との-308から10の大きさの範囲を持っている倍精度8バイト実数する変数名を指定します308。 "倍精度"ステートメントは、ほぼすべての32ビットコンピュータで "real * 8"ステートメントと同じです。

+9

-1 Jon Skeetが古典的で誤解を招くような言葉から引用してFortranの質問に答えるためのものです。この質問に対する他の答えは、現代のFortranのより良い理解を示しています。 –

+5

@HighPerformanceMark:おそらくあなたは私にそれまでに変わるためのより有用なリンクを与えることができますか?確かに私はFortranについて少し知識があると主張するつもりはありませんが、答えの中核(8はバイト数を表す)は実際には間違っているか誤解を招きますか? –

10

スター表記は、(TYPE*nが呼び出されるように)CHARACTER以外TYPEで使用される場合に非標準のFortran構築物です。

文字型に適用すると、n文字(またはn文字の文字列)の配列が作成されます。

別のタイプに適用する場合は、ストレージサイズをバイト単位で指定します。これは、タイプKINDのコンセプトが導入されているFortran 90+のどのコストでも避けるべきです。ストレージサイズを指定すると、ポータブルではないアプリケーションが作成されます。

21

Fortranで精度を指定する方法は少なくとも4つあります。

既に回答したように、real*8はバイト数を指定します。それはやや古いですが、安全でなければなりません。

新しい方法は「種類」です。必要な精度を持つ種類を取得するには、組み込み関数を使用する必要があります。異なるコンパイラが異なる値を使用するため、特定の数値による種類の指定は危険です。

さらに別の方法は、名前付きのタイプのISO_C_Bindingを使用することです。This questionは、整数の種類システムについて議論しています。

+5

UPDATE:ISO環境モジュールのFortran 2008拡張がより一般的にサポートされるようになりました。したがって、 'ISO_FORTRAN_ENV'を使用すると、ビット数で実数型と整数型を指定する種類の値にアクセスできます(例えば、' real(real32):: 'と' real(real64):: '記憶容量の大きさで型を指定する方法。 –

関連する問題