【问题标题】:7 bits encoding of floating point values?浮点值的 7 位编码?
【发布时间】:2015-03-23 12:12:51
【问题描述】:

浮点值(IEEE 32 和 64 位)使用编码 固定长度的大端编码(7 位用于避免使用保留的 0xFF 等字节):

这些段落来自Smile Format spec(一种类似于 JSON 的二进制格式)。

这意味着什么?是否有一些标准方法来编码IEEE floating point(单精度和双精度),以便编码字节在 0-127 范围内?

更笼统地说:我相信,在标准二进制表示中,没有保留或禁止的字节值,IEEE 浮点数可以包含 256 个可能的字节中的任何一个。当然,是否有任何标准的二进制编码(或技巧)以使某些字节值永远不会出现(例如,在字符串的 UTF8 编码中,有一些禁止的字节值,如 0xFF)?

(我猜这意味着要么失去一些精度,要么使用更多字节。)

【问题讨论】:

  • 我希望“使用更多字节”而不是“使用更多位”。如果您只使用每字节 7 位,则与使用每字节 8 位相比,您需要更多的字节来适应 64 位。
  • @PatriciaShanahan:嗯,我猜“使用 7 位”实际上意味着将字节限制在 0-127 范围内(将 MSB 保持为零)。但是,是的,最终这意味着使用更多字节。

标签: encoding floating-point


【解决方案1】:

我不知道这种格式的细节,但它看起来像是一种数据结构的序列化。当然,由于最终结果是字节流,因此您应该能够从其他一些元数据中识别出一个值。可能他们使用第 7 位作为特殊位,因此应避免任何误解字节值。这就是将 IEEE fp 编号沿(五个,单个)字节“传播”的原因,其中实际上仅使用 7 位作为值。

我应该阅读格式规范,所以我试图“推断”他们将要做什么。然而,这种编码在低级(例如嵌入式)编程中比较常见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2012-09-22
    相关资源
    最近更新 更多