Question
The python 2.6 docs state that x % y
is defined as the remainder of x / y (http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex). I am not clear on what is really occurring though, as:
for i in range(2, 11):
print 1.0 % i
prints "1.0" ten times, rather than "0.5, 0.333333, 0.25" etc. as I expected (1/2 = 0.5, etc).
Solution
I think you can get the result you want by doing something like this:
for i in range(2, 11):
print 1.0*(1 % i) / i
This computes the (integer) remainder as explained by others. Then you divide by the denominator again, to produce the fractional part of the quotient.
Note that I multiply the result of the modulo operation by 1.0 to ensure that a floating point division operation is done (rather than integer division, which will result in 0).
OTHER TIPS
Modulo is performed in the integer context, not fractional (remainders are integers). Therefore:
1 % 1 = 0 (1 times 1 plus 0)
1 % 2 = 1 (2 times 0 plus 1)
1 % 3 = 1 (3 times 0 plus 1)
6 % 3 = 0 (3 times 2 plus 0)
7 % 3 = 1 (3 times 2 plus 1)
8 % 3 = 2 (3 times 2 plus 2)
etc
How do I get the actual remainder of x / y?
By that I presume you mean doing a regular floating point division?
for i in range(2, 11):
print 1.0 / i
Wouldn't dividing 1 by an number larger than it result in 0 with remainder 1?
The number theorists in the crowd may correct me, but I think modulus/remainder is defined only on integers.
We can have 2 types of division, that we can define through the return types:
Float: a/b. For example: 3/2=1.5
def division(a,b):
return a/b
Int: a//b and a%b. For example: 3//2=1 and 3%2=1
def quotient(a,b):
return a//b
def remainder(a,b):
return a%b