更新時(shí)間:2022-07-05 來(lái)源:黑馬程序員 瀏覽量:
數(shù)字類型不僅可以參與簡(jiǎn)單的加減乘除等基本運(yùn)算,還可以參與更加復(fù)雜的數(shù)學(xué)運(yùn)算,比如求弦、求根、求對(duì)數(shù)等,在Python程序中實(shí)現(xiàn)這些運(yùn)算需要用到Python的一個(gè)數(shù)學(xué)模塊——math。在使用math模塊之前,需要先用import語(yǔ)句導(dǎo)入math模塊:
import math
math模塊提供了幾個(gè)數(shù)學(xué)常量和眾多數(shù)學(xué)函數(shù),接下來(lái)將帶領(lǐng)大家從這兩方面認(rèn)識(shí)一下math模塊。
在眾多數(shù)字運(yùn)算中都會(huì)用到一些特別的常數(shù),例如,圓周率m、自然對(duì)數(shù)的底e等。math模塊提供了4個(gè)常數(shù):pi、e、inf、nan,它們對(duì)應(yīng)的數(shù)學(xué)符號(hào)和表示的含義如表1所示。
表1math常數(shù)
下面利用math模塊來(lái)輸出圓周率m和自然常數(shù)e的值(精確到小數(shù)點(diǎn)后20位):
# 03_calculation.py import math print("圓周率π:%.20f"% math.pi) #精確到小數(shù)點(diǎn)后20位 print("自然常數(shù)e: %.20f" %math.e) #精確到小數(shù)點(diǎn)后20位
數(shù)學(xué)中除了基本的運(yùn)算以外,還支持一些特殊運(yùn)算,比如求絕對(duì)值、階乘,最大公約數(shù)等。ma山模塊提供了一些數(shù)值表示函數(shù)。這些涵數(shù)的數(shù)學(xué)符號(hào)和功能描述如表所示。
Python中浮點(diǎn)數(shù)的精度有限,無(wú)法支持高精度浮點(diǎn)數(shù)的運(yùn)算。為了解決這個(gè)問(wèn)題,math庫(kù)提供了一個(gè)計(jì)算多個(gè)浮點(diǎn)數(shù)和的函數(shù)math.fsum(iterable)。這個(gè)函數(shù)不僅高效,還可以減少因計(jì)算導(dǎo)致的誤差。
數(shù)學(xué)中10個(gè)0.1相加的結(jié)果為1.0,下面分別用Python中的運(yùn)算符和math模塊中的fsum()函數(shù)進(jìn)行計(jì)算,代碼如下:
>>> 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 0.9999999999999999 >>> math.fsum([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) 1.0
由上述示例結(jié)果可知,直接使用運(yùn)算符計(jì)算的結(jié)果不是1.0,而使用fsum()函數(shù)計(jì)算的結(jié)果為1.0。產(chǎn)生這種情況,主要是因?yàn)镻ython中表示0.1時(shí)小數(shù)點(diǎn)后存在若干位的精度尾數(shù),在0.1參與加法運(yùn)算時(shí),這個(gè)精度尾數(shù)可能會(huì)影響輸出結(jié)果。因此,在涉及到浮點(diǎn)數(shù)運(yùn)算和結(jié)果比較時(shí),建議使用math模塊中提供的函數(shù)。
數(shù)學(xué)中的冪運(yùn)算和指數(shù)運(yùn)算是比較常見(jiàn)的,math模塊針對(duì)這些運(yùn)算提供了相應(yīng)的函數(shù),關(guān)于這些函數(shù)所對(duì)應(yīng)的數(shù)學(xué)符號(hào)和功能說(shuō)明如表3所示。
表3冪函數(shù)和對(duì)數(shù)函數(shù)
在指數(shù)運(yùn)算中,如果調(diào)用pow()函數(shù)時(shí)傳入的指數(shù)小于1,則表示該函數(shù)做的是開(kāi)根運(yùn)算。例如,對(duì)27執(zhí)行開(kāi)立方根運(yùn)算:
>>> math.pow(27, 1/3) #返回27的立方根 3.0
三角函數(shù)將三角形中的角與其邊長(zhǎng)相互關(guān)聯(lián)。在標(biāo)準(zhǔn)庫(kù)中,所有的三角函數(shù)的輸入都是弧度。math模塊中三角函數(shù)的數(shù)學(xué)表示與功能說(shuō)明如表4所示。
除此之外,mA山模塊中還增加了一些具有特殊功能的函數(shù),關(guān)于它們的功能說(shuō)明如表所示。
高斯誤差函數(shù)在概率論、統(tǒng)計(jì)學(xué)以及偏微分方程中有著廣泛的應(yīng)用,而伽瑪函數(shù)在分析學(xué)、概率論、偏微分方程和組合數(shù)學(xué)中有著廣泛的應(yīng)用,它們均不屬于初等數(shù)學(xué),但是非常有趣。例如,利用伽瑪函數(shù)計(jì)算浮點(diǎn)數(shù)的“階乘”,代碼如下:
>>> math.gamma (6) +求0~5范圍內(nèi)的整數(shù)階乘 120.0