Integer division and remainder
Paul Rubin
phr-n2001 at nightsong.com
Tue Aug 14 19:20:57 EDT 2001
I've just started reading/playing with Python and I notice that
integer division and remainder in python works differently than in
most languages. In python, division always returns the floor,
i.e. non-integer quotients are always rounded downwards, towards
negative infinity:
7 / 3 = 2
-7 / 3 = -3
This is kind of strange. Normally you expect (-a)/b to be the same as -(a/b).
That's what happens in most languages, where division rounds towards zero:
7 / 3 = 2
-7 / 3 = -2
I think the motivation was so that % would work as a "mod" function
instead of the more normal "remainder" function.
Python: -7 % 3 = 2
Most other languages: -7 % 3 = -1
The mod operation is useful for many things, but I think assigning it to %
in Python shows some confusion in Python. The result of % is an ordinary
integer, not an integer mod N.
I think it would have been better to leave / and % alone, and define
a new pair of operators (maybe /_ and %_) to implement what Python does.
That's similar to Common Lisp, which provides the trunc-mod and floor-mod
functions to implement remainder and modulus respectively. I don't
remember if CL has a floor-div function, but it might as well.
More information about the Python-list
mailing list