[EMAIL PROTECTED] a écrit : > I think there might be something wrong with the implementation of > modulus. > > Negative float values close to 0.0 break the identity "0 <= abs(a % b) > < abs(b)". > > print 0.0 % 2.0 # => 0.0 > print -1e-010 % 2.0 # =>1.9999999999 > > which is correct, but: > > print -1e-050 % 2.0 # => 2.0 > print -1e-050 % 2.0 < 2.0 # => False > > This means I can't use modulus to "wrap around" before it reaches a > certain value. I'm using Python 2.4.2 on WindowsXP. > > Thanks > Janto >
Consider that -1e-050 % 2.0 = 2.0 - 1e-050 Now, test that : >>> 2.0 - 1e-050 == 2.0 True Floating point numbers just don't have the required precision to represent 2.0 - 1e-050. For your specific problem, if you really want the result to be < 2.0, the the best you can do is admit that floating point operations have errors and return 0.0 when the modulus operation equals 2.0. -- http://mail.python.org/mailman/listinfo/python-list