$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [Review Request] Multiprecision Arithmetic Library
From: Christopher Kormanyos (e_float_at_[hidden])
Date: 2012-04-06 06:57:23
>> But let's face it, my O(N^2) is very slowwww for digits.
>> In your opinion, should I take a crack at this if I find a spare afternoon?
> Maybe. My understanding is that FFT doesn't become viable until the digit count grows truely huge? Would the Karatsuba algorithm be viable sooner and help more users?
> My gut feeling is that the current implementation is perfectly fine up to a few hundred (and maybe a thousand?) decimal places, which will probably take care of most use cases.... well my use cases anyway!
In my previous unpublished work (mp_cpp, also using base-10^8), I tuned to the following:
static const INT32 mp_elem_karatsuba_min = static_cast< INT32>(40); // Approx. 280 digits.
static const INT32 mp_elem_fft_min = static_cast< INT32>(129); // Approx. 900 digits.
I've got a recursive Karatsuba template available in my catalog already.
Maybe we should try it out. The FFT mentioned above was FFTW
(a sadly non-BPL wonder of mankind) so a vanilla FFT would be,
maybe, 2 or 3 times slower.
> So maybe examples are a higher priority for now?
Yes, you are right. I just don't want to get into trouble with the community.
Everyone wants to compute a million digits of pi, and they might get mad
at us if boost can't do it.
But you're right below. We need to stop and get a work of high quality out
there to the world---maybe improving it later, like in the fall of 2012.
In fact, as I told you and Paul Bristow
(both of whom have helped so much in this project),
I'm actually booked solid through summer.
> We could also go through the current the code looking for
> optimisation oportunities - for example would the inversion code be more
> efficient using Halley rather than Newton iteration
> (see for example http://numbers.computation.free.fr/Constants/Algorithms/inverse.html)?
Interesting...
> Also multiplication and division by integer (relatively common operations?) as special cases.
Fortunately, we already have this. The routines mul_unsigned_long_long()
and div_unsigned_long_long() utilize O(N) linear mul/div by integer.
And we support them in your interface functions eval_multiply()
and eval_divide().
>> Of course, in the future we need to cooperate with FFT specialists
>> who could get the speed of big-num types (with BPL licensing)
>> up to state.of-the-art. But maybe we can get just a bit more
>> functionality now before review and potential first distrubition.
> For sure, there's always much more that can be done, it's just a case of knowing when to stop! ;-)
> Cheers, John.
You are right. We need to stop real soon and review what we've got.
If I can contribute anything like Karatsuba or FFT relatively quickly,
yet adequately reliable, I'll let you know.
Best regards, Chris