2017-04-21 4 views
1

私のコンパイラは、sizeof(long double)のサイズが16バイトであることを教えています。つまり、2^128の数値を表すことができます。さて、精度で扱える桁数まで知りたい。たとえば、x= 0.1234567812345678の場合、long doubleは正確な精度をxと識別できますか?long doubleデータ型の精度を特定する方法

header float.hが異なる浮動小数点データ型の精度をdesribingいくつかのマクロが含まれているあなたに

+4

"[...]は2^128までの数字を表すことができることを意味します - あなたが知っている整数ではありません。すべてのビットは、整数部分を格納するために利用できません。 – unwind

+0

実際の浮動小数点数はたぶん80ビットです(x86の場合)。コンパイラはアライメントのために128ビットを予約します。 –

答えて

0

精度が処理できる桁数まで知りたいです。 <float.h>

LDBL_DIGは、long double区別にテキストから変換される有意な桁の最小数の数です。それは少なくとも10であり、あなたのプラットホームで18程度かもしれません。 0.1234567812345678および123.4567812345678は16桁の有効桁を持ちます。


私のコンパイラは、(long double型)はsizeofの大きさは、それが最大数を表すことができることを意味し、16バイトであることを私に言っている2^128

それはそのようなことを意味するかもしれません

long doubleが整数の場合、浮動小数点数はlogarithmicallyになります。さらに、一部のシステムではデータ用に16バイトすべてを使用するわけではありません。いくつかはパディングです。 @unwind@Sven Marnach。お使いのプラットフォームで使用されているlong doubleの特徴を示すには、<float.h>の値を使用してください。


x= 0.1234567812345678場合、long doublexの正確な精度を識別することができますか?

10進浮動小数点を使用する珍しいプラットフォームでない限り、いいえ。

ほとんどのプラットフォームでは、2進浮動小数点が使用されます。したがって、数値が2の累乗の正確な合計として表されない限り、42.125のように、long doubleとして保存された値は近くの近似値になります。コード0.1234567812345678に最も近いlong doubleに変換します。正確な値は0.1234567812345677972896140772718354128301143646240234375です。

+0

ありがとうございました。明確で正確な答え:) – Medo

5

ありがとうございました。例えばLDBL_MANT_DIGは、long doubleの仮数の2進数の数を返します。

浮動小数点数の形式がわからない場合は、What Every Computer Scientist Should Know About Floating-Point Arithmeticとお読みください。

+1

ニースの簡潔な答え:詳細な 'LDBL_MANT_DIG'は基数の桁数で、通常は2進数です。 – chux

関連する問題