Modul (%) in python not like in C?

stef mientki stef.mientki at gmail.com
Sun Sep 9 17:06:19 EDT 2007


J. Cliff Dyer wrote:
> Dotan Cohen wrote:
>   
>> FIrst of all, how is the % symbol (as in 70%6=4) called in English?
>>
>> Second, in Turbo C -111%10=-1 however in python -111%10=9. Is one or
>> the other in error? Is this a known gotcha? I tried to google the
>> subject however one cannot google the symbol %. Thanks in advance.
>>
>> Dotan Cohen
>>   
>>     
>
> The % operator is called "modulo" in English.  I don't think the 
> difference in implementation is an error.  It's just a difference of 
> calculation method. 
>
> Python will always yield a number x = m%n such that 0 <= x < n, but 
> Turbo C will always yield a number such that if x = m%n -x = -m%n.  That 
> is, since 111 % 10 = 1, -111 % 10 = -1.  The two values will always 
> differ by n (as used above). 
>
> I'm sure there are mathematicians on the list who can give you a more 
> technical, precise explanation of the reasons for the different results.
>
>   
It's a long time ago, but if I remember well,
"modulo" was introduced as an operator in Galois fields theory,
and Galois fields only exists of the whole numbers 0 .. N-1.
So the Python implementation seems the only correct one.
Most languages handle it wrong
(I didn't know until now Python was so correct ;-)
so you always have to add N (sometimes even more than once)  manually 
(to get valid results)
 x = (N + (some kind of formula that can have a negative result) ) % N

cheers,
Stef






More information about the Python-list mailing list