0
私の理解では、numeric_limits :: max_digits10は、利用可能な小数点以下の桁数を指定します。しかし、私はこれよりも大きい値に()をてSetPrecisionた場合、それはまだ私にこの最大値を超えたゼロ以外の数字与える:C言語でdouble値の30桁を表示
assert(std::numeric_limits<double>::max_digits10 == 17);
std::cout << std::setprecision(30) << double(.1) << '\n';
をこれがアウト出力します
0.100000000000000005551115123126
は17を超えての数字ではないです正確であることを信頼されていますか?
ありがとうございました。
必要な読解:[各コンピュータ科学者が浮動小数点演算について知っておくべきこと](0120-17801/806-3568/ncg_goldberg.html) –
倍精度は1.7と定義されていますE +/- 308(15桁)いくつかの数字は308桁まで増やすことができます。しかし、@ ThomasMatthewsが最初に示唆したことを読んでください。 –
'double 'の精度は±10 ^( - 17)のように固定されていないため、数値の値によって異なります。値が大きいほど精度が悪く、数値が小さいほど良い。換言すれば、値の±誤差はその値に対して相対的に決定される。ご覧のとおり、数値xの誤差は約±0.00000000000000005 * x – Pavel