From 66bb6e661cb4d29078dd28735fce225c0aeaed80 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Sat, 24 Jul 2004 23:00:24 +0000 Subject: [PATCH] SF bug 996392: math and cmath docs don't specify radians Major rewrite of the math module docs. Slapped in "radians" where appropriate; grouped the functions into reasonable categories; supplied many more words to address common confusions about some of the subtler issues. --- Doc/lib/libmath.tex | 199 ++++++++++++++++++++++++++------------------ Misc/NEWS | 3 +- 2 files changed, 119 insertions(+), 83 deletions(-) diff --git a/Doc/lib/libmath.tex b/Doc/lib/libmath.tex index a9cbc77d83c..3590467ca6c 100644 --- a/Doc/lib/libmath.tex +++ b/Doc/lib/libmath.tex @@ -18,42 +18,13 @@ number used as a parameter, so that the programmer can determine how and why it was generated in the first place. The following functions are provided by this module. Except -when explicitly noted otherwise, all return values are floats: +when explicitly noted otherwise, all return values are floats. -\begin{funcdesc}{acos}{x} -Return the arc cosine of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{asin}{x} -Return the arc sine of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{atan}{x} -Return the arc tangent of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{atan2}{y, x} -Return \code{atan(\var{y} / \var{x})}. -\end{funcdesc} +Number-theoretic and representation functions: \begin{funcdesc}{ceil}{x} -Return the ceiling of \var{x} as a float. -\end{funcdesc} - -\begin{funcdesc}{cos}{x} -Return the cosine of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{cosh}{x} -Return the hyperbolic cosine of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{degrees}{x} -Converts angle \var{x} from radians to degrees. -\end{funcdesc} - -\begin{funcdesc}{exp}{x} -Return \code{e**\var{x}}. +Return the ceiling of \var{x} as a float, the smallest integer value +greater than or equal to \var{x}. \end{funcdesc} \begin{funcdesc}{fabs}{x} @@ -61,73 +32,45 @@ Return the absolute value of \var{x}. \end{funcdesc} \begin{funcdesc}{floor}{x} -Return the floor of \var{x} as a float. +Return the floor of \var{x} as a float, the largest integer value +less than or equal to \var{x}. \end{funcdesc} \begin{funcdesc}{fmod}{x, 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. +the same result. The intent of the C standard is that +\code{fmod(\var{x}, \var{y})} be exactly (mathematically; to infinite +precision) equal to \code{\var{x} - \var{n}*\var{y}} for some integer +\var{n} such that the result has the same sign as \var{x} and +magnitude less than \code{abs(\var{y})}. Python's +\code{\var{x} \%\ \var{y}} returns a result with the sign of +\var{y} instead, and may not be exactly computable for float arguments. +For example, \code{fmod(-1e-100, 1e100)} is \code{-1e-100}, but the +result of Python's \code{-1e-100 \%\ 1e100} is \code{1e100-1e-100}, which +cannot be represented exactly as a float, and rounds to the surprising +\code{1e100}. For this reason, function \function{fmod()} is generally +preferred when working with floats, while Python's +\code{\var{x} \%\ \var{y}} is preferred when working with integers. \end{funcdesc} \begin{funcdesc}{frexp}{x} -% Blessed by Tim. Return the mantissa and exponent of \var{x} as the pair \code{(\var{m}, \var{e})}. \var{m} is a float and \var{e} is an -integer such that \code{\var{x} == \var{m} * 2**\var{e}}. +integer such that \code{\var{x} == \var{m} * 2**\var{e}} exactly. If \var{x} is zero, returns \code{(0.0, 0)}, otherwise -\code{0.5 <= abs(\var{m}) < 1}. -\end{funcdesc} - -\begin{funcdesc}{hypot}{x, y} -Return the Euclidean distance, \code{sqrt(\var{x}*\var{x} + \var{y}*\var{y})}. +\code{0.5 <= abs(\var{m}) < 1}. This is used to "pick apart" the +internal representation of a float in a portable way. \end{funcdesc} \begin{funcdesc}{ldexp}{x, i} -Return \code{\var{x} * (2**\var{i})}. -\end{funcdesc} - -\begin{funcdesc}{log}{x\optional{, base}} -Returns the logarithm of \var{x} to the given \var{base}. -If the \var{base} is not specified, returns the natural logarithm of \var{x}. -\versionchanged[\var{base} argument added]{2.3} -\end{funcdesc} - -\begin{funcdesc}{log10}{x} -Return the base-10 logarithm of \var{x}. +Return \code{\var{x} * (2**\var{i})}. This is essentially the inverse of +function \function{frexp()}. \end{funcdesc} \begin{funcdesc}{modf}{x} Return the fractional and integer parts of \var{x}. Both results -carry the sign of \var{x}. The integer part is returned as a float. -\end{funcdesc} - -\begin{funcdesc}{pow}{x, y} -Return \code{\var{x}**\var{y}}. -\end{funcdesc} - -\begin{funcdesc}{radians}{x} -Converts angle \var{x} from degrees to radians. -\end{funcdesc} - -\begin{funcdesc}{sin}{x} -Return the sine of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{sinh}{x} -Return the hyperbolic sine of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{sqrt}{x} -Return the square root of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{tan}{x} -Return the tangent of \var{x}. -\end{funcdesc} - -\begin{funcdesc}{tanh}{x} -Return the hyperbolic tangent of \var{x}. +carry the sign of \var{x}, and both are floats. \end{funcdesc} Note that \function{frexp()} and \function{modf()} have a different @@ -136,6 +79,98 @@ argument and return a pair of values, rather than returning their second return value through an `output parameter' (there is no such thing in Python). +Power and logarithmic functions: + +\begin{funcdesc}{exp}{x} +Return \code{e**\var{x}}. +\end{funcdesc} + +\begin{funcdesc}{log}{x\optional{, base}} +Return the logarithm of \var{x} to the given \var{base}. +If the \var{base} is not specified, return the natural logarithm of \var{x} +(that is, the logarithm to base \emph{e}). +\versionchanged[\var{base} argument added]{2.3} +\end{funcdesc} + +\begin{funcdesc}{log10}{x} +Return the base-10 logarithm of \var{x}. +\end{funcdesc} + +\begin{funcdesc}{pow}{x, y} +Return \code{\var{x}**\var{y}}. +\end{funcdesc} + +\begin{funcdesc}{sqrt}{x} +Return the square root of \var{x}. +\end{funcdesc} + +Trigonometric functions: + +\begin{funcdesc}{acos}{x} +Return the arc cosine of \var{x}, in radians. +\end{funcdesc} + +\begin{funcdesc}{asin}{x} +Return the arc sine of \var{x}, in radians. +\end{funcdesc} + +\begin{funcdesc}{atan}{x} +Return the arc tangent of \var{x}, in radians. +\end{funcdesc} + +\begin{funcdesc}{atan2}{y, x} +Return \code{atan(\var{y} / \var{x})}, in radians. +The result is between \code{-pi} and \code{pi}. +The vector in the plane from the origin to point \code{(\var{x}, \var{y})} +makes this angle with the positive X axis. +The point of \function{atan2()} is that the signs of both inputs are +known to it, so it can compute the correct quadrant for the angle. +For example, \code{atan(1}) and \code{atan2(1, 1)} are both \code{pi/4}, +but \code{atan2(-1, -1)} is \code{-3*pi/4}. +\end{funcdesc} + +\begin{funcdesc}{cos}{x} +Return the cosine of \var{x} radians. +\end{funcdesc} + +\begin{funcdesc}{hypot}{x, y} +Return the Euclidean norm, \code{sqrt(\var{x}*\var{x} + \var{y}*\var{y})}. +This is the length of the vector from the origin to point +\code{(\var{x}, \var{y})}. +\end{funcdesc} + +\begin{funcdesc}{sin}{x} +Return the sine of \var{x} radians. +\end{funcdesc} + +\begin{funcdesc}{tan}{x} +Return the tangent of \var{x} radians. +\end{funcdesc} + +Angular conversion: + +\begin{funcdesc}{degrees}{x} +Converts angle \var{x} from radians to degrees. +\end{funcdesc} + +\begin{funcdesc}{radians}{x} +Converts angle \var{x} from degrees to radians. +\end{funcdesc} + +Hyerbolic functions: + +\begin{funcdesc}{cosh}{x} +Return the hyperbolic cosine of \var{x}. +\end{funcdesc} + +\begin{funcdesc}{sinh}{x} +Return the hyperbolic sine of \var{x}. +\end{funcdesc} + +\begin{funcdesc}{tanh}{x} +Return the hyperbolic tangent of \var{x}. +\end{funcdesc} + The module also defines two mathematical constants: \begin{datadesc}{pi} diff --git a/Misc/NEWS b/Misc/NEWS index 55f5a146127..4b5fae1d1b0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -139,7 +139,7 @@ C API Documentation ------------- -Improved the tutorial on creating types in C. +- Improved the tutorial on creating types in C. - point out the importance of reassigning data members before assigning thier values @@ -148,6 +148,7 @@ Improved the tutorial on creating types in C. - mention the labor saving Py_VISIT and Py_CLEAR macros. +- Major rewrite of the math module docs, to address common confusions. New platforms -------------