2

%Lf を使用して印刷すると、大きな double 値が変更されます 次の組み合わせまでの値は、10 進数の前に 9 桁 / 10 進数の後に 6 桁の適切な結果をもたらします。

10 進数の前の桁数を 10 に増やすと、%Lf で出力された値にガベージ値が追加されます。たとえば、%Lf で出力される小数点以下 10 桁の値 入力: 34355372871.3487 出力: 34355372871.348701 上記の出力からわかるように、入力値が変更されています。

値が変更されないように使用できる g++/xlc++ のコンパイル時オプションはありますか?

::コードスニペット::

double d2 =  34355372871.3487; 
double d4 =  3435537287.3487; 

printf("d2 = %lf\n", d2); 
printf("d4 = %lf\n", d4); 

ありがとう、ハドソン

4

3 に答える 3

1

doubleの精度です。double は 64 ビット (8 バイト) で格納されます。

( http://en.wikipedia.org/wiki/Double-precision_floating-point_format )

仮数に 52 ビット、信号に 1 ビット、指数に 11 ビットを使用します。

次に、52 ビットの仮数により、15 ~ 17 桁の有効桁数の精度が得られます。

于 2013-08-07T11:57:56.597 に答える
0

浮動小数点数の精度が限られているため、すべての (または実際には少数の) 10 進浮動小数点リテラルが既存の 2 進数表現に正確に対応しているわけではありません。

すべてのリテラルは、最も近い既存の値にマップされます。これはすべての浮動小数点型で発生しますが、精度の高い型ではより明確な数値が存在するため、あまり目立ちません。

于 2013-08-07T12:16:39.597 に答える