12

次のスニペットは、0.29848 を期待していたときに 0.29847 を出力します。

double f = 0.298475;
cout << setprecision(5) << f << endl;

ただし、他の例では、丸めを観察します。

double f = 0.123459;
cout << setprecision(5) << f << endl;

出力: 0.12346

double f = 0.123454;
cout << setprecision(5) << f << endl;

出力: 0.12345

4

2 に答える 2

18

数値0.298475は a で正確に表すことはできませんdouble(分母が 2 の累乗である 11939/40000 である分数ではないため)、格納される実際の数値は、実際には 0.29848 よりも 0.29847 に近くなります。

于 2012-06-06T21:24:01.483 に答える
1

ドキュメントからわかる限り、setprecision()は丸めを実行せず、小数点以下に表示される最大桁数を設定するだけです。double数とfloat数の可能な表現は、使用する定数初期化子とは異なる場合があります。

于 2012-06-06T21:28:28.117 に答える