[Tutor] Unexpected result of division by negative integer, was: (no subject)

Alan Gauld alan.gauld at btinternet.com
Sat Jun 2 13:40:09 CEST 2012


On 02/06/12 09:52, Peter Otten wrote:

>> I just started programming so all this is new to me. I don't really
>> understand the explanation. I'm a novice at programming.

OK, Here is an attempt to explain the explanation!

Original question:
Why does -17 / 10  => -2 instead of -1

Python FAQ response:
 > It’s primarily driven by the desire that i % j have the same
 > sign as j.

The % operator returns the "remainder" in integer division.
It turns out that in programming we can often use the
remainder to perform programming "tricks", especially when
dealing with cyclic data - such as the days of the week.

For example if you want to find out which day of the
week it is 53 days  from now it is 53 % 7 plus whatever
todays number is... Now for those tricks to work we want
to have the % operator work as described in the FAQ above


 > If you want that, and also want:
 >
 > i == (i // j) * j + (i % j)
 >
 > then integer division has to return the floor.

This is just saying that the integer division(//) result times the 
original divisor plus the remainder should equal the starting number.
Thus:

17/10 => 1,7
So (17 // 10) => 1 and (17 % 10) => 7
So 1 x 10 + 7 => 17.

And to achieve those two aims(remainder with the same sign as the 
divisor and the sum returning the original value) we must define integer 
division to return the "floor" of the division result.

The floor of a real number is the integer value *lower* than its real 
value. Thus:

floor(5.5) -> 5
floor(-5.5) -> -6

17/10 -> 1.7
floor(1.7) -> 1
-17/10 -> -1.7
floor(-1.7) -> -2

So X // Y == floor(X / Y)

HTH.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/



More information about the Tutor mailing list