math --- 數(shù)學(xué)函數(shù)?
該模塊提供了對(duì)C標(biāo)準(zhǔn)定義的數(shù)學(xué)函數(shù)的訪問(wèn)。
這些函數(shù)不適用于復(fù)數(shù);如果你需要計(jì)算復(fù)數(shù),請(qǐng)使用 cmath 模塊中的同名函數(shù)。將支持計(jì)算復(fù)數(shù)的函數(shù)區(qū)分開的目的,來(lái)自于大多數(shù)開發(fā)者并不愿意像數(shù)學(xué)家一樣需要學(xué)習(xí)復(fù)數(shù)的概念。得到一個(gè)異常而不是一個(gè)復(fù)數(shù)結(jié)果使得開發(fā)者能夠更早地監(jiān)測(cè)到傳遞給這些函數(shù)的參數(shù)中包含復(fù)數(shù),進(jìn)而調(diào)查其產(chǎn)生的原因。
該模塊提供了以下函數(shù)。除非另有明確說(shuō)明,否則所有返回值均為浮點(diǎn)數(shù)。
數(shù)論與表示函數(shù)?
-
math.ceil(x)? 返回 x 的上限,即大于或者等于 x 的最小整數(shù)。如果 x 不是一個(gè)浮點(diǎn)數(shù),則委托
x.__ceil__(), 返回一個(gè)Integral類的值。
-
math.copysign(x, y)? 返回一個(gè)基于 x 的絕對(duì)值和 y 的符號(hào)的浮點(diǎn)數(shù)。在支持帶符號(hào)零的平臺(tái)上,
copysign(1.0, -0.0)返回 -1.0.
-
math.fabs(x)? 返回 x 的絕對(duì)值。
-
math.factorial(x)? 以一個(gè)整數(shù)返回 x 的階乘。 如果 x 不是整數(shù)或?yàn)樨?fù)數(shù)時(shí)則將引發(fā)
ValueError。
-
math.floor(x)? 返回 x 的向下取整,小于或等于 x 的最大整數(shù)。如果 x 不是浮點(diǎn)數(shù),則委托
x.__floor__(),它應(yīng)返回Integral值。
-
math.fmod(x, y)? 返回
fmod(x, y),由平臺(tái)C庫(kù)定義。請(qǐng)注意,Python表達(dá)式x % y可能不會(huì)返回相同的結(jié)果。C標(biāo)準(zhǔn)的目的是fmod(x, y)完全(數(shù)學(xué)上;到無(wú)限精度)等于x - n*y對(duì)于某個(gè)整數(shù) n ,使得結(jié)果具有 與 x 相同的符號(hào)和小于abs(y)的幅度。Python的x % y返回帶有 y 符號(hào)的結(jié)果,并且可能不能完全計(jì)算浮點(diǎn)參數(shù)。 例如,fmod(-1e-100, 1e100)是-1e-100,但Python的-1e-100 % 1e100的結(jié)果是1e100-1e-100,它不能完全表示為浮點(diǎn)數(shù),并且取整為令人驚訝的1e100。 出于這個(gè)原因,函數(shù)fmod()在使用浮點(diǎn)數(shù)時(shí)通常是首選,而Python的x % y在使用整數(shù)時(shí)是首選。
-
math.frexp(x)? 以
(m, e)對(duì)的形式返回 x 的尾數(shù)和指數(shù)。 m 是一個(gè)浮點(diǎn)數(shù), e 是一個(gè)整數(shù),正好是x == m * 2**e。 如果 x 為零,則返回(0.0, 0),否則返回0.5 <= abs(m) < 1。這用于以可移植方式“分離”浮點(diǎn)數(shù)的內(nèi)部表示。
-
math.fsum(iterable)? 返回迭代中的精確浮點(diǎn)值。通過(guò)跟蹤多個(gè)中間部分和來(lái)避免精度損失:
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 0.9999999999999999 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 1.0
該算法的準(zhǔn)確性取決于IEEE-754算術(shù)保證和舍入模式為半偶的典型情況。在某些非Windows版本中,底層C庫(kù)使用擴(kuò)展精度添加,并且有時(shí)可能會(huì)使中間和加倍,導(dǎo)致它在最低有效位中關(guān)閉。
有關(guān)待進(jìn)一步討論和兩種替代方法,參見 ASPN cookbook recipes for accurate floating point summation。
-
math.gcd(a, b)? 返回整數(shù) a 和 b 的最大公約數(shù)。如果 a 或 b 之一非零,則
gcd(a, b)的值是能同時(shí)整除 a 和 b 的最大正整數(shù)。gcd(0, 0)返回0。3.5 新版功能.
-
math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)? 若 a 和 b 的值比較接近則返回
True,否則返回False。根據(jù)給定的絕對(duì)和相對(duì)容差確定兩個(gè)值是否被認(rèn)為是接近的。
rel_tol 是相對(duì)容差 —— 它是 a 和 b 之間允許的最大差值,相對(duì)于 a 或 b 的較大絕對(duì)值。例如,要設(shè)置5%的容差,請(qǐng)傳遞
rel_tol=0.05。默認(rèn)容差為1e-09,確保兩個(gè)值在大約9位十進(jìn)制數(shù)字內(nèi)相同。 rel_tol 必須大于零。abs_tol 是最小絕對(duì)容差 —— 對(duì)于接近零的比較很有用。 abs_tol 必須至少為零。
如果沒(méi)有錯(cuò)誤發(fā)生,結(jié)果將是:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)。IEEE 754特殊值
NaN,inf和-inf將根據(jù)IEEE規(guī)則處理。具體來(lái)說(shuō),NaN不被認(rèn)為接近任何其他值,包括NaN。inf和-inf只被認(rèn)為接近自己。3.5 新版功能.
參見
PEP 485 —— 用于測(cè)試近似相等的函數(shù)
-
math.isfinite(x)? 如果 x 既不是無(wú)窮大也不是NaN,則返回
True,否則返回False。 (注意0.0被認(rèn)為 是 有限的。)3.2 新版功能.
-
math.isinf(x)? 如果 x 是正或負(fù)無(wú)窮大,則返回
True,否則返回False。
-
math.isnan(x)? 如果 x 是 NaN(不是數(shù)字),則返回
True,否則返回False。
-
math.modf(x)? 返回 x 的小數(shù)和整數(shù)部分。兩個(gè)結(jié)果都帶有 x 的符號(hào)并且是浮點(diǎn)數(shù)。
-
math.remainder(x, y)? 返回 IEEE 754 風(fēng)格的 x 相對(duì)于 y 的余數(shù)。對(duì)于有限 x 和有限非零 y ,這是差異
x - n*y,其中n是與商x / y的精確值最接近的整數(shù)。如果x / y恰好位于兩個(gè)連續(xù)整數(shù)之間,則將最接近的 偶數(shù) 用作n。 余數(shù)r = remainder(x, y)因此總是滿足abs(r) <= 0.5 * abs(y)。特殊情況遵循IEEE 754:特別是
remainder(x, math.inf)對(duì)于任何有限 x 都是 x ,而remainder(x, 0)和remainder(math.inf, x)引發(fā)ValueError適用于任何非NaN的 x 。如果余數(shù)運(yùn)算的結(jié)果為零,則該零將具有與 x 相同的符號(hào)。在使用IEEE 754二進(jìn)制浮點(diǎn)的平臺(tái)上,此操作的結(jié)果始終可以完全表示:不會(huì)引入舍入錯(cuò)誤。
3.7 新版功能.
-
math.trunc(x)? 返回
Real值 x 截?cái)酁?Integral(通常是整數(shù))。 委托給x.__trunc__()。
注意 frexp() 和 modf() 具有與它們的C等價(jià)函數(shù)不同的調(diào)用/返回模式:它們采用單個(gè)參數(shù)并返回一對(duì)值,而不是通過(guò) '輸出形參' 返回它們的第二個(gè)返回參數(shù)(Python中沒(méi)有這樣的東西)。
對(duì)于 ceil() , floor() 和 modf() 函數(shù),請(qǐng)注意 所有 足夠大的浮點(diǎn)數(shù)都是精確整數(shù)。Python浮點(diǎn)數(shù)通常不超過(guò)53位的精度(與平臺(tái)C double類型相同),在這種情況下,任何浮點(diǎn) x 與 abs(x) >= 2**52 必然沒(méi)有小數(shù)位。
冪函數(shù)與對(duì)數(shù)函數(shù)?
-
math.exp(x)? 返回 e 次 x 冪,其中 e = 2.718281... 是自然對(duì)數(shù)的基數(shù)。這通常比
math.e ** x或pow(math.e, x)更精確。
-
math.expm1(x)? 返回 e 的 x 次冪,減1。這里 e 是自然對(duì)數(shù)的基數(shù)。對(duì)于小浮點(diǎn)數(shù) x ,
exp(x) - 1中的減法可能導(dǎo)致 significant loss of precision;expm1()函數(shù)提供了一種將此數(shù)量計(jì)算為全精度的方法:>>> from math import exp, expm1 >>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05 >>> expm1(1e-5) # result accurate to full precision 1.0000050000166668e-05
3.2 新版功能.
-
math.log(x[, base])? 使用一個(gè)參數(shù),返回 x 的自然對(duì)數(shù)(底為 e )。
使用兩個(gè)參數(shù),返回給定的 base 的對(duì)數(shù) x ,計(jì)算為
log(x)/log(base)。
-
math.log1p(x)? 返回 1+x 的自然對(duì)數(shù)(以 e 為底)。 以對(duì)于接近零的 x 精確的方式計(jì)算結(jié)果。
-
math.log2(x)? 返回 x 以2為底的對(duì)數(shù)。這通常比
log(x, 2)更準(zhǔn)確。3.3 新版功能.
參見
int.bit_length()返回表示二進(jìn)制整數(shù)所需的位數(shù),不包括符號(hào)和前導(dǎo)零。
-
math.log10(x)? 返回 x 底為10的對(duì)數(shù)。這通常比
log(x, 10)更準(zhǔn)確。
-
math.pow(x, y)? 將返回
x的y次冪。特殊情況盡可能遵循C99標(biāo)準(zhǔn)的附錄'F'。特別是,pow(1.0, x)和pow(x, 0.0)總是返回1.0,即使x是零或NaN。 如果x和y都是有限的,x是負(fù)數(shù),y不是整數(shù)那么pow(x, y)是未定義的,并且引發(fā)ValueError。與內(nèi)置的
**運(yùn)算符不同,math.pow()將其參數(shù)轉(zhuǎn)換為float類型。使用**或內(nèi)置的pow()函數(shù)來(lái)計(jì)算精確的整數(shù)冪。
-
math.sqrt(x)? 返回 x 的平方根。
三角函數(shù)?
-
math.acos(x)? 以弧度為單位返回 x 的反余弦值。
-
math.asin(x)? 以弧度為單位返回 x 的反正弦值。
-
math.atan(x)? 以弧度為單位返回 x 的反正切值。
-
math.atan2(y, x)? 以弧度為單位返回
atan(y / x)。結(jié)果是在-pi和pi之間。從原點(diǎn)到點(diǎn)(x, y)的平面矢量使該角度與正X軸成正比。atan2()的點(diǎn)的兩個(gè)輸入的符號(hào)都是已知的,因此它可以計(jì)算角度的正確象限。 例如,atan(1)和atan2(1, 1)都是pi/4,但atan2(-1, -1)是-3*pi/4。
-
math.cos(x)? 返回 x 弧度的余弦值。
-
math.hypot(x, y)? 返回歐幾里德范數(shù),
sqrt(x*x + y*y)。 這是從原點(diǎn)到點(diǎn)(x, y)的向量長(zhǎng)度。
-
math.sin(x)? 返回 x 弧度的正弦值。
-
math.tan(x)? 返回 x 弧度的正切值。
角度轉(zhuǎn)換?
-
math.degrees(x)? 將角度 x 從弧度轉(zhuǎn)換為度數(shù)。
-
math.radians(x)? 將角度 x 從度數(shù)轉(zhuǎn)換為弧度。
雙曲函數(shù)?
雙曲函數(shù) 是基于雙曲線而非圓來(lái)對(duì)三角函數(shù)進(jìn)行模擬。
-
math.acosh(x)? 返回 x 的反雙曲余弦值。
-
math.asinh(x)? 返回 x 的反雙曲正弦值。
-
math.atanh(x)? 返回 x 的反雙曲正切值。
-
math.cosh(x)? 返回 x 的雙曲余弦值。
-
math.sinh(x)? 返回 x 的雙曲正弦值。
-
math.tanh(x)? 返回 x 的雙曲正切值。
特殊函數(shù)?
-
math.erf(x)? 返回 x 處的 error function 。
erf()函數(shù)可用于計(jì)算傳統(tǒng)的統(tǒng)計(jì)函數(shù),如 累積標(biāo)準(zhǔn)正態(tài)分布def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0
3.2 新版功能.
-
math.erfc(x)? 返回 x 處的互補(bǔ)誤差函數(shù)。 互補(bǔ)錯(cuò)誤函數(shù) 定義為
1.0 - erf(x)。 它用于 x 的大值,從其中減去一個(gè)會(huì)導(dǎo)致 有效位數(shù)損失。3.2 新版功能.
-
math.lgamma(x)? 返回Gamma函數(shù)在 x 絕對(duì)值的自然對(duì)數(shù)。
3.2 新版功能.
常量?
-
math.pi? 數(shù)學(xué)常數(shù) π = 3.141592...,精確到可用精度。
-
math.e? 數(shù)學(xué)常數(shù) e = 2.718281...,精確到可用精度。
-
math.tau? 數(shù)學(xué)常數(shù) τ = 6.283185...,精確到可用精度。Tau 是一個(gè)圓周常數(shù),等于 2π,圓的周長(zhǎng)與半徑之比。更多關(guān)于 Tau 的信息可參考 Vi Hart 的視頻 Pi is (still) Wrong。吃兩倍多的派來(lái)慶祝 Tau 日 吧!
3.6 新版功能.
-
math.inf? 浮點(diǎn)正無(wú)窮大。 (對(duì)于負(fù)無(wú)窮大,使用
-math.inf。)相當(dāng)于``float('inf')`` 的輸出。3.5 新版功能.
-
math.nan? 浮點(diǎn)“非數(shù)字”(NaN)值。 相當(dāng)于
float('nan')的輸出。3.5 新版功能.
CPython implementation detail: math 模塊主要包含圍繞平臺(tái)C數(shù)學(xué)庫(kù)函數(shù)的簡(jiǎn)單包裝器。特殊情況下的行為在適當(dāng)情況下遵循C99標(biāo)準(zhǔn)的附錄F。當(dāng)前的實(shí)現(xiàn)將引發(fā) ValueError 用于無(wú)效操作,如 sqrt(-1.0) 或 log(0.0) (其中C99附件F建議發(fā)出無(wú)效操作信號(hào)或被零除), 和 OverflowError 用于溢出的結(jié)果(例如, exp(1000.0) )。除非一個(gè)或多個(gè)輸入?yún)?shù)是NaN,否則不會(huì)從上述任何函數(shù)返回NaN;在這種情況下,大多數(shù)函數(shù)將返回一個(gè)NaN,但是(再次遵循C99附件F)這個(gè)規(guī)則有一些例外,例如 pow(float('nan'), 0.0) 或 hypot(float('nan'), float('inf')) 。
請(qǐng)注意,Python不會(huì)將顯式NaN與靜默NaN區(qū)分開來(lái),并且顯式NaN的行為仍未明確。典型的行為是將所有NaN視為靜默的。
參見
cmath模塊這里很多函數(shù)的復(fù)數(shù)版本。
