Boost logo

Boost :

Subject: Re: [boost] [Review Request] Multiprecision Arithmetic Library
From: Christopher Kormanyos (e_float_at_[hidden])
Date: 2012-04-16 16:03:54


> Here's what I think - firstly lets "Keep It Simple" - and if the digits > are present in the internal representation, then why *shouldn't* > they be used for comparisons and printing out? Nod. I looked at a few possibilities today. But, as usual, I had underestimated the difficulty. > Let me give you an example - if there are guard digits which aren't > used for comparisons - could you not get into a situation where two numbers> > which compare equal lead to different results after some sequence > of arithmetic operations?  IMO that would not be good, and at the > very least could lead to all kinds of confusions. > Consider what GMP's mpf_t does - there are hidden guard digits that you don't see, > which do take part in comparisons and all arithmetic operations, > on the other hand they don't provide a way to print those out > which makes round tripping impossible - which IMO is very annoying. > On the other hand, MPFR takes a much less loose approach, > and rounds everything to *exactly* the requested precision after each step, > round tripping is also possible in this case. > The equivalent in cpp_dec_float would be to have no guard digits at all, > and round after each operation to exactly Digits10 decimal places. > While there may be use cases for that, I think we want to Keep It Simple > for now and not go down that road. This is too costly in base-10. If I (we) ever write another back-end, base-2 might be a better way to go. > So.... the situation we have now seems to be path of least resistance. > It's somewhat inelegant having max_digits10 so much larger than digits10, > but it seems to me that nothing really bad can happen here - just maybe > that serialized numbers will occupy a touch more space on disk than expected? > Cheers, John. You are right again. And if I keep fiddling around with it, then I'm just wasting everyone's time. I designed the e_float back-end (the basis of cpp_dec_float) and tested it for years with its present strategy. I should just stop fiddling around and simply rely on the test suite and adherence to the back-end requirements. And we are getting very close to this, if not already there. I think we're done with the digits10, max_digits10 thing now. Thanks for your help. Best regards, Chris.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk