Hi,
what should be the result of
template <int N>
void test1()
{
boost::io::ios_precision_saver ifs( std::cout );
using namespace boost::multiprecision;
mp_number<cpp_dec_float<N> >
a(mp_number<cpp_dec_float<N> >(1) / 3);
std::cout << "N= " << N
<< std::endl;
std::cout << "max_digits10= " <<
std::numeric_limits<mp_number<cpp_dec_float<N> >
>::max_digits10 << std::endl;
std::cout << "sizeof= " <<
sizeof(mp_number<cpp_dec_float<N> > ) <<
std::endl;
std::cout << " " << a
<< std::endl;
std::cout << "setprecision(N) " <<
std::setprecision(N) << a << std::endl;
std::cout << "setprecision(max_digits10)= " <<
std::setprecision(std::numeric_limits<mp_number<cpp_dec_float<N>
> >::max_digits10) << a << std::endl;
}
test1<50>();
test1<100>();
test1<1>();
I'm getting
N= 50
max_digits10= 80
sizeof= 64
0.333333
setprecision(N)
0.33333333333333333333333333333333333333333333333333
setprecision(max_digits10)=
0.33333333333333333333333333333333333333333333333333333333333333333333333333333333
N= 100
max_digits10= 128
sizeof= 88
0.333333
setprecision(N)
0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
setprecision(max_digits10)=
0.33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
N= 1
max_digits10= 40
sizeof= 48
0.333333
setprecision(N) 0.3
setprecision(max_digits10)=
0.3333333333333333333333333333333333333333
Why the max_digits10 are not respectively 50,100 and 1?
The single think in the documentation that could let think the
number of digits to be greater than the parameter is the *should*
word in the sentence
"The class takes a single template parameter - Digits10
- which is the number of decimal digits precision the type *should*
support."
Could the documentation be more precise?
Is there a way to request for exactly N decimal digits to minimize
the sizeof?
Best,
Vicente