1. ホーム
  2. c++

[解決済み] CとC++のlong doubleとdoubleの違い [重複]について

2022-03-03 06:09:22

質問

<ブロッククオート

重複の可能性があります。
long double vs double

私はプログラミング初心者なのですが、CとC++のlong doubleとdoubleの違いがわかりません。ググってみたのですが、理解できず混乱してしまいました。どなたか助けていただけませんか?

どのように解決するのですか?

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 は、その表現に、少なくとも floatlong double と同じぐらい double . この余分なメモリは、より正確な数値の表現に使われるのです。

x86システムの場合。 float は通常4バイトの長さで、約3×10³⁸から約1.4×10-⁴⁵までの数値を格納することが可能です。これは、IEEE754 単精度数 で、小数点以下7桁程度の小数を格納する。

x86システムにも搭載。 double は8バイト長で、IEEE754の数値を格納することができます。 倍精度のフォーマット これは、より大きな範囲を持ち、小数点以下15桁程度の精度で数値を格納するものである。他のいくつかのプラットフォームでは double は8バイト長でない場合があり、実際には単精度の float .

規格では、以下の事項のみが要求されています。 long double と同等以上の精度が必要です。 double そのため、いくつかのコンパイラは単に long double と同じであるかのようです。 double . しかし、ほとんどの x86 チップでは、10 バイトの 拡張精度形式 80ビットの数値は、CPUの浮動小数点演算ユニットで利用でき、64ビットよりもさらに精度の高い double であり、小数点以下約21桁の精度を持つ。

一部のコンパイラは、代わりに16バイト(128ビット)のIEEE754をサポートしています。 4倍精度の数値形式 より正確な表現とより大きな範囲を持つ。