【问题标题】:Divide number of bits exponent and mantissa位数除以指数和尾数
【发布时间】:2019-07-27 01:31:57
【问题描述】:

按照标准,如果我们要将浮点数转换为 32 位二进制,我们使用 1 位作为符号,8 位作为指数,另外 23 位作为尾数。

假设我们不想转换为 32 位,而是转换为 15、23 或任何其他数字。 是否有规则或方法可以“划分”转换良好的位数?

例如:如果我们说我们要将给定的浮点数转换为 15 位,我们需要多少位来转换指数和尾数?

【问题讨论】:

  • 有几种格式,这里有例子注明en.wikipedia.org/wiki/Minifloat
  • 如果您想对比率 exponent_bits / significand_bits 提出建议,我认为没有标准,甚至没有经验法则。这在很大程度上取决于您需要的精度和范围。需要极高的精度:有效数字更多位。需要一个很大的范围:指数的更多位。当然,您可以查看现有的 IEEE 或其他定义的类型并将其用作指南。但@EricPostpischil 是对的:硬件支持的类型(大多数时候 IEEE-754 单和双)通常快得多
  • FWIW,编写自己的浮点类型版本会很有趣。但是,如果您需要性能或快速解决方案,请不要这样做,如果您想从中学习就可以这样做。或者,如果您想要一个始终在各种平台上提供一致结果的库(至少有一个 IEEE-754 float32 和 float64 类型的纯软件实现正是为此目的,IIRC)。

标签: floating-point binary converters


【解决方案1】:

按照标准,有“半精度”浮点,大小为 16 位。

标准是IEEE 754:

它定义了各种不同的格式,但不是15、23等。

如果您要定义自己的格式,本质上是设计决定使用多少位作为指数。

该标准定义了一种 16 位格式(半精度),它使用 10 位作为尾数(有效 3 位小数)和 5 位作为允许范围为 +-65500 的指数。

这是一个示例 16 位格式,它使用不同位数的尾数。它实际上只有 2 位小数精度,但涵盖与单精度基本相同的值范围。这使得它可用于半精度的不同目的:

下面是另一个 16 位格式和 8 位格式的示例:

这是一个没有符号位的 11 位和 10 位浮点数的示例。这些仅用于存储图像,因此它们不需要负值。他们使用 5 位作为尾数,以便轻松转换为半精度,这是显卡内部使用的:

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2020-12-20
    • 2012-03-12
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多