mpn_divexact_1 comments

Niels Möller nisse at
Wed Oct 16 14:22:46 CEST 2013

Mark Sofroniou <marks at> writes:

> If the quotient will be one word shorter than the dividend then set
> the top word to zero:
>   if ((divisor & 1) == 0)
>     {
>       if ((dst != src) && (src[size - 1] < divisor)) dst[size - 1] = 0;
> ...

I don't understand. Doesn't the current loop always write all quotient
limbs, including dst[size-1]? And why the condition (dst != src) ???

> If the divisor is a power of two then skip the division code and
> just shift or copy:

Low-level gmp functions, like this one, usually don't do that type of
optimizations. The caller can do that check, if powers of two are likely
enough that it matters. And I magine constant d is an important usecase.

Furthermore, this function is implemented in assembly on several
platforms, and adding a power-of-two check and a call to mpn_rshift to
all implementations of mpn_divexact_1 would get a bit messy.


Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.

More information about the gmp-devel mailing list