Using mpq_t for aggregating currencies with wildly varying ranges
Zimmermann Paul
Paul.Zimmermann at inria.fr
Wed Apr 16 05:38:42 UTC 2014
Hi Donovan,
> Date: Tue, 15 Apr 2014 22:36:18 +0100
> From: Donovan Hide <donovanhide at gmail.com>
>
> Hi Paul,
>
> thanks very much for this clever tip! Almost too clever for the
> bit-twiddling part of my brain to deal with :-)
>
> Unfortunately it does look like gmp is simplifying the fractions in some
> cases, even though I'm not calling canonicalize() anywhere...
>
> Should I be looking at mpfr instead, or can I hack this some other way?
> Feels like there's a missing method on the rational type for this set of
> cases...
>
> Cheers,
> Donovan.
then you can de-canonicalize() the fraction as follows:
- with mpz_scan1, get the power of 2 in the denominator, say m
- with mpz_remove, get the power of 5 in the denominator, say n
- if m > n, multiply the *numerator* by 5^(m-n)
- otherwise multiply the *numerator* by 2^(n-m)
Then you can use the method I suggested with n = max(n,m).
You can use MPFR of course, but this is off-topic for this list.
Paul Zimmermann
PS: a mpz_remove_ui function would be most welcome...
More information about the gmp-discuss
mailing list