Python 執行精確的浮點數運算

2021-09-29 06:06:08 字數 1068 閱讀 7860

需要對浮點數執行精確的計算操作,並且不希望有任何小誤差的出現.

浮點數的乙個普遍問題是它們並不能精確的表示十進位制數。並且,即使是最簡單的

數**算也會產生小的誤差,比如:

>>

> a =

4.2>>

> b =

2.1>>

> a + b

6.300000000000001

>>

>

(a + b)

==6.3

false

」false「是由於底層cpu和ieee標準通過自己的浮點單位去執行算術導致的。python的浮點資料型別使用底層表示儲存資料,所以無法無法避免這樣的誤差。

如果想更加精確(代價是效能損耗),可以使用decimal模組

'''

'''>>

>

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

上面真是乖乖的,用字串表示資料。。。

然而decimal物件支援所有的常用數**算。

真實世界中很少會要求精確到普通浮點數能提供的17 位精度,執行大量運算的時候速度很重要。所以使用不要隨便用decimal.

總的來說, decimal 模組主要用在涉及到金融的領域。在這類程式中,哪怕是一點

小小的誤差在計算過程中蔓延都是不允許的。因此, decimal 模組為解決這類問題提

供了方法。當python 和資料庫打交道的時候也通常會遇到decimal 物件,並且,通

常也是在處理金融資料的時候。

2 6 精確表達浮點數

任何乙個無限迴圈小數或有限小數都可以表示為分數的形式。1 有限小數 假設為a.b1b2b3b4b5 我們可以表示為 a b1b2b3b4b5 10 5 2 無限迴圈小數 假設為a.b1b2b3b4b5b6 c1c2c3c4 a.b1b2b3b4b5b6 c1c2c3c4 ab1b2b3b4b5b6....

浮點數精確加法 C 實現

參與運算的浮點數及計算結果所需儲存空間都不會超過main函式中的定義 int main int main num2 128 res 128 cout enter the first number cin num1 cout enter the second number cin num2 add n...

C 實現浮點數精確加法

實現兩個正浮點數的精確加法 參與運算的浮點數及計算結果所需儲存空間都不會超過main函qmzhapigs數中的定義 main函式框架要求如下 int main int main num2 128 res 128 cout enter the first number cin num1 cout en...