在我的通用库中添加了将定点数字打印为十六进制的功能,并且意识到我不是%100知道我应该如何表示数字的小数部分。快速的Google搜索建议我应该:
如此处建议https://bytes.com/topic/c/answers/219928-how-convert-float-hex
[在纸上测试此方法后,我注意到某些分数(即。7),这导致。B3333的重复模式,依此类推。在我看来,这是非常不可取的。我还想知道,如果我尝试将其从字符串读取为定点格式,是否会导致精度下降。
有人为什么不像其他十六进制数字那样打印分数部分吗?即17535.564453打印为447F.89CE5
的地方也许这两种方法还有另一种选择。有什么想法吗?
由于浮点数在内部是二进制的,所以不能精确表示0.7。这样您就不会得到无限的重复。您将得到准确的53位(14个十六进制数字为4 * 14 = 56位,所以这是限制)。实际上,将浮点数写为十六进制的主要原因是获得真实值的精确表示。
将十六进制的十进制分数好像是一个整数本质上是没有意义的(例如,您丢掉了多少个前导零?),即使您将数字写为0x447F + 0x89CE5 / 0xF4240,实际上也不会捕获精确值,该精确值是分母为2的幂的分数。