python 中浮点数的十六进制字符串表示
Hexadecimal string representation to floating number in python
来自 python 文档说 "the hexadecimal string 0x3.a7p10 represents the floating-point number (3 + 10./16 + 7./16**2) * 2.0**10, or 3740.0" 所以 :
>>> float.fromhex('0x3.a7p10')
3740.0
然后
>>> float.hex(3740.0)
'0x1.d380000000000p+11' (will give different presentation)
我的问题是如何使用上面的计算公式将 '0x1.d380000000000p+11' 转换为浮点数,以及为什么类方法 float.hex 和类方法 float.fromhex 给出不同的表示。
谢谢....
'0x1.d380000000000p+11'
表示(1 + 13./16 + 3./16**2 + 8/16**3) * 2.0**11
,等于3740.0
。要转换此结果,您可以再次 运行 float.fromhex('0x1.d380000000000p+11')
which returns 3740.0
。
float.hex
给你一个normalized的表示,也就是说2**x
前面的因子在1到2之间。解释器做了什么, 将二进制表示中的逗号移动一个位置:增加指数(从 10 到 11),以及因子的一半(0x3.a7 / 2 = 0x1.d38
)。
一般来说,在这个归一化表示中,前面的因子在1和基数之间。例如,如果您执行 print(2234.2e-34)
,您将得到 2.2342e-31
。这里的主导因子在 1 到 10 之间,因为 e
对应于 10**x
。
来自 python 文档说 "the hexadecimal string 0x3.a7p10 represents the floating-point number (3 + 10./16 + 7./16**2) * 2.0**10, or 3740.0" 所以 :
>>> float.fromhex('0x3.a7p10')
3740.0
然后
>>> float.hex(3740.0)
'0x1.d380000000000p+11' (will give different presentation)
我的问题是如何使用上面的计算公式将 '0x1.d380000000000p+11' 转换为浮点数,以及为什么类方法 float.hex 和类方法 float.fromhex 给出不同的表示。
谢谢....
'0x1.d380000000000p+11'
表示(1 + 13./16 + 3./16**2 + 8/16**3) * 2.0**11
,等于3740.0
。要转换此结果,您可以再次 运行 float.fromhex('0x1.d380000000000p+11')
which returns 3740.0
。
float.hex
给你一个normalized的表示,也就是说2**x
前面的因子在1到2之间。解释器做了什么, 将二进制表示中的逗号移动一个位置:增加指数(从 10 到 11),以及因子的一半(0x3.a7 / 2 = 0x1.d38
)。
一般来说,在这个归一化表示中,前面的因子在1和基数之间。例如,如果您执行 print(2234.2e-34)
,您将得到 2.2342e-31
。这里的主导因子在 1 到 10 之间,因为 e
对应于 10**x
。