python中浮点数的十六进制字符串表示
Posted
技术标签:
【中文标题】python中浮点数的十六进制字符串表示【英文标题】:Hexadecimal string representation to floating number in python 【发布时间】:2018-01-17 10:28:28 【问题描述】:从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】:'0x1.d380000000000p+11'
表示(1 + 13./16 + 3./16**2 + 8/16**3) * 2.0**11
,等于3740.0
。要转换此结果,您可以运行float.fromhex('0x1.d380000000000p+11')
,它会再次返回3740.0
。
float.hex
给你一个规范化 表示,这意味着2**x
前面的因子在 1 和 2 之间。解释器所做的是移动二进制表示中的逗号增加一位:增加指数(从 10 到 11)和一半的因子(0x3.a7 / 2 = 0x1.d38
)。
一般来说,在这个规范化表示中,前面的因子在1和基数之间。例如,如果您执行print(2234.2e-34)
,您将得到2.2342e-31
。这里的主导因子在 1 到 10 之间,因为 e
对应于 10**x
。
【讨论】:
是转换结果是使用 float.fromhex 但我的问题是如何使用“第一个公式”进行转换 (3 + 10./16 + 7./16**2) * 2.0* *10,我还是不明白....谢谢 数字 13、3 和 8 是从哪里来的(除以 16 的数字)......? 好的,我知道 13、3 和 8 来自哪里...谢谢 嗨@WiraBhakti,如果这个答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。以上是关于python中浮点数的十六进制字符串表示的主要内容,如果未能解决你的问题,请参考以下文章