2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
:mod:`math` --- Mathematical functions
|
|
|
|
======================================
|
|
|
|
|
|
|
|
.. module:: math
|
|
|
|
:synopsis: Mathematical functions (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 :mod:`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:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: ceil(x)
|
|
|
|
|
2008-04-05 14:37:09 -03:00
|
|
|
Return the ceiling of *x*, the smallest integer greater than or equal to *x*.
|
|
|
|
If *x* is not a float, delegates to ``x.__ceil__()``, which should return an
|
|
|
|
:class:`Integral` value.
|
Merged revisions 59666-59679 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r59666 | christian.heimes | 2008-01-02 19:28:32 +0100 (Wed, 02 Jan 2008) | 1 line
Made vs9to8 Unix compatible
........
r59669 | guido.van.rossum | 2008-01-02 20:00:46 +0100 (Wed, 02 Jan 2008) | 2 lines
Patch #1696. Don't attempt to close None in dry-run mode.
........
r59671 | jeffrey.yasskin | 2008-01-03 03:21:52 +0100 (Thu, 03 Jan 2008) | 6 lines
Backport PEP 3141 from the py3k branch to the trunk. This includes r50877 (just
the complex_pow part), r56649, r56652, r56715, r57296, r57302, r57359, r57361,
r57372, r57738, r57739, r58017, r58039, r58040, and r59390, and new
documentation. The only significant difference is that round(x) returns a float
to preserve backward-compatibility. See http://bugs.python.org/issue1689.
........
r59672 | christian.heimes | 2008-01-03 16:41:30 +0100 (Thu, 03 Jan 2008) | 1 line
Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj
........
r59675 | guido.van.rossum | 2008-01-03 20:12:44 +0100 (Thu, 03 Jan 2008) | 4 lines
Issue #1700, reported by Nguyen Quan Son, fix by Fredruk Lundh:
Regular Expression inline flags not handled correctly for some unicode
characters. (Forward port from 2.5.2.)
........
r59676 | christian.heimes | 2008-01-03 21:23:15 +0100 (Thu, 03 Jan 2008) | 1 line
Added math.isinf() and math.isnan()
........
r59677 | christian.heimes | 2008-01-03 22:14:48 +0100 (Thu, 03 Jan 2008) | 1 line
Some build bots don't compile mathmodule. There is an issue with the long definition of pi and euler
........
r59678 | christian.heimes | 2008-01-03 23:16:32 +0100 (Thu, 03 Jan 2008) | 2 lines
Modified PyImport_Import and PyImport_ImportModule to always use absolute imports by calling __import__ with an explicit level of 0
Added a new API function PyImport_ImportModuleNoBlock. It solves the problem with dead locks when mixing threads and imports
........
r59679 | christian.heimes | 2008-01-03 23:32:26 +0100 (Thu, 03 Jan 2008) | 1 line
Added copysign(x, y) function to the math module
........
2008-01-03 19:01:04 -04:00
|
|
|
|
|
|
|
|
|
|
|
.. function:: copysign(x, y)
|
|
|
|
|
|
|
|
Return *x* with the sign of *y*. ``copysign`` copies the sign bit of an IEEE
|
|
|
|
754 float, ``copysign(1, -0.0)`` returns *-1.0*.
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. function:: fabs(x)
|
|
|
|
|
|
|
|
Return the absolute value of *x*.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: floor(x)
|
|
|
|
|
2008-04-05 14:37:09 -03:00
|
|
|
Return the floor of *x*, the largest integer less than or equal to *x*.
|
|
|
|
If *x* is not a float, delegates to ``x.__floor__()``, which should return an
|
|
|
|
:class:`Integral` value.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. function:: fmod(x, y)
|
|
|
|
|
|
|
|
Return ``fmod(x, y)``, as defined by the platform C library. Note that the
|
|
|
|
Python expression ``x % y`` may not return the same result. The intent of the C
|
|
|
|
standard is that ``fmod(x, y)`` be exactly (mathematically; to infinite
|
|
|
|
precision) equal to ``x - n*y`` for some integer *n* such that the result has
|
|
|
|
the same sign as *x* and magnitude less than ``abs(y)``. Python's ``x % y``
|
|
|
|
returns a result with the sign of *y* instead, and may not be exactly computable
|
|
|
|
for float arguments. For example, ``fmod(-1e-100, 1e100)`` is ``-1e-100``, but
|
|
|
|
the result of Python's ``-1e-100 % 1e100`` is ``1e100-1e-100``, which cannot be
|
|
|
|
represented exactly as a float, and rounds to the surprising ``1e100``. For
|
|
|
|
this reason, function :func:`fmod` is generally preferred when working with
|
|
|
|
floats, while Python's ``x % y`` is preferred when working with integers.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: frexp(x)
|
|
|
|
|
|
|
|
Return the mantissa and exponent of *x* as the pair ``(m, e)``. *m* is a float
|
|
|
|
and *e* is an integer such that ``x == m * 2**e`` exactly. If *x* is zero,
|
|
|
|
returns ``(0.0, 0)``, otherwise ``0.5 <= abs(m) < 1``. This is used to "pick
|
|
|
|
apart" the internal representation of a float in a portable way.
|
|
|
|
|
|
|
|
|
Merged revisions 59666-59679 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r59666 | christian.heimes | 2008-01-02 19:28:32 +0100 (Wed, 02 Jan 2008) | 1 line
Made vs9to8 Unix compatible
........
r59669 | guido.van.rossum | 2008-01-02 20:00:46 +0100 (Wed, 02 Jan 2008) | 2 lines
Patch #1696. Don't attempt to close None in dry-run mode.
........
r59671 | jeffrey.yasskin | 2008-01-03 03:21:52 +0100 (Thu, 03 Jan 2008) | 6 lines
Backport PEP 3141 from the py3k branch to the trunk. This includes r50877 (just
the complex_pow part), r56649, r56652, r56715, r57296, r57302, r57359, r57361,
r57372, r57738, r57739, r58017, r58039, r58040, and r59390, and new
documentation. The only significant difference is that round(x) returns a float
to preserve backward-compatibility. See http://bugs.python.org/issue1689.
........
r59672 | christian.heimes | 2008-01-03 16:41:30 +0100 (Thu, 03 Jan 2008) | 1 line
Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj
........
r59675 | guido.van.rossum | 2008-01-03 20:12:44 +0100 (Thu, 03 Jan 2008) | 4 lines
Issue #1700, reported by Nguyen Quan Son, fix by Fredruk Lundh:
Regular Expression inline flags not handled correctly for some unicode
characters. (Forward port from 2.5.2.)
........
r59676 | christian.heimes | 2008-01-03 21:23:15 +0100 (Thu, 03 Jan 2008) | 1 line
Added math.isinf() and math.isnan()
........
r59677 | christian.heimes | 2008-01-03 22:14:48 +0100 (Thu, 03 Jan 2008) | 1 line
Some build bots don't compile mathmodule. There is an issue with the long definition of pi and euler
........
r59678 | christian.heimes | 2008-01-03 23:16:32 +0100 (Thu, 03 Jan 2008) | 2 lines
Modified PyImport_Import and PyImport_ImportModule to always use absolute imports by calling __import__ with an explicit level of 0
Added a new API function PyImport_ImportModuleNoBlock. It solves the problem with dead locks when mixing threads and imports
........
r59679 | christian.heimes | 2008-01-03 23:32:26 +0100 (Thu, 03 Jan 2008) | 1 line
Added copysign(x, y) function to the math module
........
2008-01-03 19:01:04 -04:00
|
|
|
.. function:: isinf(x)
|
|
|
|
|
|
|
|
Checks if the float *x* is positive or negative infinite.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: isnan(x)
|
|
|
|
|
|
|
|
Checks if the float *x* is a NaN (not a number). NaNs are part of the
|
|
|
|
IEEE 754 standards. Operation like but not limited to ``inf * 0``,
|
|
|
|
``inf / inf`` or any operation involving a NaN, e.g. ``nan * 1``, return
|
|
|
|
a NaN.
|
|
|
|
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
.. function:: ldexp(x, i)
|
|
|
|
|
|
|
|
Return ``x * (2**i)``. This is essentially the inverse of function
|
|
|
|
:func:`frexp`.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: modf(x)
|
|
|
|
|
|
|
|
Return the fractional and integer parts of *x*. Both results carry the sign of
|
|
|
|
*x*, and both are floats.
|
|
|
|
|
2008-02-01 04:12:03 -04:00
|
|
|
|
|
|
|
.. function:: trunc(x)
|
|
|
|
|
|
|
|
Return the :class:`Real` value *x* truncated to an :class:`Integral` (usually
|
|
|
|
a long integer). Delegates to ``x.__trunc__()``.
|
|
|
|
|
|
|
|
.. versionadded:: 2.6
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
Note that :func:`frexp` and :func:`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 :func:`ceil`, :func:`floor`, and :func:`modf` functions, note that *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 *x* with ``abs(x) >= 2**52``
|
|
|
|
necessarily has no fractional bits.
|
|
|
|
|
|
|
|
Power and logarithmic functions:
|
|
|
|
|
|
|
|
.. function:: exp(x)
|
|
|
|
|
|
|
|
Return ``e**x``.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: log(x[, base])
|
|
|
|
|
|
|
|
Return the logarithm of *x* to the given *base*. If the *base* is not specified,
|
|
|
|
return the natural logarithm of *x* (that is, the logarithm to base *e*).
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: log10(x)
|
|
|
|
|
|
|
|
Return the base-10 logarithm of *x*.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: pow(x, y)
|
|
|
|
|
|
|
|
Return ``x**y``.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: sqrt(x)
|
|
|
|
|
|
|
|
Return the square root of *x*.
|
|
|
|
|
|
|
|
Trigonometric functions:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: acos(x)
|
|
|
|
|
|
|
|
Return the arc cosine of *x*, in radians.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: asin(x)
|
|
|
|
|
|
|
|
Return the arc sine of *x*, in radians.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: atan(x)
|
|
|
|
|
|
|
|
Return the arc tangent of *x*, in radians.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: atan2(y, x)
|
|
|
|
|
|
|
|
Return ``atan(y / x)``, in radians. The result is between ``-pi`` and ``pi``.
|
|
|
|
The vector in the plane from the origin to point ``(x, y)`` makes this angle
|
|
|
|
with the positive X axis. The point of :func:`atan2` is that the signs of both
|
|
|
|
inputs are known to it, so it can compute the correct quadrant for the angle.
|
|
|
|
For example, ``atan(1``) and ``atan2(1, 1)`` are both ``pi/4``, but ``atan2(-1,
|
|
|
|
-1)`` is ``-3*pi/4``.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: cos(x)
|
|
|
|
|
|
|
|
Return the cosine of *x* radians.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: hypot(x, y)
|
|
|
|
|
|
|
|
Return the Euclidean norm, ``sqrt(x*x + y*y)``. This is the length of the vector
|
|
|
|
from the origin to point ``(x, y)``.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: sin(x)
|
|
|
|
|
|
|
|
Return the sine of *x* radians.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: tan(x)
|
|
|
|
|
|
|
|
Return the tangent of *x* radians.
|
|
|
|
|
|
|
|
Angular conversion:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: degrees(x)
|
|
|
|
|
|
|
|
Converts angle *x* from radians to degrees.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: radians(x)
|
|
|
|
|
|
|
|
Converts angle *x* from degrees to radians.
|
|
|
|
|
|
|
|
Hyperbolic functions:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: cosh(x)
|
|
|
|
|
|
|
|
Return the hyperbolic cosine of *x*.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: sinh(x)
|
|
|
|
|
|
|
|
Return the hyperbolic sine of *x*.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: tanh(x)
|
|
|
|
|
|
|
|
Return the hyperbolic tangent of *x*.
|
|
|
|
|
|
|
|
The module also defines two mathematical constants:
|
|
|
|
|
|
|
|
|
|
|
|
.. data:: pi
|
|
|
|
|
|
|
|
The mathematical constant *pi*.
|
|
|
|
|
|
|
|
|
|
|
|
.. data:: e
|
|
|
|
|
|
|
|
The mathematical constant *e*.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
The :mod:`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
|
|
|
|
``math.log(0)`` returns ``-Inf`` or raises :exc:`ValueError` or
|
|
|
|
:exc:`OverflowError` isn't defined, and in cases where ``math.log(0)`` raises
|
|
|
|
:exc:`OverflowError`, ``math.log(0L)`` may raise :exc:`ValueError` instead.
|
|
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
Module :mod:`cmath`
|
|
|
|
Complex number versions of many of these functions.
|
|
|
|
|