存储浮点的紧凑方式

Compact way to store floating points

提问人:Zachary Peterson 提问时间:7/27/2020 更新时间:7/27/2020 访问量:56

问:

我正在序列化一个字节数组的信息、6 个单独的字节和一个存储为 4 个字节的浮点数,浮点数只需要 x.xxx 位数字(从 0.005 到 1.000)如果可能的话,我如何使用更少的空间进行存储?此外,它是 10 个字节的信息,但由于它是一个数组,它占用了 38 个字节,有没有更有效的方法来序列化和存储它?

数组浮 字节 存储

评论

0赞 Ken Y-N 7/27/2020
你用的是什么语言?假设类似 C,则在显示时使用 a 并除以 1000。通过这样做,您还可以避免浮点舍入问题。short int
2赞 Eric Postpischil 7/27/2020
这个问题一点也不清楚。什么是六个字节,数组中一个元素中的信息?成为“info”的“字节数组”是什么意思?如果“信息”不是六个字节的结构,那么什么是六个字节?通常,a 是四个字节。那么,这是六个字节中的四个吗?“it's 10 bytes of info” 是什么意思;我们只是被告知“信息”是“6 个单独的字节”。“since it's an array it takes up 38 bytes” 是什么意思?没有规则说数组必须占用 38 个字节,那么为什么数组会导致它占用 38 个字节呢?float
1赞 Eric Postpischil 7/27/2020
如果这些值介于 .005 到 1.000 之间,它们是否都是 .005 的(接近)倍数?在这种情况下,只有 200 个可能的值,因此您只需要 8 位来表示它们。若要编码,请乘以 200 并四舍五入到最接近的整数,以允许浮点问题。要解码,请除以 200。

答:

0赞 Geek1999 7/27/2020 #1

struct ShortFloat { short beforeFloatingPoint : 4, afterFloatingPoint : 10 };- 2^4 > 10、2^10 > 1000,您可以使用 2 个字节来存储这种“短”浮点数,对于算术,您可以覆盖运算,这是如果您使用 C++。