如何找到最简单的、人类可读的浮点型字符串,该字符串在转换回浮点型时会产生相同的字节? [英] How to find the simplest human-readable float string which would yield the same bytes when converted back to float?

查看:19
本文介绍了如何找到最简单的、人类可读的浮点型字符串,该字符串在转换回浮点型时会产生相同的字节?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我正在尝试存储一个人类可读的值,该值可以读入并重新创建位准确的序列化值。

例如,值555.5555被存储为555.55548095703125;但是当我序列化555.55548095703125时,理论上我可以将它序列化为(555.5554504395, 555.555511475)(独占)范围内的任何内容,并且仍然得到相同的字节模式。(实际上,这可能不是准确的范围,我只是不知道目前更准确地计算它有什么价值。)

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

推荐答案

这个问题最初是在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的输出。

这篇关于如何找到最简单的、人类可读的浮点型字符串,该字符串在转换回浮点型时会产生相同的字节?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