Modulo Bug?

Steven Schveighoffer schveiguy at yahoo.com
Fri Sep 7 06:10:13 PDT 2012


On Sat, 11 Aug 2012 09:48:15 -0400, David <d at dav1d.de> wrote:

> -1 % 16 = -1
>
> Shouldn't that be 15? It seems like the sign is ignored for the modulo.
>
> Is this a bug or intended behaviour? The Python implementation returns  
> here, as expected, 15.

In case you are still looking for an expression which mods always positive  
(even for non-powers of 2)

(a % b + b) % b

Obviously, b must be positive.

The direct translation of this to assembly isn't the most efficient way.

Technically, in assembly we could check for the sign bit, and only add b  
again (without doing the second mod) if the value was negative.  But I'm  
not sure you can write an expression that causes that, maybe:

a % b < 0 ? a % b + b : a % b

Certainly not as appealing.  To get a direct translation from the above  
assembly, it would be something like:

typeof(a) x;

auto expr = (x = a % b) < 0 ? x + b : x

-Steve


More information about the Digitalmars-d mailing list