重複の可能性:
ロング ダブル vs ダブル
私はプログラミングが初めてで、C と C++ の long double と double の違いを理解できません。Googleで検索してみましたが、理解できず混乱しました。誰でも助けてください。
重複の可能性:
ロング ダブル vs ダブル
私はプログラミングが初めてで、C と C++ の long double と double の違いを理解できません。Googleで検索してみましたが、理解できず混乱しました。誰でも助けてください。
C++ 標準、§3.9.1 ¶8 を引用するには:
浮動小数点型には、float、double、long double の 3 つがあります。double 型は少なくとも float と同じ精度を提供し、型 long double は少なくとも double と同じ精度を提供します。float 型の値のセットは、double 型の値のセットのサブセットです。double 型の値のセットは、long double 型の値のセットのサブセットです。浮動小数点型の値表現は実装定義です。整数型と浮動小数点型をまとめて算術型と呼びます。標準テンプレート std::numeric_limits (18.3) の特殊化は、実装の各算術型の最大値と最小値を指定するものとします。
つまり、 はdouble
その表現に少なくとも と同じ量のメモリを必要float
とlong double
しdouble
ます。その余分なメモリは、数値をより正確に表現するために使用されます。
x86 システムでfloat
は、通常 4 バイトの長さで、最大で約 3×10³⁸、最小で約 1.4×10⁻⁴⁵ の数値を格納できます。これは、小数の約 7 桁の 10 進数を格納する IEEE 754単精度数です。
また、x86 システムでは、double
長さは 8 バイトで、IEEE 754倍精度形式で数値を格納できます。この形式は、はるかに広い範囲を持ち、より高い精度 (10 進数で約 15 桁) の数値を格納します。他の一部のプラットフォームでdouble
は、長さが 8 バイトでない場合があり、実際には単精度の と同じである場合がありますfloat
。
標準でlong double
は、少なくとも と同じくらい正確であることのみを要求するdouble
ため、一部のコンパイラは単純long double
に と同じであるかのように扱いdouble
ます。ただし、ほとんどの x86 チップでは、10 バイトの拡張精度形式の 80 ビット数が、CPU の浮動小数点ユニットを介して使用できます。これは、64 ビットよりもさらに高い精度を提供し、double
10 進数で約 21 桁の精度を備えています。
一部のコンパイラは、16 バイト (128 ビット) の IEEE 754 4 倍精度数値形式を代わりにサポートし、より正確な表現とより広い範囲をサポートします。
コンパイラによって異なりますが、次のコードで各型に必要なバイト数を確認できます。
int main() {
printf("%d\n", sizeof(double)); // some compilers print 8
printf("%d\n", sizeof(long double)); // some compilers print 16
return 0;
}
コンパイラによっては、データ型long <type>
がデータ型よりも大きな値を保持する場合があります。<type>