浮點數是用機器上浮點數的本機雙精確度(64 bit)表示的。提供大約17位的精度和範圍從-308到308的指數。和C語言裡面的double型別相同。 Python不支援32bit的單精度浮點數。如果程式需要精確控制區間和數位精度,可以考慮使用numpy擴充庫。
Python 3.X對於浮點數預設的是提供17位元數字的精度。
關於單一精確度與雙精確度的通俗解釋:
單一精確度型與雙精確度型,其型別說明符為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中文網其他相關文章!