How python calculate this modulo?

python如何以数学方式计算这个模数?

>>>-1%10  
9

The Wikipedia article on the modulo operation provides the following constraint for a % q :

a = nq + r

Substituting a = -1 , q = 10 and r = 9 , we see that n must be equal -1.

Plugging in -1 for n:

-1 % 10  # Python evaluates this as 9
-1 = n * 10 + r
-1 = -1 * 10 + r
9 = r

Testing with another example (again plugging in -1 for n):

-7 % 17  # Python evaluates this as 10
-7 = n * 17 + r
-7 = -17 + r
10 = r

A third example with a positive numerator and negative denominator:

7 % -17  # Python evaluates this as -10
7 = n * (-17) + r
7 = -1 * (-17) + r
7 = 17 + r
-10 = r

It appears that when a and q have different signs, we start with n = -1 and decrement n by 1 until we've found the n closest to zero such that n*q < a . We can test this by trying this out with an a and q such that |a| > |q| :

-100 % 11  # Python evaluates as 10
-100 = n * 11 + r
 ...   -1  # -11 > -100
 ...   -2  # -22 > -100
 ...   -3  ...
 ...   -4  ...
 ...   -5  ...
 ...   -6  ...
 ...   -7  ...
 ...   -8  ...
 ...   -9  # -99 > -100
 -100 = -10 * 11 + r  # -110 < -100
 -100 = -110 + r
 10 = r

So while this might not be the algorithm Python actually uses to calculate the modulo, we at least have a useful mental model for reasoning about how a given result was arrived at.


Its is caluclated like this :-
-10 / 10 = -1 ,
hence remainder 9 .
-10 is greatest multiple of 10 which is less than -1 .

It is similar to 9 % 5 , will be greatest number less than dividend should be considers.

5/5 = 1 , hence 4 .


I'm not sure if you're asking the algorithm that python uses, or why the answer comes out this way.

If the latter, imagine that for modulo n you subtract or add n until you get a number between 0 and n-1 inclusive

链接地址: http://www.djcxy.com/p/58296.html

上一篇: 可理解的模数计算

下一篇: python如何计算这个模数?