首页 > 解决方案 > 究竟如何定点比浮点更准确

问题描述

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

标签: floating-pointfixed-point

解决方案


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

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

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

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

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


推荐阅读