在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'值的内部表示。你想查看二进制数字还是以浮点格式对值进行编码的位? –