- 利用Python解決數(shù)學(xué)問題(原書第2版)
- (英)薩姆·莫利
- 1359字
- 2025-08-07 15:28:32
1.2 探索Python的數(shù)值類型
Python提供了基本的數(shù)值類型,如任意大小的整數(shù)和浮點(diǎn)數(shù)(雙精度),但它也提供了一些額外的數(shù)值類型,這些數(shù)值類型在對(duì)精度有特別要求的特定應(yīng)用中非常有用。Python還以內(nèi)置數(shù)據(jù)類型的方式提供了對(duì)復(fù)數(shù)的支持,這對(duì)一些更高級(jí)的數(shù)學(xué)應(yīng)用很有用。讓我們從Decimal類型開始,來看看這些不同的數(shù)值類型。
1.2.1 Decimal類型
如果你的應(yīng)用需要高精度的十進(jìn)制表示和算術(shù)運(yùn)算,可以使用Python標(biāo)準(zhǔn)庫中decimal模塊提供的Decimal類型:


使用浮點(diǎn)(float)對(duì)象執(zhí)行上述計(jì)算得到的結(jié)果為2.6630000000000003,其中包含了一個(gè)小誤差,這是因?yàn)橛行?shù)字本身無法使用2的有限冪和來精確表示。例如,0.1的二進(jìn)制展開是0.000110011…,它是個(gè)無限循環(huán)小數(shù)。因此,對(duì)這個(gè)數(shù)字的任何浮點(diǎn)表示都將帶有一個(gè)小誤差。請(qǐng)注意,Decimal的參數(shù)是以字符串而非浮點(diǎn)形式給出的。
Decimal類型基于IBM的通用十進(jìn)制算術(shù)規(guī)范(http://speleotrove.com/decimal/decarith.html),該規(guī)范是浮點(diǎn)數(shù)算術(shù)的另一種規(guī)范,它通過使用10的冪而不是2的冪來精確表示十進(jìn)制數(shù)。這意味著它可以安全地用于金融計(jì)算,因?yàn)樵谶@一領(lǐng)域,四舍五入誤差的累積會(huì)產(chǎn)生可怕的后果。然而,Decimal格式的內(nèi)存效率較低,因?yàn)樗仨毚鎯?chǔ)十進(jìn)制數(shù)字而不是二進(jìn)制數(shù)字(位),而且十進(jìn)制數(shù)的計(jì)算比傳統(tǒng)的浮點(diǎn)數(shù)計(jì)算代價(jià)更高。
decimal包還提供了Context對(duì)象,它允許對(duì)Decimal對(duì)象的精度、顯示和屬性進(jìn)行細(xì)粒度控制。可以使用decimal模塊的getcontext函數(shù)來訪問當(dāng)前(默認(rèn))上下文。getcontext函數(shù)返回的Context對(duì)象有許多可以修改的屬性。例如,我們可以設(shè)置算術(shù)運(yùn)算的精度:

當(dāng)我們將精度設(shè)置為4,而不是默認(rèn)的28時(shí),我們可以看到1.1的四次冪被四舍五入到四位有效數(shù)字。
甚至可以使用localcontext函數(shù)在本地設(shè)置上下文,該函數(shù)返回一個(gè)上下文管理器,該管理器在with塊結(jié)束時(shí)恢復(fù)原始環(huán)境:

這意味著在with塊內(nèi)部可以自由地修改上下文,而在with塊結(jié)束時(shí),上下文將恢復(fù)到默認(rèn)狀態(tài)。
1.2.2 Fraction類型
另外,對(duì)于需要準(zhǔn)確表示整數(shù)分?jǐn)?shù)的應(yīng)用程序,比如在處理比例或概率時(shí),可以使用Python標(biāo)準(zhǔn)庫中的fractions模塊提供的Fraction類型。用法類似,只是我們通常將分?jǐn)?shù)的分子和分母作為參數(shù):

