从python文档中说“十六进制字符串0x3.a7p10代表浮点数(3 + 10./16 + 7./16**2)* 2.0 ** 10或3740.0”所以:
>>> float.fromhex('0x3.a7p10')
3740.0
然后
>>> float.hex(3740.0)
'0x1.d380000000000p+11' (will give different presentation)
我的问题是如何使用上面的计算公式将'0x1.d380000000000p + 11'转换为浮点数,以及为什么classmethod float.hex和classmethod float.fromhex会给出不同的表示。
...三江源
答案 0 :(得分:1)
'0x1.d380000000000p+11'
表示(1 + 13./16 + 3./16**2 + 8/16**3) * 2.0**11
,等于3740.0
。要转换此结果,您可以运行再次返回float.fromhex('0x1.d380000000000p+11')
的{{1}}。
3740.0
为您提供规范化表示,这意味着float.hex
前面的因子介于1和2之间。解释器的作用是移位逗号在一个位置的二进制表示中:增加指数(从10到11),以及因子的一半(2**x
)。
通常,在此规范化表示中,前面的因子介于1和基数之间。例如,如果您执行0x3.a7 / 2 = 0x1.d38
,则会获得print(2234.2e-34)
。这里的主要因素是1到10之间,因为2.2342e-31
对应e
。