python3從零學(xué)習(xí)-5.3.1虱疏、數(shù)學(xué)庫math

????????這些函數(shù)不適用于復(fù)數(shù);如果你需要計(jì)算復(fù)數(shù)苏携,請(qǐng)使用 cmath 模塊中的同名函數(shù)做瞪。將支持計(jì)算復(fù)數(shù)的函數(shù)區(qū)分開的目的,來自于大多數(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ù)纱扭。除非另有明確說明牍帚,否則所有返回值均為浮點(diǎn)數(shù)。

數(shù)論與表示函數(shù)

math.ceil(x)

?? ??? ?返回 x 的上限跪但,即大于或者等于 x 的最小整數(shù)履羞。如果 x 不是一個(gè)浮點(diǎn)數(shù),則委托 x.__ceil__(), 返回一個(gè) Integral 類的值屡久。

示例:

import math

print(math.ceil(10))

print(math.ceil(10.7))

輸出:

10

11

math.copysign(x, y)

?? ??? ?返回一個(gè)基于 x 的絕對(duì)值和 y 的符號(hào)的浮點(diǎn)數(shù)忆首。在支持帶符號(hào)零的平臺(tái)上,copysign(1.0, -0.0) 返回 -1.0.

示例:

import math

print(math.copysign(1.1,-0.5))

print(math.copysign(-1.1,-0.5))

print(math.copysign(-1.1,0.5))

輸出:

-1.1

-1.1

1.1

math.fabs(x)

?? ??? ?返回 x 的絕對(duì)值被环。

示例:

import math

print(math.fabs(1.1))

print(math.fabs(-1.1))

輸出:

1.1

1.1

math.factorial(x)

返回x的階乘糙及,即n!=1×2×3×...×(n-1)×n。如果x不是整數(shù)或?yàn)樨?fù)筛欢,則引發(fā)ValueError浸锨。

示例:

import math

print(math.factorial(1))

print(math.factorial(2))

print(math.factorial(3))

print(math.factorial(4))

print(math.factorial(5))

print(math.factorial(6))

輸出:

1

2

6

24

120

math.floor(x)

?? ??? ?返回 x 的向下取整唇聘,小于或等于 x 的最大整數(shù)。如果 x 不是浮點(diǎn)數(shù)柱搜,則委托 x.__floor__() 迟郎,它應(yīng)返回 Integral 值。

示例:

import math

print(math.floor(10.9))

print(math.floor(10))

輸出:

10

10

math.fmod(x, y)

?? ??? ?返回 fmod(x, y) 聪蘸,由平臺(tái)C庫定義宪肖。請(qǐng)注意,Python表達(dá)式 x % y 可能不會(huì)返回相同的結(jié)果健爬。C標(biāo)準(zhǔn)的目的是 fmod(x, y) 完全(數(shù)學(xué)上控乾;到無限精度)等于 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í)是首選。

示例:

import math

print(math.fmod(8, 3))

print(math.fmod(10, 3))

print(math.fmod(10.90, 50))

輸出:

2.0

1.0

10.9

math.frexp(x)

?? ??? ?返回 x 的尾數(shù)和指數(shù)作為對(duì)``(m, e)``骡和。 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)值。通過跟蹤多個(gè)中間部分和來避免精度損失:

>>>

>>> 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庫使用擴(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浇借。

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 必須至少為零砂豌。

如果沒有錯(cuò)誤發(fā)生盾戴,結(jié)果將是: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) 驮吱。

IEEE 754特殊值 NaN , inf 和 -inf 將根據(jù)IEEE規(guī)則處理含懊。具體來說结借, NaN 不被認(rèn)為接近任何其他值筐摘,包括 NaN 。 inf 和 -inf 只被認(rèn)為接近自己船老。

math.isfinite(x)

?? ??? ?如果 x 既不是無窮大也不是NaN咖熟,則返回 True ,否則返回 False 柳畔。 (注意 0.0 被認(rèn)為 是 有限的馍管。)

math.isinf(x)

?? ??? ?如果 x 是正或負(fù)無窮大,則返回 True 薪韩,否則返回 False 确沸。

math.isnan(x)

?? ??? ?如果 x 是 NaN(不是數(shù)字),則返回 True 俘陷,否則返回 False 罗捎。

math.ldexp(x, i)

?? ??? ?返回 x * (2**i) 。 這基本上是函數(shù) frexp() 的反函數(shù)岭洲。

math.modf(x)

?? ??? ?返回 x 的小數(shù)和整數(shù)部分宛逗。兩個(gè)結(jié)果都帶有 x 的符號(hào)并且是浮點(diǎn)數(shù)。

math.trunc(x)

?? ??? ?返回 Real 值 x 截?cái)酁?Integral (通常是整數(shù))盾剩。 委托給 x.__trunc__()雷激。

注意 frexp() 和 modf() 具有與它們的C等價(jià)函數(shù)不同的調(diào)用/返回模式:它們采用單個(gè)參數(shù)并返回一對(duì)值替蔬,而不是通過 ‘輸出形參’ 返回它們的第二個(gè)返回參數(shù)(Python中沒有這樣的東西)。

