【问题标题】:Exactly how is fixed point more accurate than floating point究竟如何定点比浮点更准确
【发布时间】:2019-05-29 23:02:21
【问题描述】:

我(认为)我了解二进制小数的定点和浮点表示。但是,我经常看到定点被描述为更精确且范围更小,而浮点被描述为更不准确且范围更大。现在,如果我理解正确,浮点不准确源于它不能表示 0.1 以及许多其他实数 = 我认为定点有同样的问题,那么它如何被描述为更“准确”。如果我没记错的话,冯诺依曼似乎也支持这个想法,并说我们不应该使用浮点数而是固定的,但是为什么?

【问题讨论】:

  • 你也不能用定点精确地表示 0.1,这与浮动与固定无关。
  • @ElliotAlderson:定点和浮点都不一定是基于二进制的。 0.1 可以用基于十进制的定点和浮点格式表示。
  • @EricPostpischil 同意,但 OP 专门询问“二进制”的定点和浮点表示。

标签: floating-point fixed-point


【解决方案1】:

当使用 32 位进行浮点表示时,它们通常被划分为 1 位用于编码符号,8 位用于编码指数,以及 23 位用于有效数的主要编码。由于对指数的一些特殊处理,完整有效数有 24 位。在这种格式中,浮点数的分辨率是 223 的 1 部分,也就是说,改变低位会使表示的值改变 2-23 倍高位的值。

当使用32位进行定点表示时,高位通常用于表示符号,因此最高值位次之,它代表230的值低位。因此,使用这种格式,定点数的分辨率是 230 的 1 部分。

因此,使用相同的位数,定点比浮点具有更高的分辨率。即使对于哪些部分使用多少位有其他选择,浮点需要使用一些位作为指数,而定点使用零,因此定点总是比浮点具有更精细的分辨率。

浮点提供动态范围,这意味着它可以通过改变指数作为计算的一部分来处理大数或小数。定点只有静态范围——它可以表示大数或小数,但在设计代码时必须选择范围。 (在某种程度上,这可以被巧妙地处理,例如通过为输入值选择一个小范围,然后随着值相加而增加范围以形成越来越大的总和或其他结果。但是,每个特定计算的比例必须在设计时选择。)如果您需要更高的分辨率并且不需要动态范围,则使用定点。如果您需要动态范围并且不需要更高的分辨率,则使用浮点。如果两者都需要,请使用更多位。

请注意,固定比例意味着定点有时会不如浮点准确。浮点数调整其比例以将前导数字移动到高位,直至其指数范围的限制。因此,它以上述格式将分辨率保持在 223 中的 1 左右。但是固定点被设计时选择的比例所困扰。如果它需要表示一个大小落在定点格式的第 2 位的数字,那么它对该数字的分辨率只有大约 2 分之 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多