math
--- 數學函式¶
此模組提供對 C 標準中定義的數學相關函式的存取。
這些函式不支援複數;若你需要計算複數,請使用cmath
模組的同名函式。這是因為大多數的使用者並不想學習那麼多理解複數所需的數學概念,所以根據支援複數與否分為兩種函式。收到一個例外而非複數回傳值,有助於程式設計師提早察覺參數中包含非預期的複數,進而從源頭查出導致此情況的原因。
此模組提供下列函式。除非特意註明,否則回傳值皆為浮點數。
數論函式 | |
從n 個物品中不重複且不考慮排序地取出k 個物品的方法數。 | |
n factorial | |
Greatest common divisor of the integer arguments | |
Integer square root of a nonnegative integern | |
Least common multiple of the integer arguments | |
從n 個物品中不重複但考慮排序地取出k 個物品的方法數。 | |
Floating point arithmetic | |
Ceiling ofx, the smallest integer greater than or equal tox | |
x 的絕對值。 | |
Floor ofx, the largest integer less than or equal tox | |
Fused multiply-add operation: | |
Remainder of division | |
Fractional and integer parts ofx | |
Remainder ofx with respect toy | |
Integer part ofx | |
浮點數操作函式 | |
Magnitude (absolute value) ofx with the sign ofy | |
Mantissa and exponent ofx | |
Check if the valuesa andb are close to each other | |
Check ifx is neither an infinity nor a NaN | |
Check ifx is a positive or negative infinity | |
Check ifx is a NaN (not a number) | |
| |
Floating-point valuesteps steps afterx towardsy | |
Value of the least significant bit ofx | |
Power, exponential and logarithmic functions | |
Cube root ofx | |
e raised to the powerx | |
2 raised to the powerx | |
e raised to the powerx, minus 1 | |
Logarithm ofx to the given base (e by default) | |
Natural logarithm of1+x (basee) | |
Base-2 logarithm ofx | |
Base-10 logarithm ofx | |
x raised to the powery | |
x 的平方根 | |
Summation and product functions | |
Euclidean distance between two pointsp andq given as an iterable of coordinates | |
Sum of values in the inputiterable | |
Euclidean norm of an iterable of coordinates | |
Product of elements in the inputiterable with astart value | |
Sum of products from two iterablesp andq | |
Angular conversion | |
Convert anglex from radians to degrees | |
Convert anglex from degrees to radians | |
Trigonometric functions | |
Arc cosine ofx | |
Arc sine ofx | |
Arc tangent ofx | |
| |
Cosine ofx | |
Sine ofx | |
Tangent ofx | |
Hyperbolic functions | |
Inverse hyperbolic cosine ofx | |
Inverse hyperbolic sine ofx | |
Inverse hyperbolic tangent ofx | |
Hyperbolic cosine ofx | |
Hyperbolic sine ofx | |
Hyperbolic tangent ofx | |
Special functions | |
Error function atx | |
Gamma function atx | |
Natural logarithm of the absolute value of theGamma function atx | |
常數 | |
π = 3.141592... | |
e = 2.718281... | |
τ = 2π = 6.283185... | |
正無限大 | |
"Not a number" (NaN) |
數論函式¶
- math.comb(n,k)¶
回傳從n 個物品中不重複且不考慮排序地取出k 個物品的方法數。
當
k<=n
時其值為n!/(k!*(n-k)!)
,否則其值為0
。因為此值等同於
(1+x)ⁿ
進行多項式展開後第 k 項的係數,所以又稱為二項式係數。當任一參數非整數型別時會引發
TypeError
。當任一參數為負數時會引發ValueError
。在 3.8 版被加入.
- math.factorial(n)¶
Return factorial of the nonnegative integern.
在 3.10 版的變更:其值為整數的浮點數(如:
5.0
)已不再被接受。
- math.gcd(*integers)¶
回傳指定整數引數的最大公因數。若存在任一非零引數,回傳值為所有引數共有因數中最大的正整數。若所有引數皆為零,則回傳值為
0
。gcd()
若未傳入任何引數也將回傳0
。在 3.5 版被加入.
在 3.9 版的變更:新增支援任意數量的引數。先前僅支援兩個引數。
- math.isqrt(n)¶
回傳非負整數n 的整數平方根。此值為n 精確平方根經下取整的值,亦等同於滿足a² ≤ n 的最大整數值a。
於有些應用程式中,取得滿足n ≤ a² 的最小整數值a ── 或者說n 精確平方根經上取整的值 ── 會更加方便。對正數n,此值可使用
a=1+isqrt(n-1)
計算。在 3.8 版被加入.
- math.lcm(*integers)¶
回傳指定整數引數的最小公倍數。若所有引數值皆非零,回傳值為所有引數共有倍數中最小的正整數。若存在任一引數值為零,則回傳值為
0
。lcm()
若未傳入任何引數將回傳1
。在 3.9 版被加入.
- math.perm(n,k=None)¶
Return the number of ways to choosek items fromn itemswithout repetition and with order.
Evaluates to
n!/(n-k)!
whenk<=n
and evaluatesto zero whenk>n
.Ifk is not specified or is
None
, thenk defaults tonand the function returnsn!
.當任一參數非整數型別時會引發
TypeError
。當任一參數為負數時會引發ValueError
。在 3.8 版被加入.
Floating point arithmetic¶
- math.ceil(x)¶
回傳x 經上取整的值,即大於或等於x 的最小整數。若x 並非浮點數,此函式將委派給
x.__ceil__
,並回傳Integral
型別的值。
- math.fabs(x)¶
回傳x 的絕對值。
- math.floor(x)¶
回傳x 經下取整的值,即小於或等於x 的最大整數。若x 並非浮點數,此函式將委派給
x.__floor__
,並回傳Integral
型別的值。
- math.fma(x,y,z)¶
Fused multiply-add operation. Return
(x*y)+z
, computed as though withinfinite precision and range followed by a single round to thefloat
format. This operation often provides better accuracy than the directexpression(x*y)+z
.This function follows the specification of the fusedMultiplyAdd operationdescribed in the IEEE 754 standard. The standard leaves one caseimplementation-defined, namely the result of
fma(0,inf,nan)
andfma(inf,0,nan)
. In these cases,math.fma
returns a NaN,and does not raise any exception.在 3.13 版被加入.
- math.fmod(x,y)¶
回傳
x/y
的浮點數餘數,其以平臺上的 C 函式庫fmod(x,y)
函式定義。請注意此函式與 Python 運算式x%y
可能不會回傳相同結果。C 標準要求fmod(x,y)
的回傳值完全等同(數學定義上,即無限精度)於x-n*y
,n 為可使回傳值與x 同號且長度小於abs(y)
的整數。Python 運算式x%y
的回傳值則與y 同號,且可能無法精確地計算浮點數引數。例如:fmod(-1e-100,1e100)
的值為-1e-100
,但 Python 運算式-1e-100%1e100
的結果為1e100-1e-100
,此值無法準確地表示成浮點數,並會四捨五入為出乎意料的1e100
。因此,處理浮點數時通常會選擇函式fmod()
,而處理整數時會選擇 Python 運算式x%y
。
- math.modf(x)¶
Return the fractional and integer parts ofx. Both results carry the signofx and are floats.
Note that
modf()
has a different call/return patternthan its C equivalents: it takes a single argument and return a pair ofvalues, rather than returning its second return value through an 'outputparameter' (there is no such thing in Python).
- math.remainder(x,y)¶
Return the IEEE 754-style remainder ofx with respect toy. Forfinitex and finite nonzeroy, this is the difference
x-n*y
,wheren
is the closest integer to the exact value of the quotientx/y
. Ifx/y
is exactly halfway between two consecutive integers, thenearesteven integer is used forn
. The remainderr=remainder(x,y)
thus always satisfiesabs(r)<=0.5*abs(y)
.Special cases follow IEEE 754: in particular,
remainder(x,math.inf)
isx for any finitex, andremainder(x,0)
andremainder(math.inf,x)
raiseValueError
for any non-NaNx.If the result of the remainder operation is zero, that zero will havethe same sign asx.On platforms using IEEE 754 binary floating point, the result of thisoperation is always exactly representable: no rounding error is introduced.
在 3.7 版被加入.
- math.trunc(x)¶
Returnx with the fractional partremoved, leaving the integer part. This rounds toward 0:
trunc()
isequivalent tofloor()
for positivex, and equivalent toceil()
for negativex. Ifx is not a float, delegates tox.__trunc__
, which should return anIntegral
value.
For theceil()
,floor()
, andmodf()
functions, note thatallfloating-point numbers of sufficiently large magnitude are exact integers.Python floats typically carry no more than 53 bits of precision (the same as theplatform C double type), in which case any floatx withabs(x)>=2**52
necessarily has no fractional bits.
Floating point manipulation functions¶
- math.copysign(x,y)¶
回傳與x 相同長度(絕對值)且與y 同號的浮點數。在支援帶符號零的平臺上,
copysign(1.0,-0.0)
回傳-1.0。
- math.frexp(x)¶
以
(m,e)
對的格式回傳x 的尾數m 及指數e。m 是浮點數而e 是整數,且兩者精確地使x==m*2**e
。若x 為零,回傳(0.0,0)
,否則令0.5<=abs(m)<1
。此函式用於以可攜的方式「分割」浮點數內部表示法。Note that
frexp()
has a different call/return patternthan its C equivalents: it takes a single argument and return a pair ofvalues, rather than returning its second return value through an 'outputparameter' (there is no such thing in Python).
- math.isclose(a,b,*,rel_tol=1e-09,abs_tol=0.0)¶
若a 及b 兩值足夠接近便回傳
True
,否則回傳False
。兩數是否足夠接近取決於給定的絕對及相對容許偏差 (tolerance)。如果沒有錯誤發生,結果將為:
abs(a-b)<=max(rel_tol*max(abs(a),abs(b)),abs_tol)
。rel_tol 為相對容許偏差 ──a 與b 兩數差的最大容許值,與a 及b 兩數的絕對值中較大者相關。例如欲設置 5% 的容許偏差,則傳入
rel_tol=0.05
。其預設值為1e-09
,該值可確保兩數於大約 9 個十進數位內相同。rel_tol 須不為負且小於1.0
。abs_tol is the absolute tolerance; it defaults to
0.0
and it must benonnegative. When comparingx
to0.0
,isclose(x,0)
is computedasabs(x)<=rel_tol *abs(x)
, which isFalse
for any nonzerox
andrel_tol less than1.0
. So add an appropriate positiveabs_tol argumentto the call.定義於 IEEE 754 浮點標準中的特殊值
NaN
、inf
和-inf
會根據該標準處理。更明確地說,NaN
不會與包含自身在內的任何數字足夠接近,而inf
及-inf
皆只與自身接近。在 3.5 版被加入.
也參考
PEP 485 ── 用於測試近似相等的函式
- math.isfinite(x)¶
若x 不是無限值或
NaN
便回傳True
,否則回傳False
。(注意0.0
被視為有限數。)在 3.2 版被加入.
- math.isinf(x)¶
若x 是正無限值或負無限值便回傳
True
,否則回傳False
。
- math.isnan(x)¶
若x 是
NaN
── 即非數字(NaN, not a number)── 便回傳True
,否則回傳False
。
- math.nextafter(x,y,steps=1)¶
Return the floating-point valuesteps steps afterx towardsy.
Ifx is equal toy, returny, unlesssteps is zero.
範例:
math.nextafter(x,math.inf)
goes up: towards positive infinity.math.nextafter(x,-math.inf)
goes down: towards minus infinity.math.nextafter(x,0.0)
goes towards zero.math.nextafter(x,math.copysign(math.inf,x))
goes away from zero.
另請參閱
math.ulp()
。在 3.9 版被加入.
在 3.12 版的變更:新增steps 引數。
- math.ulp(x)¶
Return the value of the least significant bit of the floatx:
Ifx is a NaN (not a number), returnx.
若x 為負值,回傳
ulp(-x)
。若x 為正無限值,回傳x。
Ifx is equal to zero, return the smallest positivedenormalized representable float (smaller than the minimum positivenormalized float,
sys.float_info.min
).Ifx is equal to the largest positive representable float,return the value of the least significant bit ofx, such that the firstfloat smaller thanx is
x-ulp(x)
.Otherwise (x is a positive finite number), return the value of the leastsignificant bit ofx, such that the first float bigger thanxis
x+ulp(x)
.
ULP stands for "Unit in the Last Place".
See also
math.nextafter()
andsys.float_info.epsilon
.在 3.9 版被加入.
Power, exponential and logarithmic functions¶
- math.cbrt(x)¶
Return the cube root ofx.
在 3.11 版被加入.
- math.exp(x)¶
Returne raised to the powerx, wheree = 2.718281... is the baseof natural logarithms. This is usually more accurate than
math.e**x
orpow(math.e,x)
.
- math.exp2(x)¶
Return2 raised to the powerx.
在 3.11 版被加入.
- math.expm1(x)¶
Returne raised to the powerx, minus 1. Heree is the base of naturallogarithms. For small floatsx, the subtraction in
exp(x)-1
can result in asignificant loss of precision; theexpm1()
function provides a way to compute this quantity to full precision:>>>frommathimportexp,expm1>>>exp(1e-5)-1# gives result accurate to 11 places1.0000050000069649e-05>>>expm1(1e-5)# result accurate to full precision1.0000050000166668e-05
在 3.2 版被加入.
- math.log(x[,base])¶
With one argument, return the natural logarithm ofx (to basee).
With two arguments, return the logarithm ofx to the givenbase,calculated as
log(x)/log(base)
.
- math.log1p(x)¶
Return the natural logarithm of1+x (basee). Theresult is calculated in a way which is accurate forx near zero.
- math.log2(x)¶
Return the base-2 logarithm ofx. This is usually more accurate than
log(x,2)
.在 3.3 版被加入.
也參考
int.bit_length()
returns the number of bits necessary to representan integer in binary, excluding the sign and leading zeros.
- math.log10(x)¶
Return the base-10 logarithm ofx. This is usually more accuratethan
log(x,10)
.
- math.pow(x,y)¶
Returnx raised to the powery. Exceptional cases followthe IEEE 754 standard as far as possible. In particular,
pow(1.0,x)
andpow(x,0.0)
always return1.0
, evenwhenx is a zero or a NaN. If bothx andy are finite,x is negative, andy is not an integer thenpow(x,y)
is undefined, and raisesValueError
.Unlike the built-in
**
operator,math.pow()
converts bothits arguments to typefloat
. Use**
or the built-inpow()
function for computing exact integer powers.在 3.11 版的變更:The special cases
pow(0.0,-inf)
andpow(-0.0,-inf)
werechanged to returninf
instead of raisingValueError
,for consistency with IEEE 754.
- math.sqrt(x)¶
Return the square root ofx.
Summation and product functions¶
- math.dist(p,q)¶
Return the Euclidean distance between two pointsp andq, eachgiven as a sequence (or iterable) of coordinates. The two pointsmust have the same dimension.
Roughly equivalent to:
sqrt(sum((px-qx)**2.0forpx,qxinzip(p,q)))
在 3.8 版被加入.
- math.fsum(iterable)¶
回傳可疊代物件(iterable)中所有值的精確浮點數和。透過追蹤過程中多個部分和(partial sum)以避免精確度損失。
此演算法準確性奠基於保證 IEEE-754 浮點標準及典型奇進偶捨(half-even)模式。於有些非 Windows 平台建置時,底層 C 函式庫使用延伸精度加法運算,而可能導致對過程中同一部分和重複捨入,並使其最低有效位不如預期。
更深入的討論及兩種替代做法請參閱ASPN cookbook recipes 精準的浮點數總和。
- math.hypot(*coordinates)¶
Return the Euclidean norm,
sqrt(sum(x**2forxincoordinates))
.This is the length of the vector from the origin to the pointgiven by the coordinates.For a two dimensional point
(x,y)
, this is equivalent to computingthe hypotenuse of a right triangle using the Pythagorean theorem,sqrt(x*x+y*y)
.在 3.8 版的變更:Added support for n-dimensional points. Formerly, only the twodimensional case was supported.
在 3.10 版的變更:Improved the algorithm's accuracy so that the maximum error isunder 1 ulp (unit in the last place). More typically, the resultis almost always correctly rounded to within 1/2 ulp.
- math.prod(iterable,*,start=1)¶
Calculate the product of all the elements in the inputiterable.The defaultstart value for the product is
1
.When the iterable is empty, return the start value. This function isintended specifically for use with numeric values and may rejectnon-numeric types.
在 3.8 版被加入.
- math.sumprod(p,q)¶
Return the sum of products of values from two iterablesp andq.
Raises
ValueError
if the inputs do not have the same length.Roughly equivalent to:
sum(itertools.starmap(operator.mul,zip(p,q,strict=True)))
For float and mixed int/float inputs, the intermediate productsand sums are computed with extended precision.
在 3.12 版被加入.
Angular conversion¶
- math.degrees(x)¶
Convert anglex from radians to degrees.
- math.radians(x)¶
Convert anglex from degrees to radians.
Trigonometric functions¶
- math.acos(x)¶
Return the arc cosine ofx, in radians. The result is between
0
andpi
.
- math.asin(x)¶
Return the arc sine ofx, in radians. The result is between
-pi/2
andpi/2
.
- math.atan(x)¶
Return the arc tangent ofx, in radians. The result is between
-pi/2
andpi/2
.
- math.atan2(y,x)¶
Return
atan(y/x)
, in radians. The result is between-pi
andpi
.The vector in the plane from the origin to point(x,y)
makes this anglewith the positive X axis. The point ofatan2()
is that the signs of bothinputs are known to it, so it can compute the correct quadrant for the angle.For example,atan(1)
andatan2(1,1)
are bothpi/4
, butatan2(-1,-1)
is-3*pi/4
.
- math.cos(x)¶
Return the cosine ofx radians.
- math.sin(x)¶
Return the sine ofx radians.
- math.tan(x)¶
Return the tangent ofx radians.
Hyperbolic functions¶
Hyperbolic functionsare analogs of trigonometric functions that are based on hyperbolasinstead of circles.
- math.acosh(x)¶
Return the inverse hyperbolic cosine ofx.
- math.asinh(x)¶
Return the inverse hyperbolic sine ofx.
- math.atanh(x)¶
Return the inverse hyperbolic tangent ofx.
- math.cosh(x)¶
Return the hyperbolic cosine ofx.
- math.sinh(x)¶
Return the hyperbolic sine ofx.
- math.tanh(x)¶
Return the hyperbolic tangent ofx.
特殊函式¶
- math.erf(x)¶
Return theerror function atx.
The
erf()
function can be used to compute traditional statisticalfunctions such as thecumulative standard normal distribution:defphi(x):'Cumulative distribution function for the standard normal distribution'return(1.0+erf(x/sqrt(2.0)))/2.0
在 3.2 版被加入.
- math.erfc(x)¶
Return the complementary error function atx. Thecomplementary errorfunction is defined as
1.0-erf(x)
. It is used for large values ofx where a subtractionfrom one would cause aloss of significance.在 3.2 版被加入.
- math.gamma(x)¶
Return theGamma function atx.
在 3.2 版被加入.
- math.lgamma(x)¶
Return the natural logarithm of the absolute value of the Gammafunction atx.
在 3.2 版被加入.
常數¶
- math.pi¶
The mathematical constantπ = 3.141592..., to available precision.
- math.e¶
The mathematical constante = 2.718281..., to available precision.
- math.tau¶
The mathematical constantτ = 6.283185..., to available precision.Tau is a circle constant equal to 2π, the ratio of a circle's circumference toits radius. To learn more about Tau, check out Vi Hart's videoPi is (still)Wrong, and start celebratingTau day by eating twice as much pie!
在 3.6 版被加入.
- math.inf¶
A floating-point positive infinity. (For negative infinity, use
-math.inf
.) Equivalent to the output offloat('inf')
.在 3.5 版被加入.
- math.nan¶
A floating-point "not a number" (NaN) value. Equivalent to the output of
float('nan')
. Due to the requirements of theIEEE-754 standard,math.nan
andfloat('nan')
arenot considered to equal to any other numeric value, including themselves. To checkwhether a number is a NaN, use theisnan()
function to testfor NaNs instead ofis
or==
.Example:>>>importmath>>>math.nan==math.nanFalse>>>float('nan')==float('nan')False>>>math.isnan(math.nan)True>>>math.isnan(float('nan'))True
在 3.5 版被加入.
在 3.11 版的變更:It is now always available.
CPython 實作細節: Themath
module consists mostly of thin wrappers around the platform Cmath library functions. Behavior in exceptional cases follows Annex F ofthe C99 standard where appropriate. The current implementation will raiseValueError
for invalid operations likesqrt(-1.0)
orlog(0.0)
(where C99 Annex F recommends signaling invalid operation or divide-by-zero),andOverflowError
for results that overflow (for example,exp(1000.0)
). A NaN will not be returned from any of the functionsabove unless one or more of the input arguments was a NaN; in that case,most functions will return a NaN, but (again following C99 Annex F) thereare some exceptions to this rule, for examplepow(float('nan'),0.0)
orhypot(float('nan'),float('inf'))
.
Note that Python makes no effort to distinguish signaling NaNs fromquiet NaNs, and behavior for signaling NaNs remains unspecified.Typical behavior is to treat all NaNs as though they were quiet.
也參考
cmath
模組Complex number versions of many of these functions.