在python tutorial for floating point,有沒有辦法在python中查看float的內部表示?
在基地2個,1/10是無限重複的部分
0.0001100110011001100110011001100110011001100110011 ...
如何讓Python解釋器打印此intenal代表性? repr(0.1)
沒有幫助。
在python tutorial for floating point,有沒有辦法在python中查看float的內部表示?
在基地2個,1/10是無限重複的部分
0.0001100110011001100110011001100110011001100110011 ...
如何讓Python解釋器打印此intenal代表性? repr(0.1)
沒有幫助。
您可以使用結構模塊,以獲得浮子的內部表示。一旦你得到了表示,你只需要將字符轉換爲序數值並將其格式化爲二進制。
>>> import struct
>>> def float_rep(num):
return ''.join("{:08b}".format(ord(elem)) for elem in struct.pack('!f', num))
>>> float_rep(0.1)
'00111101110011001100110011001101'
編輯
雖然上述內部會爲您提供實際的表現,但我想,你更感興趣的是十進制的二進制數。以下就足夠了查詢
>>> def float_to_bin(num):
sign = '-' if num < 0 else ''
num = abs(num)
whole = int(num)
num -= whole
yield sign + bin(whole) + '.'
while num:
num*= 2
whole = int(num)
yield str(whole)
num -= whole
>>> ''.join(islice(float_to_bin(1.1),None,20))
'1.0001100110011001100'
>>> ''.join(islice(float_to_bin(-1.1),None,20))
'-1.0001100110011001100'
>>> ''.join(islice(float_to_bin(.1),None,20))
'0.0001100110011001100'
>>> ''.join(islice(float_to_bin(0),None,20))
'0.'
>>> ''.join(islice(float_to_bin(1),None,20))
'1.'
>>> ''.join(islice(float_to_bin(0.25),None,20))
'0.01'
>>> ''.join(islice(float_to_bin(0.5),None,20))
'0.1'
>>> ''.join(islice(float_to_bin(-0.5),None,20))
'-0.1'
我猜你已經有跡象,尾數和指數都混在一起了。 –
@DavidHeffernan:你能解釋一下你的評論嗎?這是浮動的內部表示 – Abhijit
我不認爲Jichao實際上需要浮動的內部表示。我認爲他希望在基數2中寫'1/10':'0.0001100110011001100110011001100110011001100110011 ...' –
使用Decimal
模塊:
>>> from decimal import Decimal
>>> Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
用戶需要二進制表示而不是十進制表示 –
嘗試使用decimal
模塊
import decimal
decimal.Decimal(0.1)
給
Decimal('0.1000000000000000055511151231257827021181583404541015625')
用戶需要二進制表示而不是十進制表示 –
@DavidHeffernan實際上,用戶請求的是內部表示,而不是二進制表示。十進制給出的是內部表示的十進制表示。 – jmetz
我引用了另外一個重點,「如何讓python解釋器打印這個**內部表示?」。 –
你可以得到一個十六進制表示這樣'(0.1).HEX()' – dansalmo
1/10二進制數字是不是爲'float'值的內部表示。你想查看二進制數字還是以浮點格式對值進行編碼的位? –