- 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_digits10は digits を用いて次のように計算できる:
(Is radix power of 10) ? digits * log10(radix) : ceil(1 + digits * log10(radix))
対応するマクロを次の表に挙げる。
| 型 | 対応するマクロ |
|---|---|
float |
FLT_DECIMAL_DIG |
double |
DBL_DECIMAL_DIG |
long double |
LDBL_DECIMAL_DIG |
なお、is_specialized == falseもしくは浮動小数点数型以外の場合、max_digits10は0となる。
#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
- Clang, C++11 mode: 3.0
- GCC, C++11 mode: 4.5.4
- ICC: ?
- Visual C++: 2010, 2012, 2013, 2015, 2017