私のコンパイラは、sizeof(long double)
のサイズが16バイトであることを教えています。つまり、2^128
の数値を表すことができます。さて、精度で扱える桁数まで知りたい。たとえば、x= 0.1234567812345678
の場合、long double
は正確な精度をx
と識別できますか?long doubleデータ型の精度を特定する方法
はheader float.h
が異なる浮動小数点データ型の精度をdesribingいくつかのマクロが含まれているあなたに
私のコンパイラは、sizeof(long double)
のサイズが16バイトであることを教えています。つまり、2^128
の数値を表すことができます。さて、精度で扱える桁数まで知りたい。たとえば、x= 0.1234567812345678
の場合、long double
は正確な精度をx
と識別できますか?long doubleデータ型の精度を特定する方法
はheader float.h
が異なる浮動小数点データ型の精度をdesribingいくつかのマクロが含まれているあなたに
精度が処理できる桁数まで知りたいです。
<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 double
x
の正確な精度を識別することができますか?
10進浮動小数点を使用する珍しいプラットフォームでない限り、いいえ。
ほとんどのプラットフォームでは、2進浮動小数点が使用されます。したがって、数値が2の累乗の正確な合計として表されない限り、42.125のように、long double
として保存された値は近くの近似値になります。コード0.1234567812345678
をに最も近いlong double
に変換します。正確な値は0.1234567812345677972896140772718354128301143646240234375
です。
ありがとうございました。明確で正確な答え:) – Medo
ありがとうございました。例えばLDBL_MANT_DIG
は、long double
の仮数の2進数の数を返します。
浮動小数点数の形式がわからない場合は、What Every Computer Scientist Should Know About Floating-Point Arithmeticとお読みください。
ニースの簡潔な答え:詳細な 'LDBL_MANT_DIG'は基数の桁数で、通常は2進数です。 – chux
"[...]は2^128までの数字を表すことができることを意味します - あなたが知っている整数ではありません。すべてのビットは、整数部分を格納するために利用できません。 – unwind
実際の浮動小数点数はたぶん80ビットです(x86の場合)。コンパイラはアライメントのために128ビットを予約します。 –