python執(zhí)行精確的小數(shù)計(jì)算方法
在進(jìn)行浮點(diǎn)數(shù)計(jì)算時(shí)它們無(wú)法精確表達(dá)出所有的十進(jìn)制小數(shù)位。
a = 4.1 b = 5.329 print(a+b) 9.428999999999998
這些誤差實(shí)際上是底層CPU的浮點(diǎn)運(yùn)算單元和IEEE754浮點(diǎn)數(shù)算數(shù)標(biāo)準(zhǔn)的一種“特性”。python的浮點(diǎn)數(shù)類型保存的數(shù)據(jù)采用的是原始表示形式,因此使用float實(shí)例時(shí)就不能避免這樣的誤差。
我們可以使用decimal模塊避免這種操作(如果不介意犧牲下性能):
from decimal import Decimal a = Decimal('4.1') b = Decimal('5.329') print(a+b) 9.429
注意Decimal的參數(shù)必須是字符串,不能是浮點(diǎn)型,否則誤差依舊存在。
decimal模塊的主要功能是允許控制計(jì)算過(guò)程中的各個(gè)方面,包括數(shù)字的尾數(shù)和四舍五入。
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也可以實(shí)現(xiàn)和localcontext一樣的功能
from decimal import Decimal, getcontext a = Decimal(4.1) b = Decimal(5.329) getcontext().prec = 3 print(a/b) 0.769
誤差我們不能完全消除,我們只能盡力優(yōu)化算法,使得誤差盡可能小。在大數(shù)和小數(shù)相加時(shí)要格外注意。
nums = [3.21e+18, 1, -3.21e+18] print(sum(nums)) print('=========================') import math res = math.fsum(nums) print(res) 0.0 ========================= 1.0
以上這篇python執(zhí)行精確的小數(shù)計(jì)算方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python wordcloud庫(kù)實(shí)例講解使用方法
這篇文章主要介紹了python wordcloud庫(kù)實(shí)例,詞云通過(guò)以詞語(yǔ)為基本單位,更加直觀和藝術(shù)地展示文本。wordcloud是優(yōu)秀的詞云展示的python第三方庫(kù)2022-12-12Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python 字符串處理特殊空格\xc2\xa0\t\n Non-breaking space
今天遇到一個(gè)問(wèn)題,使用python的find函數(shù)尋找字符串中的第一個(gè)空格時(shí)沒(méi)有找到正確的位置,下面是解決方法,需要的朋友可以參考下2020-02-02Python二維列表的創(chuàng)建、轉(zhuǎn)換以及訪問(wèn)詳解
列表中的元素還可以是另一個(gè)列表,這種列表稱為多為列表,只有一層嵌套的多維列表稱為二維列表,下面這篇文章主要給大家介紹了關(guān)于Python二維列表的創(chuàng)建、轉(zhuǎn)換及訪問(wèn)的相關(guān)資料,需要的朋友可以參考下2022-04-04Python彩色化Linux的命令行終端界面的代碼實(shí)例分享
美化Linux的terminal終端顯示的方法多種多樣,這里我們給出一個(gè)利用Python彩色化Linux的命令行終端界面的代碼實(shí)例分享,包括一個(gè)Linux下簡(jiǎn)便執(zhí)行Python程序的方法,需要的朋友可以參考下2016-07-07Python爬蟲(chóng)實(shí)現(xiàn)抓取電影網(wǎng)站信息并入庫(kù)
本文主要介紹了利用Python爬蟲(chóng)實(shí)現(xiàn)抓取電影網(wǎng)站信息的功能,并將抓取到的信息入庫(kù)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-02-02