Modul (%) in python not like in C?

Scott David Daniels Scott.Daniels at Acm.Org
Tue Sep 11 05:36:05 CEST 2007


Bryan Olson wrote:
> Dotan Cohen wrote:
...
>> Second, in Turbo C -111%10=-1 however in python -111%10=9. Is one or
>> the other in error? 
> 
> Turbo C is correct here with respect to the C standard. Python
> is correct with respect to the Python Reference Manual.
> 
> They also disagree about integer division. C rounds toward zero;
> Python rounds downward.
> 
> In C:       -111 / 10  evaluates to -11
> In Python:  -111 / 10  evaluates to -12

C, which was designed as a "high level assembly language," does not
tightly define the results of / and % for negative numbers.  Instead
it defines the result for positive over positive, and constrains the
result for the others.  The reason is simple: most CPUs available
at the time provided a single operation that produced both the quotient
and the remainder, but some produced -1 for -3 / 2, and others produced
1 for -3 / 2.  Either result is justifiable, but the most common use
of division and remainder is positive / positive, and it would be a
shame to generate a test for every division and modulus just to cover
the negative / positive case.  You would be slowing down the majority
of code to satisfy the (usually non-existant) corner case.

-Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list