首頁 >後端開發 >Python教學 >python的浮點數佔多少個位元組

python的浮點數佔多少個位元組

anonymity
anonymity原創
2019-06-12 11:24:4514793瀏覽

浮點數是用機器上浮點數的本機雙精確度(64 bit)表示的。提供大約17位的精度和範圍從-308到308的指數。和C語言裡面的double型別相同。 Python不支援32bit的單精度浮點數。如果程式需要精確控制區間和數位精度,可以考慮使用numpy擴充庫。

Python 3.X對於浮點數預設的是提供17位元數字的精度。

python的浮點數佔多少個位元組

 

關於單一精確度與雙精確度的通俗解釋:

單一精確度型與雙精確度型,其型別說明符為float 單精確度說明符,double 雙精確度說明符。在Turbo C中單精度型佔4個位元組(32位元)記憶體空間,其數值範圍為3.4E-38~3.4E 38,只能提供七位元有效數字。雙精度型佔8 個位元組(64位元)記憶體空間,其數值範圍為1.7E-308~1.7E 308,可提供16位元有效數字。

 

要求超過17位元的精確度分析

python預設的是17位元小數的精確度,但這裡有一個問題,就是當我們的計算需要使用更高的精度(超過17位元小數)的時候該怎麼做呢?

1. 使用格式化(不建議)

>>> a = "%.30f" % (1/3)
>>> a
'0.333333333333333314829616256247'

 可以顯示,但是不準確,後面的數字往往沒有意義。

2. 高精度使用decimal模組,配合getcontext

>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.058823529411764705882352941176470588235294117647059')
>>> float(c)
0.058823529411764705

 預設的context的精確度是28位,可以設定為50位元甚至更高,都可以。這樣在分析複雜的浮點數的時候,可以有更高的自己可以控制的精確度。其實可以留意下context裡面的這rounding=ROUND_HALF_EVEN 參數。 ROUND_HALF_EVEN, 當half的時候,靠近even.

 

#

以上是python的浮點數佔多少個位元組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn