]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Reflect recent patch for float % and divmod() by Tim Peters. Content
authorFred Drake <fdrake@acm.org>
Thu, 6 May 1999 14:46:35 +0000 (14:46 +0000)
committerFred Drake <fdrake@acm.org>
Thu, 6 May 1999 14:46:35 +0000 (14:46 +0000)
updates by Tim Peters, markup by FLD.

Doc/lib/libfuncs.tex
Doc/ref/ref5.tex

index df384af41e918fe137e5ac4ede9aa515a656c04b..d2167fb5b5925da44fc644bd692b641ed0e936d4 100644 (file)
@@ -178,8 +178,12 @@ class instances are callable if they have a \method{__call__()} method.
   operand types, the rules for binary arithmetic operators apply.  For
   plain and long integers, the result is the same as
   \code{(\var{a} / \var{b}, \var{a} \%{} \var{b})}.
-  For floating point numbers the result is the same as
-  \code{(math.floor(\var{a} / \var{b}), \var{a} \%{} \var{b})}.
+  For floating point numbers the result is \code{(\var{q}, \var{a} \%{}
+  \var{b})}, where \var{q} is usually \code{math.floor(\var{a} /
+  \var{b})} but may be 1 less than that.  In any case \code{\var{q} *
+  \var{b} + \var{a} \%{} \var{b}} is very close to \var{a}, if
+  \code{\var{a} \%{} \var{b}} is non-zero it has the same sign as
+  \var{b}, and \code{0 <= abs(\var{a} \%{} \var{b}) < abs(\var{b})}.
 \end{funcdesc}
 
 \begin{funcdesc}{eval}{expression\optional{, globals\optional{, locals}}}
index 77496fe7ec287879d40e49b6ee88c8afe500d3cd..72a2053d612d763980e4a4e1b25cea5963e9201c 100644 (file)
@@ -583,9 +583,16 @@ The integer division and modulo operators are connected by the
 following identity: \code{x == (x/y)*y + (x\%y)}.  Integer division and
 modulo are also connected with the built-in function \function{divmod()}:
 \code{divmod(x, y) == (x/y, x\%y)}.  These identities don't hold for
-floating point and complex numbers; there a similar identity holds where
-\code{x/y} is replaced by \code{floor(x/y)}) or
-\code{floor((x/y).real)}, respectively.
+floating point and complex numbers; there similar identities hold
+approximately where \code{x/y} is replaced by \code{floor(x/y)}) or
+\code{floor(x/y) - 1} (for floats),\footnote{
+    If x is very close to an exact integer multiple of y, it's
+    possible for \code{floor(x/y)} to be one larger than
+    \code{(x-x\%y)/y} due to rounding.  In such cases, Python returns
+    the latter result, in order to preserve that \code{divmod(x,y)[0]
+    * y + x \%{} y} be very close to \code{x}.
+} or \code{floor((x/y).real)} (for
+complex).
 
 The \code{+} (addition) operator yields the sum of its arguments.
 The arguments must either both be numbers or both sequences of the