對(duì)于 ceil() 屎暇, floor() 和 modf() 函數(shù)承桥,請(qǐng)注意 所有 足夠大的浮點(diǎn)數(shù)都是精確整數(shù)。Python浮點(diǎn)數(shù)通常不超過53位的精度(與平臺(tái)C double類型相同)根悼,在這種情況下凶异,任何浮點(diǎn) x 與 abs(x) >= 2**52 必然沒有小數(shù)位。

冪函數(shù)與對(duì)數(shù)函數(shù)

math.exp(x)

? ? ?? ?返回?e**x.

math.expm1(x)

?? ??? ?返回e**x - 1挤巡。對(duì)于小的浮點(diǎn)數(shù)x, exp(x) - 1中的減法可能導(dǎo)致精度的顯著損失;expm1()函數(shù)提供了一種方法來計(jì)算這個(gè)數(shù)量的全部精度:

>>>

>>> 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

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 (base e) 的自然對(duì)數(shù)母廷。以對(duì)于接近零的 x 精確的方式計(jì)算結(jié)果轻黑。

math.log2(x)

?? ??? ?返回 x 以2為底的對(duì)數(shù)。這通常比 log(x, 2) 更準(zhǔn)確琴昆。

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ù)來計(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ù) 是基于雙曲線而非圓來對(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

math.erfc(x)

?? ??? ?返回 x 處的互補(bǔ)誤差函數(shù)。 互補(bǔ)錯(cuò)誤函數(shù) 定義為 1.0 - erf(x)旦袋。 它用于 x 的大值骤菠,從其中減去一個(gè)會(huì)導(dǎo)致 有效位數(shù)損失。

math.gamma(x)

?? ??? ?返回 x 處的 伽馬函數(shù) 值疤孕。

math.lgamma(x)

?? ??? ?返回Gamma函數(shù)在 x 絕對(duì)值的自然對(duì)數(shù)商乎。

常量

math.pi

?? ??? ?The mathematical constant π = 3.141592…, to available precision.

示例:

import math

print(math.pi)

輸出:

3.141592653589793

math.e

?? ??? ?The mathematical constant e = 2.718281…, to available precision.

示例:

import math

print(math.e)

輸出:

2.718281828459045

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 to its radius.

?? ??? ?To learn more about Tau, check out Vi Hart’s video Pi is (still) Wrong, and start celebrating Tau day by eating twice as much pie!

示例:

import math

print(math.tau)

輸出:

6.283185307179586

math.inf

?? ??? ?浮點(diǎn)正無窮大。 (對(duì)于負(fù)無窮大祭阀,使用 -math.inf 鹉戚。)相當(dāng)于``float(‘inf’)`` 的輸出。

示例:

import math

print(math.inf)

輸出:

inf

math.nan

?? ??? ?浮點(diǎn)“非數(shù)字”(NaN)值专控。 相當(dāng)于 float('nan') 的輸出抹凳。

示例:

import math

print(math.nan)

輸出:

nan

math 模塊主要包含圍繞平臺(tái)C語言數(shù)學(xué)庫函數(shù)的簡(jiǎn)單包裝器。特殊情況下的行為在適當(dāng)情況下遵循C99標(biāo)準(zhǔn)的附錄F伦腐。當(dāng)前的實(shí)現(xiàn)將引發(fā) ValueError 用于無效操作赢底,如 sqrt(-1.0) 或 log(0.0) (其中C99附件F建議發(fā)出無效操作信號(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ū)分開來,并且顯式NaN的行為仍未明確不傅。典型的行為是將所有NaN視為靜默的旅掂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市访娶,隨后出現(xiàn)的幾起案子商虐,更是在濱河造成了極大的恐慌,老刑警劉巖崖疤,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秘车,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡劫哼,警方通過查閱死者的電腦和手機(jī)叮趴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來权烧,“玉大人眯亦,你說我怎么就攤上這事“懵耄” “怎么了妻率?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)板祝。 經(jīng)常有香客問我宫静,道長(zhǎng),這世上最難降的妖魔是什么扔字? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任囊嘉,我火速辦了婚禮,結(jié)果婚禮上革为,老公的妹妹穿的比我還像新娘。我一直安慰自己舵鳞,他們只是感情好震檩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般抛虏。 火紅的嫁衣襯著肌膚如雪博其。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天迂猴,我揣著相機(jī)與錄音慕淡,去河邊找鬼。 笑死沸毁,一個(gè)胖子當(dāng)著我的面吹牛峰髓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播息尺,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼携兵,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了搂誉?” 一聲冷哼從身側(cè)響起徐紧,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炭懊,沒想到半個(gè)月后并级,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侮腹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年死遭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凯旋。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呀潭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出至非,到底是詐尸還是另有隱情钠署,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布荒椭,位于F島的核電站谐鼎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏趣惠。R本人自食惡果不足惜狸棍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望味悄。 院中可真熱鬧草戈,春花似錦、人聲如沸侍瑟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至费韭,卻和暖如春茧球,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背星持。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工抢埋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人督暂。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓揪垄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親损痰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子福侈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348