cout を使用して double 値を完全な精度で印刷するにはどうすればよいでしょうか? 質問する

cout を使用して double 値を完全な精度で印刷するにはどうすればよいでしょうか? 質問する

私の以前の質問予期しないときに丸められたdoubleusingを印刷していました。 using を完全な精度で印刷するにはどうすればよいでしょうか?coutcoutdouble

ベストアンサー1

C++20では、std::formatこれをする:

std::cout << std::format("{}", std::numbers::pi_v<double>);

出力(仮定)IEEE754 規格 double):

3.141592653589793

デフォルトの浮動小数点形式は、往復保証付きの最短の10進数表現です。この方法のsetprecisionI/Oマニピュレータと比較した利点は、不要な数字を出力せず、グローバル状態の影響を受けないことです(このブログ投稿詳細については)。

その間、{fmt} ライブラリは、std::formatに基づいています。{fmt} は、printこれをさらに簡単かつ効率的にする関数も提供しています (ゴッドボルト):

fmt::print("{}", M_PI);

質問では「完全な精度」が何を意味するのかは実際には定義されていません。通常は、10進数で往復するのに十分な精度として理解されますが、別の可能性はありますが、あり得ない解釈もあります。(有効な)小数点以下の最大桁数IEEE 754 倍精度の場合、後者は 767 桁になります。

免責事項: 私は {fmt} と C++20 の作者ですstd::format

おすすめ記事