From: Fred Drake Date: Thu, 6 May 1999 14:46:35 +0000 (+0000) Subject: Reflect recent patch for float % and divmod() by Tim Peters. Content X-Git-Tag: v1.6a1~1372 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1ea7c7568769e156164ed4c860e3778f844fe502;p=thirdparty%2FPython%2Fcpython.git Reflect recent patch for float % and divmod() by Tim Peters. Content updates by Tim Peters, markup by FLD. --- diff --git a/Doc/lib/libfuncs.tex b/Doc/lib/libfuncs.tex index df384af41e91..d2167fb5b592 100644 --- a/Doc/lib/libfuncs.tex +++ b/Doc/lib/libfuncs.tex @@ -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}}} diff --git a/Doc/ref/ref5.tex b/Doc/ref/ref5.tex index 77496fe7ec28..72a2053d612d 100644 --- a/Doc/ref/ref5.tex +++ b/Doc/ref/ref5.tex @@ -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