python中精確的浮點數(shù)運算示例
起步
浮點數(shù)的一個普遍的問題是它們不能精確的表示十進制數(shù)。
>>> a = 4.2 >>> b = 2.1 >>> a + b 6.300000000000001 >>> (a + b) == 6.3 False >>>
這是由于底層 CPU 和 IEEE 754 標準通過自己的浮點單位去執(zhí)行算術(shù)時的特征??此朴懈F的小數(shù), 在計算機的二進制表示里卻是無窮的。
一般情況下,這一點點的小誤差是允許存在的。如果不能容忍這種誤差(比如金融領(lǐng)域),那么就要考慮用一些途徑來解決這個問題了。
Decimal
使用這個模塊不會出現(xiàn)任何小誤差。
>>> from decimal import Decimal >>> a = Decimal('4.2') >>> b = Decimal('2.1') >>> a + b Decimal('6.3') >>> print(a + b) 6.3 >>> (a + b) == Decimal('6.3') True
盡管代碼看起來比較奇怪,使用字符串來表示數(shù)字,但是 Decimal
支持所有常用的數(shù)學運算。 decimal
模塊允許你控制計算的每一方面,包括數(shù)字位數(shù)和四舍五入。在這樣做之前,需要創(chuàng)建一個臨時上下文環(huán)境來改變這種設定:
>>> from decimal import Decimal, localcontext >>> a = Decimal('1.3') >>> b = Decimal('1.7') >>> print(a / b) 0.7647058823529411764705882353 >>> with localcontext() as ctx: ... ctx.prec = 3 ... print(a / b) ... 0.765 >>> with localcontext() as ctx: ... ctx.prec = 50 ... print(a / b) ... 0.76470588235294117647058823529411764705882352941176 >>>
由于 Decimal
的高精度數(shù)字自然也就用字符串來做展示和中轉(zhuǎn)。
總結(jié)
總的來說,當涉及金融領(lǐng)域時,哪怕是一點小小的誤差在計算過程中都是不允許的。因此 decimal
模塊為解決這類問題提供了方法。
以上就是python中精確的浮點數(shù)運算示例的詳細內(nèi)容,更多關(guān)于python浮點數(shù)運算的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Python建立RNN實現(xiàn)二進制加法的示例代碼
這篇文章主要介紹了使用Python建立RNN實現(xiàn)二進制加法的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03

Python實現(xiàn)XGBoost算法的應用實戰(zhàn)