web-dev-qa-db-ja.com

「real * 8」とはどういう意味ですか?

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

Wikipedia によれば、単精度は32ビット精度に対応しますが、倍精度は64ビット精度に対応するため、プログラムは明らかに倍精度を使用します。

しかし、real*8はどういう意味ですか?

8は、8桁が小数点の後に続くことを意味すると思った。ただし、 ウィキペディア は、単精度が通常6-9桁を提供するのに対し、 倍精度 は通常15-17桁を提供すると言います。これは、ステートメント「64ビット精度」がreal*8と矛盾することを意味しますか?

28
Andrew

8は、データ型が使用するbytesの数を指します。

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

クイック検索が見つかりました このFortranデータ型ガイド には以下が含まれます:

「real * 4」ステートメントは、7桁の精度と-38から+38までの範囲10の大きさを持つ単精度の4バイト実数である変数名を指定します。 「real」ステートメントは、ほぼすべての32ビットコンピューターの「real * 4」ステートメントと同じです。

そして

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

33
Jon Skeet

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

すでに答えたように、real*8はバイト数を指定します。多少時代遅れですが、安全なはずです。

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

さらに別の方法は、ISO_C_Bindingの名前付きタイプを使用することです。 この質問 整数の種類システムについて説明します-実数については非常に似ています。

24
M. S. B.

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

文字タイプに適用される場合、n文字の配列(またはn文字の文字列)を作成します。

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

14
Hristo Iliev