| \section{\module{math} --- | 
 |          Mathematical functions} | 
 |  | 
 | \declaremodule{builtin}{math} | 
 | \modulesynopsis{Mathematical functions (\function{sin()} etc.).} | 
 |  | 
 | This module is always available.  It provides access to the | 
 | mathematical functions defined by the C standard. | 
 |  | 
 | These functions cannot be used with complex numbers; use the functions | 
 | of the same name from the \refmodule{cmath} module if you require | 
 | support for complex numbers.  The distinction between functions which | 
 | support complex numbers and those which don't is made since most users | 
 | do not want to learn quite as much mathematics as required to | 
 | understand complex numbers.  Receiving an exception instead of a | 
 | complex result allows earlier detection of the unexpected complex | 
 | 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. | 
 |  | 
 | Number-theoretic and representation functions: | 
 |  | 
 | \begin{funcdesc}{ceil}{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} | 
 | Return the absolute value of \var{x}. | 
 | \end{funcdesc} | 
 |  | 
 | \begin{funcdesc}{floor}{x} | 
 | 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 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} | 
 | 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}} exactly. | 
 | If \var{x} is zero, returns \code{(0.0, 0)}, otherwise | 
 | \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})}.  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}, and both are floats. | 
 | \end{funcdesc} | 
 |  | 
 | Note that \function{frexp()} and \function{modf()} have a different | 
 | call/return pattern than their C equivalents: they take a single | 
 | 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). | 
 |  | 
 | For the \function{ceil()}, \function{floor()}, and \function{modf()} | 
 | functions, note that \emph{all} floating-point numbers of sufficiently | 
 | large magnitude are exact integers.  Python floats typically carry no more | 
 | than 53 bits of precision (the same as the platform C double type), in | 
 | which case any float \var{x} with \code{abs(\var{x}) >= 2**52} | 
 | necessarily has no fractional bits. | 
 |  | 
 |  | 
 | 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} | 
 |  | 
 | Hyperbolic 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} | 
 | The mathematical constant \emph{pi}. | 
 | \end{datadesc} | 
 |  | 
 | \begin{datadesc}{e} | 
 | The mathematical constant \emph{e}. | 
 | \end{datadesc} | 
 |  | 
 | \begin{notice} | 
 |   The \module{math} module consists mostly of thin wrappers around | 
 |   the platform C math library functions.  Behavior in exceptional cases is | 
 |   loosely specified by the C standards, and Python inherits much of its | 
 |   math-function error-reporting behavior from the platform C | 
 |   implementation.  As a result, | 
 |   the specific exceptions raised in error cases (and even whether some | 
 |   arguments are considered to be exceptional at all) are not defined in any | 
 |   useful cross-platform or cross-release way.  For example, whether | 
 |   \code{math.log(0)} returns \code{-Inf} or raises \exception{ValueError} or | 
 |   \exception{OverflowError} isn't defined, and in | 
 |   cases where \code{math.log(0)} raises \exception{OverflowError}, | 
 |   \code{math.log(0L)} may raise \exception{ValueError} instead. | 
 | \end{notice} | 
 |  | 
 | \begin{seealso} | 
 |   \seemodule{cmath}{Complex number versions of many of these functions.} | 
 | \end{seealso} |