首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到最简单的人类可读的浮点数字符串,它将在转换回浮点数时产生相同的字节?

如何找到最简单的人类可读的浮点数字符串,它将在转换回浮点数时产生相同的字节?
EN

Stack Overflow用户
提问于 2019-07-16 05:32:17
回答 1查看 284关注 0票数 2

对于大多数数字,我们知道任何浮点值都会有一些精度误差。对于32位浮点数,计算出大约6个有效位数,这些数字在你开始看到不正确的值之前是准确的。

我正在尝试存储一个人类可读的值,这个值可以被读取并重新创建一个对序列化值的稍微准确的重新创建。

例如,值555.5555存储为555.55548095703125;但是当我序列化555.55548095703125时,理论上可以将其序列化为范围(555.5554504395, 555.555511475) (排他的)中的任何东西,并且仍然得到相同的字节模式。(实际上,这可能不是确切的范围,我只是不知道现在更准确地计算它是否有价值。)

我想要的是为这个值找到最可读的字符串表示--我想这是最少的数字--它将被反序列化为相同的IEEE浮点数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 05:32:17

这个问题最初是在1990年用一种叫做“龙”的算法解决的:https://dl.acm.org/citation.cfm?id=93559

去年有一种更现代的技术,叫做“龙”(日语中“龙”的日文):https://dl.acm.org/citation.cfm?id=3192369

库的GitHub在这里:https://github.com/ulfjack/ryu

根据他们的自述:

Ryu生成一个保持往返安全的浮点数的最短十进制表示。也就是说,正确的解析器可以恢复准确的原始数字。例如,考虑二进制64位浮点数00111110100110011001100110011010.存储值精确为0.300000011920928955078125。然而,这个浮点数也是最接近十进制数0.3的数字,所以这就是Ryu输出的内容。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57050586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档