gpt4 book ai didi

serialization - 如何找到最简单的人类可读的浮点字符串,该字符串在转换回浮点时会产生相同的字节?

转载 作者:行者123 更新时间:2023-12-02 19:55:56 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

这正是 1990 年最初通过创建者称为“Dragon”的算法解决的问题: https://dl.acm.org/citation.cfm?id=93559

去年有一种更现代的技术,速度明显更快,称为“Ryu”(日语“龙”):https://dl.acm.org/citation.cfm?id=3192369

该库的 GitHub 位于:https://github.com/ulfjack/ryu

根据他们的自述:

Ryu generates the shortest decimal representation of a floating point number that maintains round-trip safety. That is, a correct parser can recover the exact original number. For example, consider the binary 64-bit floating point number 00111110100110011001100110011010. The stored value is exactly 0.300000011920928955078125. However, this floating point number is also the closest number to the decimal number 0.3, so that is what Ryu outputs.

关于serialization - 如何找到最简单的人类可读的浮点字符串,该字符串在转换回浮点时会产生相同的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57050586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com