Fraction類型只需存儲(chǔ)兩個(gè)整數(shù)——分子和分母,并使用加法和乘法的基本規(guī)則進(jìn)行分?jǐn)?shù)算術(shù)運(yùn)算。
1.2.3 復(fù)數(shù)類型
平方根函數(shù)適用于正數(shù),但不適用于負(fù)數(shù)。然而,我們可以通過添加一個(gè)符號(hào)i(虛數(shù)單位)來擴(kuò)展實(shí)數(shù)集,虛數(shù)單位的平方為-1(即i2=-1)。復(fù)數(shù)是形如x+iy的數(shù)字,其中x和y是我們習(xí)慣使用的實(shí)數(shù)。在這種形式中,數(shù)字x稱為實(shí)部,y稱為虛部。復(fù)數(shù)有自己的算術(shù)運(yùn)算,如加法、減法、乘法和除法,當(dāng)虛部為零時(shí),虛數(shù)的算術(shù)運(yùn)算與實(shí)數(shù)的算術(shù)運(yùn)算一致。例如,我們可以將復(fù)數(shù)1+2i和2-i相加得到(1+2i)+(2-i)=3+i,或者將它們相乘得到以下結(jié)果:
(1+2i)(2-i)=(2+2)+(4i-i)=4+3i
復(fù)數(shù)的使用頻率比你想象的要高,當(dāng)場(chǎng)景中存在某種循環(huán)或振蕩行為時(shí),復(fù)數(shù)通常在幕后發(fā)揮作用。這是因?yàn)檎液陀嘞液瘮?shù)分別是以下復(fù)指數(shù)的實(shí)部和虛部:
ei t=cos(t)+isin(t)
這里,t是任意實(shí)數(shù)。有關(guān)復(fù)數(shù)的詳細(xì)信息以及更多有趣的事實(shí)和理論,可以在涵蓋復(fù)數(shù)的許多資源中找到。下面的維基百科頁面是一個(gè)很好的起點(diǎn):https://en.wikipedia.org/wiki/Complex_number。
Python支持復(fù)數(shù),在代碼中用一個(gè)文字符號(hào)1j表示復(fù)數(shù)單位。這可能與你熟悉的、從其他來源看到的復(fù)數(shù)單位表示法有所不同。大多數(shù)數(shù)學(xué)教材通常會(huì)使用符號(hào)i來表示復(fù)數(shù)單位:

復(fù)數(shù)的共軛復(fù)數(shù)是將其虛部變?yōu)橄喾磾?shù)得出的結(jié)果。其效果是實(shí)現(xiàn)方程i2=-1的兩個(gè)可能解之間的交換。
Python標(biāo)準(zhǔn)庫的cmath模塊提供了專門針對(duì)復(fù)數(shù)的數(shù)學(xué)函數(shù)。
在了解了Python提供的一些基本數(shù)值類型后,我們現(xiàn)在可以探索它提供的數(shù)學(xué)函數(shù)了。
- Unreal Engine Physics Essentials
- Java程序設(shè)計(jì)與實(shí)踐教程(第2版)
- Quarkus實(shí)踐指南:構(gòu)建新一代的Kubernetes原生Java微服務(wù)
- The HTML and CSS Workshop
- 用戶體驗(yàn)增長(zhǎng):數(shù)字化·智能化·綠色化
- 第一行代碼 C語言(視頻講解版)
- 軟件測(cè)試實(shí)用教程
- Creating Stunning Dashboards with QlikView
- C語言從入門到精通
- Python項(xiàng)目實(shí)戰(zhàn)從入門到精通
- Web程序設(shè)計(jì):ASP.NET(第2版)
- 軟件工程與UML案例解析(第三版)
- Expert Cube Development with SSAS Multidimensional Models
- PHP典型模塊與項(xiàng)目實(shí)戰(zhàn)大全
- Kotlin入門與實(shí)戰(zhàn)