在進行浮點數計算時它們無法精確表達出所有的十進位製小數字。
這些誤差實際上是底層cpu的浮點運算單元和ieee754浮點數算數標準的一種「特性」。python的浮點數型別儲存的資料採用的是原始表示形式,因此使用float例項時就不能避免這樣的誤差。a = 4.1
b = 5.329
print(a+b)
9.428999999999998
我們可以使用decimal模組避免這種操作(如果不介意犧牲下效能):
注意decimal的引數必須是字串,不能是浮點型,否則誤差依舊存在。from decimal import decimal
a = decimal('4.1')
b = decimal('5.329')
print(a+b)
9.429
decimal模組的主要功能是允許控制計算過程中的各個方面,包括數字的尾數和四捨五入。
getcontext也可以實現和localcontext一樣的功能from decimal import decimal
from decimal import localcontext
a = decimal(4.1)
b = decimal(5.329)
print(a/b)
print('***************=')
with localcontext() as ctx:
ctx.prec = 3
print(a/b)
0.7693751172827922400071261708
***************=
0.769
誤差我們不能完全消除,我們只能盡力優化演算法,使得誤差盡可能小。在大數和小數相加時要格外注意。from decimal import decimal, getcontext
a = decimal(4.1)
b = decimal(5.329)
getcontext().prec = 3
print(a/b)
0.769
nums = [3.21e+18, 1, -3.21e+18]
print(sum(nums))
print('*************************')
import math
res = math.fsum(nums)
print(res)
0.0*************************
1.0
精確的小數 decimal高階
原載於 用科學計數法的方式來表示小數的話,指數最大值是多少?超過了能表示的最大數值的話會如何?在運算的時候可能產生除以零的錯誤 和乙個無效的數值進行計算,比如說有些數值用 和 na 來表示的,跟它們進行計算會產生哪種錯誤提示?from decimal import getcontext contex...
Python 執行精確的浮點數運算
需要對浮點數執行精確的計算操作,並且不希望有任何小誤差的出現.浮點數的乙個普遍問題是它們並不能精確的表示十進位制數。並且,即使是最簡單的 數 算也會產生小的誤差,比如 a 4.2 b 2.1 a b 6.300000000000001 a b 6.3 false false 是由於底層cpu和iee...
精確到小數點位數的方法
1.在c語言中 可以直接 1f 中間這個數字就代表了要保留的小數點位數。include intmain 2.在c 中 常常採用的方法 需要用到頭檔案和函式setprecision n 括號中的n表示要精確的位數。包含標頭檔案 include 語句示例 cout include include usi...