[pypy-svn] r14287 - pypy/dist/pypy/objspace/std
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Jul 5 15:30:27 CEST 2005
Author: cfbolz
Date: Tue Jul 5 15:30:25 2005
New Revision: 14287
Modified:
pypy/dist/pypy/objspace/std/longobject.py
Log:
found one error (and changed a docstring). doesn't fix the failing test,
though.
Modified: pypy/dist/pypy/objspace/std/longobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/longobject.py (original)
+++ pypy/dist/pypy/objspace/std/longobject.py Tue Jul 5 15:30:25 2005
@@ -846,7 +846,7 @@
# so a = b*z + r.
if a.sign != b.sign:
z.sign = - z.sign
- if z.sign < 0 and rem.sign != 0:
+ if a.sign < 0 and rem.sign != 0:
rem.sign = - rem.sign
return z, rem
@@ -966,15 +966,15 @@
"""
The / and % operators are now defined in terms of divmod().
The expression a mod b has the value a - b*floor(a/b).
- The long_divrem function gives the remainder after division of
+ The _divrem function gives the remainder after division of
|a| by |b|, with the sign of a. This is also expressed
as a - b*trunc(a/b), if trunc truncates towards zero.
Some examples:
- a b a rem b a mod b
- 13 10 3 3
- -13 10 -3 7
- 13 -10 3 -7
- -13 -10 -3 -3
+ a b a rem b a mod b
+ 13 10 3 3
+ -13 10 -3 7
+ 13 -10 3 -7
+ -13 -10 -3 -3
So, to get from rem to mod, we have to add b if a and b
have different signs. We then subtract one from the 'div'
part of the outcome to keep the invariant intact.
More information about the Pypy-commit
mailing list