Skip to content

Latest commit

 

History

History
73 lines (54 loc) · 2.21 KB

max_digits10.md

File metadata and controls

73 lines (54 loc) · 2.21 KB

max_digits10

  • limits[meta header]
  • std[meta namespace]
  • numeric_limits[meta class]
  • variable[meta id-type]
  • cpp11[meta cpp]
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;
}
  • max_digits10[color ff0000]
  • std::stringstring[link /reference/sstream/basic_stringstream.md.nolink]
  • precision[link /reference/ios/ios_base/precision.md]
  • std::scientific[link /reference/ios/scientific.md]
  • s.str()[link /reference/sstream/basic_stringstream/str.md.nolink]

出力例

9
3.145900011e+000

バージョン

言語

  • C++11

処理系

参照