diff options
-rw-r--r-- | Doc/lib/libmath.tex | 4 | ||||
-rw-r--r-- | Modules/mathmodule.c | 3 | ||||
-rw-r--r-- | Objects/floatobject.c | 2 |
3 files changed, 6 insertions, 3 deletions
diff --git a/Doc/lib/libmath.tex b/Doc/lib/libmath.tex index 598431b..6edf502 100644 --- a/Doc/lib/libmath.tex +++ b/Doc/lib/libmath.tex @@ -60,7 +60,9 @@ Return the floor of \var{x} as a real. \end{funcdesc} \begin{funcdesc}{fmod}{x, y} -Return \code{\var{x} \%\ \var{y}}. +Return \code{fmod(\var{x}, \var{y})}, as defined by the platform C library. +Note that the Python expression \code{\var{x} \%\ \var{y}} may not return +the same result. \end{funcdesc} \begin{funcdesc}{frexp}{x} diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index fcd88ad..c313f35 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -106,7 +106,8 @@ FUNC1(fabs, fabs, FUNC1(floor, floor, "floor(x)\n\nReturn the floor of x as a real.") FUNC2(fmod, fmod, - "fmod(x,y)\n\nReturn x % y.") + "fmod(x,y)\n\nReturn fmod(x, y), according to platform C." + " x % y may differ.") FUNC2(hypot, hypot, "hypot(x,y)\n\nReturn the Euclidean distance, sqrt(x*x + y*y).") FUNC1(log, log, diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 946e3d9..774996f 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -399,7 +399,7 @@ float_divmod(PyFloatObject *v, PyFloatObject *w) PyFPE_START_PROTECT("divmod", return 0) vx = v->ob_fval; mod = fmod(vx, wx); - /* fmod is typically exact, so vx-mod is *mathemtically* an + /* fmod is typically exact, so vx-mod is *mathematically* an exact multiple of wx. But this is fp arithmetic, and fp vx - mod is an approximation; the result is that div may not be an exact integral value after the division, although |