blob: d59296a2dbd4f587ed4e08e1e93fa999b2eb95dc [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`math` --- Mathematical functions
3======================================
4
5.. module:: math
6 :synopsis: Mathematical functions (sin() etc.).
7
8
9This module is always available. It provides access to the mathematical
10functions defined by the C standard.
11
12These functions cannot be used with complex numbers; use the functions of the
13same name from the :mod:`cmath` module if you require support for complex
14numbers. The distinction between functions which support complex numbers and
15those which don't is made since most users do not want to learn quite as much
16mathematics as required to understand complex numbers. Receiving an exception
17instead of a complex result allows earlier detection of the unexpected complex
18number used as a parameter, so that the programmer can determine how and why it
19was generated in the first place.
20
21The following functions are provided by this module. Except when explicitly
22noted otherwise, all return values are floats.
23
Georg Brandl116aa622007-08-15 14:28:22 +000024
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +000025Number-theoretic and representation functions
26---------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000027
28.. function:: ceil(x)
29
Georg Brandl2a033732008-04-05 17:37:09 +000030 Return the ceiling of *x*, the smallest integer greater than or equal to *x*.
31 If *x* is not a float, delegates to ``x.__ceil__()``, which should return an
32 :class:`Integral` value.
Christian Heimes072c0f12008-01-03 23:01:04 +000033
34
35.. function:: copysign(x, y)
36
37 Return *x* with the sign of *y*. ``copysign`` copies the sign bit of an IEEE
38 754 float, ``copysign(1, -0.0)`` returns *-1.0*.
39
Georg Brandl116aa622007-08-15 14:28:22 +000040
41.. function:: fabs(x)
42
43 Return the absolute value of *x*.
44
Georg Brandlc28e1fa2008-06-10 19:20:26 +000045.. function:: factorial(x)
46
Benjamin Petersonfea6a942008-07-02 16:11:42 +000047 Return *x* factorial. Raises :exc:`ValueError` if *x* is not integral or
Georg Brandlc28e1fa2008-06-10 19:20:26 +000048 is negative.
Georg Brandl116aa622007-08-15 14:28:22 +000049
50.. function:: floor(x)
51
Georg Brandl2a033732008-04-05 17:37:09 +000052 Return the floor of *x*, the largest integer less than or equal to *x*.
53 If *x* is not a float, delegates to ``x.__floor__()``, which should return an
54 :class:`Integral` value.
Georg Brandl116aa622007-08-15 14:28:22 +000055
56
57.. function:: fmod(x, y)
58
59 Return ``fmod(x, y)``, as defined by the platform C library. Note that the
60 Python expression ``x % y`` may not return the same result. The intent of the C
61 standard is that ``fmod(x, y)`` be exactly (mathematically; to infinite
62 precision) equal to ``x - n*y`` for some integer *n* such that the result has
63 the same sign as *x* and magnitude less than ``abs(y)``. Python's ``x % y``
64 returns a result with the sign of *y* instead, and may not be exactly computable
65 for float arguments. For example, ``fmod(-1e-100, 1e100)`` is ``-1e-100``, but
66 the result of Python's ``-1e-100 % 1e100`` is ``1e100-1e-100``, which cannot be
67 represented exactly as a float, and rounds to the surprising ``1e100``. For
68 this reason, function :func:`fmod` is generally preferred when working with
69 floats, while Python's ``x % y`` is preferred when working with integers.
70
71
72.. function:: frexp(x)
73
74 Return the mantissa and exponent of *x* as the pair ``(m, e)``. *m* is a float
75 and *e* is an integer such that ``x == m * 2**e`` exactly. If *x* is zero,
76 returns ``(0.0, 0)``, otherwise ``0.5 <= abs(m) < 1``. This is used to "pick
77 apart" the internal representation of a float in a portable way.
78
79
Mark Dickinsonaa7633a2008-08-01 08:16:13 +000080.. function:: fsum(iterable)
81
82 Return an accurate floating point sum of values in the iterable. Avoids
Raymond Hettingerf3936f82009-02-19 05:48:05 +000083 loss of precision by tracking multiple intermediate partial sums::
Mark Dickinsonaa7633a2008-08-01 08:16:13 +000084
Raymond Hettingerf3936f82009-02-19 05:48:05 +000085 >>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
86 0.99999999999999989
87 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
88 1.0
Mark Dickinsonaa7633a2008-08-01 08:16:13 +000089
Raymond Hettingerf3936f82009-02-19 05:48:05 +000090 The algorithm's accuracy depends on IEEE-754 arithmetic guarantees and the
91 typical case where the rounding mode is half-even. On some non-Windows
92 builds, the underlying C library uses extended precision addition and may
93 occasionally double-round an intermediate sum causing it to be off in its
94 least significant bit.
Mark Dickinsonaa7633a2008-08-01 08:16:13 +000095
Raymond Hettinger477be822009-02-19 06:44:30 +000096 For further discussion and two alternative approaches, see the `ASPN cookbook
97 recipes for accurate floating point summation
98 <http://code.activestate.com/recipes/393090/>`_\.
99
Mark Dickinsonaa7633a2008-08-01 08:16:13 +0000100
Christian Heimes072c0f12008-01-03 23:01:04 +0000101.. function:: isinf(x)
102
103 Checks if the float *x* is positive or negative infinite.
104
Christian Heimes072c0f12008-01-03 23:01:04 +0000105
106.. function:: isnan(x)
107
108 Checks if the float *x* is a NaN (not a number). NaNs are part of the
Georg Brandl48310cd2009-01-03 21:18:54 +0000109 IEEE 754 standards. Operation like but not limited to ``inf * 0``,
Christian Heimes072c0f12008-01-03 23:01:04 +0000110 ``inf / inf`` or any operation involving a NaN, e.g. ``nan * 1``, return
111 a NaN.
112
Christian Heimes072c0f12008-01-03 23:01:04 +0000113
Georg Brandl116aa622007-08-15 14:28:22 +0000114.. function:: ldexp(x, i)
115
116 Return ``x * (2**i)``. This is essentially the inverse of function
117 :func:`frexp`.
118
119
120.. function:: modf(x)
121
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000122 Return the fractional and integer parts of *x*. Both results carry the sign
123 of *x* and are floats.
Georg Brandl116aa622007-08-15 14:28:22 +0000124
Christian Heimes400adb02008-02-01 08:12:03 +0000125
126.. function:: trunc(x)
127
128 Return the :class:`Real` value *x* truncated to an :class:`Integral` (usually
Mark Dickinsonbf5c6a92009-01-17 10:21:23 +0000129 an integer). Delegates to ``x.__trunc__()``.
Christian Heimes400adb02008-02-01 08:12:03 +0000130
Christian Heimes400adb02008-02-01 08:12:03 +0000131
Georg Brandl116aa622007-08-15 14:28:22 +0000132Note that :func:`frexp` and :func:`modf` have a different call/return pattern
133than their C equivalents: they take a single argument and return a pair of
134values, rather than returning their second return value through an 'output
135parameter' (there is no such thing in Python).
136
137For the :func:`ceil`, :func:`floor`, and :func:`modf` functions, note that *all*
138floating-point numbers of sufficiently large magnitude are exact integers.
139Python floats typically carry no more than 53 bits of precision (the same as the
140platform C double type), in which case any float *x* with ``abs(x) >= 2**52``
141necessarily has no fractional bits.
142
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000143
144Power and logarithmic functions
145-------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Georg Brandl116aa622007-08-15 14:28:22 +0000147.. function:: exp(x)
148
149 Return ``e**x``.
150
151
152.. function:: log(x[, base])
153
154 Return the logarithm of *x* to the given *base*. If the *base* is not specified,
155 return the natural logarithm of *x* (that is, the logarithm to base *e*).
156
Georg Brandl116aa622007-08-15 14:28:22 +0000157
Christian Heimes53876d92008-04-19 00:31:39 +0000158.. function:: log1p(x)
159
160 Return the natural logarithm of *1+x* (base *e*). The
161 result is calculated in a way which is accurate for *x* near zero.
162
Christian Heimes53876d92008-04-19 00:31:39 +0000163
Georg Brandl116aa622007-08-15 14:28:22 +0000164.. function:: log10(x)
165
166 Return the base-10 logarithm of *x*.
167
168
169.. function:: pow(x, y)
170
Christian Heimesa342c012008-04-20 21:01:16 +0000171 Return ``x`` raised to the power ``y``. Exceptional cases follow
172 Annex 'F' of the C99 standard as far as possible. In particular,
173 ``pow(1.0, x)`` and ``pow(x, 0.0)`` always return ``1.0``, even
174 when ``x`` is a zero or a NaN. If both ``x`` and ``y`` are finite,
175 ``x`` is negative, and ``y`` is not an integer then ``pow(x, y)``
176 is undefined, and raises :exc:`ValueError`.
Christian Heimes53876d92008-04-19 00:31:39 +0000177
Georg Brandl116aa622007-08-15 14:28:22 +0000178
179.. function:: sqrt(x)
180
181 Return the square root of *x*.
182
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000183Trigonometric functions
184-----------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000185
186
187.. function:: acos(x)
188
189 Return the arc cosine of *x*, in radians.
190
191
192.. function:: asin(x)
193
194 Return the arc sine of *x*, in radians.
195
196
197.. function:: atan(x)
198
199 Return the arc tangent of *x*, in radians.
200
201
202.. function:: atan2(y, x)
203
204 Return ``atan(y / x)``, in radians. The result is between ``-pi`` and ``pi``.
205 The vector in the plane from the origin to point ``(x, y)`` makes this angle
206 with the positive X axis. The point of :func:`atan2` is that the signs of both
207 inputs are known to it, so it can compute the correct quadrant for the angle.
208 For example, ``atan(1``) and ``atan2(1, 1)`` are both ``pi/4``, but ``atan2(-1,
209 -1)`` is ``-3*pi/4``.
210
211
212.. function:: cos(x)
213
214 Return the cosine of *x* radians.
215
216
217.. function:: hypot(x, y)
218
219 Return the Euclidean norm, ``sqrt(x*x + y*y)``. This is the length of the vector
220 from the origin to point ``(x, y)``.
221
222
223.. function:: sin(x)
224
225 Return the sine of *x* radians.
226
227
228.. function:: tan(x)
229
230 Return the tangent of *x* radians.
231
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000232Angular conversion
233------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000234
235
236.. function:: degrees(x)
237
238 Converts angle *x* from radians to degrees.
239
240
241.. function:: radians(x)
242
243 Converts angle *x* from degrees to radians.
244
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000245Hyperbolic functions
246--------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000247
248
Christian Heimesa342c012008-04-20 21:01:16 +0000249.. function:: acosh(x)
250
251 Return the inverse hyperbolic cosine of *x*.
252
Christian Heimesa342c012008-04-20 21:01:16 +0000253
254.. function:: asinh(x)
255
256 Return the inverse hyperbolic sine of *x*.
257
Christian Heimesa342c012008-04-20 21:01:16 +0000258
259.. function:: atanh(x)
260
261 Return the inverse hyperbolic tangent of *x*.
262
Christian Heimesa342c012008-04-20 21:01:16 +0000263
Georg Brandl116aa622007-08-15 14:28:22 +0000264.. function:: cosh(x)
265
266 Return the hyperbolic cosine of *x*.
267
268
269.. function:: sinh(x)
270
271 Return the hyperbolic sine of *x*.
272
273
274.. function:: tanh(x)
275
276 Return the hyperbolic tangent of *x*.
277
Christian Heimes53876d92008-04-19 00:31:39 +0000278
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000279Constants
280=========
Georg Brandl116aa622007-08-15 14:28:22 +0000281
282.. data:: pi
283
284 The mathematical constant *pi*.
285
286
287.. data:: e
288
289 The mathematical constant *e*.
290
Christian Heimes53876d92008-04-19 00:31:39 +0000291
Georg Brandl116aa622007-08-15 14:28:22 +0000292.. note::
293
294 The :mod:`math` module consists mostly of thin wrappers around the platform C
295 math library functions. Behavior in exceptional cases is loosely specified
296 by the C standards, and Python inherits much of its math-function
297 error-reporting behavior from the platform C implementation. As a result,
298 the specific exceptions raised in error cases (and even whether some
299 arguments are considered to be exceptional at all) are not defined in any
300 useful cross-platform or cross-release way. For example, whether
301 ``math.log(0)`` returns ``-Inf`` or raises :exc:`ValueError` or
302 :exc:`OverflowError` isn't defined, and in cases where ``math.log(0)`` raises
303 :exc:`OverflowError`, ``math.log(0L)`` may raise :exc:`ValueError` instead.
304
Christian Heimesa342c012008-04-20 21:01:16 +0000305 All functions return a quiet *NaN* if at least one of the args is *NaN*.
Benjamin Peterson3e4f0552008-09-02 00:31:15 +0000306 Signaling *NaN*\s raise an exception. The exception type still depends on the
Christian Heimes53876d92008-04-19 00:31:39 +0000307 platform and libm implementation. It's usually :exc:`ValueError` for *EDOM*
308 and :exc:`OverflowError` for errno *ERANGE*.
309
Georg Brandl116aa622007-08-15 14:28:22 +0000310
311.. seealso::
312
313 Module :mod:`cmath`
314 Complex number versions of many of these functions.