官术网_书友最值得收藏!

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ù)字,其中xy是我們習(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ù)了。

主站蜘蛛池模板: 兴山县| 辽宁省| 江陵县| 堆龙德庆县| 通州区| 于都县| 城口县| 南京市| 沂水县| 梅州市| 黑水县| 修文县| 定西市| 新宾| 金门县| 沂源县| 通城县| 监利县| 光山县| 宜春市| 开阳县| 钦州市| 镇赉县| 顺昌县| 万安县| 杭州市| 静海县| 青铜峡市| 曲沃县| 洛隆县| 阜阳市| 安塞县| 射洪县| 邵阳市| 额尔古纳市| 吉安县| 康马县| 仙桃市| 荆门市| 眉山市| 涞水县|