最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何執(zhí)行精確的浮點數(shù)運算

 更新時間:2020年07月31日 15:37:09   作者:David Beazley  
這篇文章主要介紹了Python如何執(zhí)行精確的浮點數(shù)運算,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

問題

你需要對浮點數(shù)執(zhí)行精確的計算操作,并且不希望有任何小誤差的出現(xiàn)。

解決方案

浮點數(shù)的一個普遍問題是它們并不能精確的表示十進(jìn)制數(shù)。 并且,即使是最簡單的數(shù)學(xué)運算也會產(chǎn)生小的誤差,比如:

>>> a = 4.2
>>> b = 2.1
>>> a + b
6.300000000000001
>>> (a + b) == 6.3
False
>>>

這些錯誤是由底層CPU和IEEE 754標(biāo)準(zhǔn)通過自己的浮點單位去執(zhí)行算術(shù)時的特征。 由于Python的浮點數(shù)據(jù)類型使用底層表示存儲數(shù)據(jù),因此你沒辦法去避免這樣的誤差。

如果你想更加精確(并能容忍一定的性能損耗),你可以使用 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

初看起來,上面的代碼好像有點奇怪,比如我們用字符串來表示數(shù)字。 然而, Decimal 對象會像普通浮點數(shù)一樣的工作(支持所有的常用數(shù)學(xué)運算)。 如果你打印它們或者在字符串格式化函數(shù)中使用它們,看起來跟普通數(shù)字沒什么兩樣。

decimal 模塊的一個主要特征是允許你控制計算的每一方面,包括數(shù)字位數(shù)和四舍五入運算。 為了這樣做,你先得創(chuàng)建一個本地上下文并更改它的設(shè)置,比如:

>>> from decimal import localcontext
>>> a = Decimal('1.3')
>>> b = Decimal('1.7')
>>> print(a / b)
0.7647058823529411764705882353
>>> with localcontext() as ctx:
...   ctx.prec = 3
...   print(a / b)
...
0.765
>>> with localcontext() as ctx:
...   ctx.prec = 50
...   print(a / b)
...
0.76470588235294117647058823529411764705882352941176
>>>

討論

decimal 模塊實現(xiàn)了IBM的”通用小數(shù)運算規(guī)范”。不用說,有很多的配置選項這本書沒有提到。

Python新手會傾向于使用 decimal 模塊來處理浮點數(shù)的精確運算。 然而,先理解你的應(yīng)用程序目的是非常重要的。 如果你是在做科學(xué)計算或工程領(lǐng)域的計算、電腦繪圖,或者是科學(xué)領(lǐng)域的大多數(shù)運算, 那么使用普通的浮點類型是比較普遍的做法。 其中一個原因是,在真實世界中很少會要求精確到普通浮點數(shù)能提供的17位精度。 因此,計算過程中的那么一點點的誤差是被允許的。 第二點就是,原生的浮點數(shù)計算要快的多-有時候你在執(zhí)行大量運算的時候速度也是非常重要的。

即便如此,你卻不能完全忽略誤差。數(shù)學(xué)家花了大量時間去研究各類算法,有些處理誤差會比其他方法更好。 你也得注意下減法刪除以及大數(shù)和小數(shù)的加分運算所帶來的影響。比如:

>>> nums = [1.23e+18, 1, -1.23e+18]
>>> sum(nums) # Notice how 1 disappears
0.0
>>>

上面的錯誤可以利用 math.fsum() 所提供的更精確計算能力來解決:

>>> import math
>>> math.fsum(nums)
1.0
>>>

然而,對于其他的算法,你應(yīng)該仔細(xì)研究它并理解它的誤差產(chǎn)生來源。

總的來說, decimal 模塊主要用在涉及到金融的領(lǐng)域。 在這類程序中,哪怕是一點小小的誤差在計算過程中蔓延都是不允許的。 因此, decimal 模塊為解決這類問題提供了方法。 當(dāng)Python和數(shù)據(jù)庫打交道的時候也通常會遇到 Decimal 對象,并且,通常也是在處理金融數(shù)據(jù)的時候。

以上就是Python如何執(zhí)行精確的浮點數(shù)運算的詳細(xì)內(nèi)容,更多關(guān)于Python執(zhí)行精確的浮點數(shù)運算的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實現(xiàn)將Excel轉(zhuǎn)換成為image的方法

    Python實現(xiàn)將Excel轉(zhuǎn)換成為image的方法

    今天小編就為大家分享一篇Python實現(xiàn)將Excel轉(zhuǎn)換成為image的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python實現(xiàn)計算兩個時間之間相差天數(shù)的方法

    Python實現(xiàn)計算兩個時間之間相差天數(shù)的方法

    這篇文章主要介紹了Python實現(xiàn)計算兩個時間之間相差天數(shù)的方法,涉及Python針對日期時間的相關(guān)運算操作技巧,需要的朋友可以參考下
    2017-05-05
  • python:動態(tài)路由的Flask程序代碼

    python:動態(tài)路由的Flask程序代碼

    今天小編就為大家分享一篇python:動態(tài)路由的Flask程序代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python中字典的緩存池

    Python中字典的緩存池

    這篇文章主要介紹了Python中字典的緩存池,字典的緩存池采用數(shù)組實現(xiàn)的,并且容量也是80個,下文詳細(xì)介紹需要的小伙伴可以參考一下
    2022-05-05
  • Python-ElasticSearch搜索查詢的講解

    Python-ElasticSearch搜索查詢的講解

    今天小編就為大家分享一篇關(guān)于Python-ElasticSearch搜索查詢的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python 異或加密字符串的實例

    python 異或加密字符串的實例

    今天小編就為大家分享一篇python 異或加密字符串的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • RSA加密算法Python實現(xiàn)方式

    RSA加密算法Python實現(xiàn)方式

    這篇文章主要介紹了RSA加密算法Python實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 對python判斷是否回文數(shù)的實例詳解

    對python判斷是否回文數(shù)的實例詳解

    今天小編就為大家分享一篇對python判斷是否回文數(shù)的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python二分查找詳解

    Python二分查找詳解

    這篇文章主要給大家匯總介紹了Python二分查找的幾種實現(xiàn)的方法,有需要的小伙伴可以參考下。
    2015-09-09
  • 使用python編寫簡單的小程序編譯成exe跑在win10上

    使用python編寫簡單的小程序編譯成exe跑在win10上

    這篇文章主要介紹了使用python編寫簡單的小程序編譯成exe跑在win10上的相關(guān)資料,需要的朋友可以參考下
    2018-01-01

最新評論

长汀县| 托克托县| 铜山县| 阿尔山市| 吉木萨尔县| 华容县| 浦东新区| 亚东县| 望都县| 七台河市| 蒙城县| 梁山县| 大化| 宣威市| 宜兰县| 安泽县| 名山县| 崇义县| 丰原市| 侯马市| 大安市| 南江县| 新巴尔虎右旗| 南充市| 象山县| 商洛市| 沈阳市| 葫芦岛市| 白河县| 东莞市| 青川县| 台北县| 鹿邑县| 遂溪县| 安康市| 冕宁县| 富宁县| 南丹县| 永川市| 武穴市| 白城市|