十六进制字符串表示为python中的浮点数

时间:2018-01-17 10:28:29

标签: python-3.x numeric

从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会给出不同的表示。

...三江源

1 个答案:

答案 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