最終更新日時:
が更新

履歴 編集

variable
<limits>

std::numeric_limits::max_digits10(C++11)

static constexpr int max_digits10;

概要

max_digits10は、Tが浮動小数点数型のとき意味を持つ。

基数radixの浮動小数点数を、仮数部がn桁で基数10の浮動小数点数に変換してまた元の基数radixの浮動小数点数に変換することを考える。
max_digits10は、上の変換によって元の浮動小数点数の値が変化しないようなnのうち、最小のものを表す。
したがって、浮動小数点数を文字列などに変換する場合に、正確な値を保持するために使用できる。

max_digits10digits を用いて次のように計算できる:

(Is radix power of 10) ? digits * log10(radix) : ceil(1 + digits * log10(radix))

C99のDECIMAL_DIGは、サポートされている浮動小数点数型のmax_digits10の最大のものに相当する。
なお、is_specialized == falseもしくは浮動小数点数型以外の場合、max_digits100となる。

#include <iostream>
#include <limits>
#include <sstream>

int main()
{
  constexpr int d = std::numeric_limits<float>::max_digits10;
  std::cout << d << std::endl;

  float f = 3.145900F;

  std::stringstream s;
  s.precision(d);
  s << std::scientific << f;

  std::cout << s.str() << std::endl;
}

出力例

9
3.145900011e+000

バージョン

言語

  • C++11

処理系

参照