python執行精確的小數計算

2021-08-19 22:43:18 字數 1350 閱讀 5111

在進行浮點數計算時它們無法精確表達出所有的十進位製小數字。

a = 4.1

b = 5.329

print(a+b)

9.428999999999998

這些誤差實際上是底層cpu的浮點運算單元和ieee754浮點數算數標準的一種「特性」。python的浮點數型別儲存的資料採用的是原始表示形式,因此使用float例項時就不能避免這樣的誤差。

我們可以使用decimal模組避免這種操作(如果不介意犧牲下效能):

from decimal import decimal

a = decimal('4.1')

b = decimal('5.329')

print(a+b)

9.429

注意decimal的引數必須是字串,不能是浮點型,否則誤差依舊存在。

decimal模組的主要功能是允許控制計算過程中的各個方面,包括數字的尾數和四捨五入。

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

getcontext也可以實現和localcontext一樣的功能

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...