Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost] [review] Multiprecision review scheduled for June 8th - 17th, 2012
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2012-06-02 17:30:35


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



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net