New or modified function

Torbjorn Granlund tg at gmplib.org
Thu Nov 19 14:08:37 CET 2009


I am prettu sure (a/g)*(b/g) is the right approach, always, if one could
take advantage of g's invariance over two divisions.  Unfortunately,
interfaces for taking advantage of divisor invariance are unavailable in
GMP.

Using internal interfaces:

If g is just a word, on would use invert_limb, then mpn_preinv_divrem_1
(which indidentally is obsolete, and will soon be replaced).

Or, if a/g and b/g are known to be integers, use binvert_limb and
mpn_bdiv_q_1_pi1 (preliminary name, likely to change...).

If g is more than one word, shift it left so that its most significant
bit becomes 1, shift a and b the same number of bit positions (possibly
introducing a new high word), then call mpn_sbpi1_div_q.

Or, again if a/g and b/g are known to be integers, use the bdiv
function.

This is tricky, and *unsupported*.  Division in mpn is in flux, but will
in a future release be documented and somewhat orthogonal.

-- 
Torbjörn


More information about the gmp-discuss mailing list