MPFR is missing a “mpfr_ui_div_ui”

Remco Bloemen

2009-11-24, last updated 2014-03-03

Strangely, MPFR is lacking a mpfr_ui_div_ui function, that is, a function that calculates the fraction of two small unsigned integers to very high accuracy. Until now I’ve been calculating it like this:

mpfr_set_ui(invprime, prime[i], GMP_RNDN);
mpfr_ui_div(invprime, 1, invprime, GMP_RNDN);

which is very slow! The reason is probably that the mpfr_ui_div is calculated using all bits in invprime, even though most of them are zero. A much faster method is to prepare a two-bit one constant like this:

mpfr_t one;
mpfr_init2(one, 2);
mpfr_set_ui(one, 1, GMP_RNDN);

and then do this:

mpfr_div_ui(invprime, one, primes[i], GMP_RNDN);