需要對浮點數執行精確的計算操作,並且不希望有任何小誤差的出現.
浮點數的乙個普遍問題是它們並不能精確的表示十進位制數。並且,即使是最簡單的
數**算也會產生小的誤差,比如:
>>
> 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...