1

据我了解,归一化尾数是一个分数尾数,其中它的有效位更高,等于 1/2 的那个总是 1。这样做是为了避免在系统上重复表示相同的数字。

但是如果尾数使用 2 的补码或 1 的补码系统会发生什么。在这种情况下,如果数字为负,则强制该位为 1 将导致该位具有空值,使其无法实现其目的。另一种解决方案是在数字为负的情况下将其强制为 0,但我想它的物理实现可能会变得复杂。这让我想,是否存在具有标准化 2 或 1 补码尾数的系统?如果它们存在,它们是如何工作的?

4

1 回答 1

0

可以对具有 2 或 1 补码尾数的浮点系统进行归一化吗?

是的——所有类型的编码都是可能的。已经尝试过许多浮点编码 - 甚至可能是带有 2 或 1 的补码尾数的编码。然而,最流行的浮点格式包含符号、无符号有效数和指数。


澄清一些(错误)理解:

归一化尾数是小数尾数,其中它是更重要的位,等于 1/2,始终为 1

注意:使用significand/significant比使用mantissa更好。

像binary64这样的浮点格式区分了有效位的值和它的编码。

有效数字的值m是 53 位 - 通常被认为是 B.bbb...bbb 的二进制数。较低的 52 位直接编码。最重要的一个B是派生的。当偏置指数不为 0 时,最高有效位为 1(正常数)。否则为 0(次正常数)。

该值的最高有效位并不总是 1。编码的 52 位值的最高有效位也不总是 1。

由于正常数字始终具有最高有效位 1,因此该位未编码。通常认为它的值为 1 而不是 1/2。不过可以使用 1/2,然后也需要调整许多其他描述格式的常量。

这样做是为了避免在系统上重复表示相同的数字。

是的——但间接的。一个好的浮点格式的目标是用最小的空间编码许多不同的值。任何重复的表示都会降低这种效率。没有或很少重复表示是空间效率目标的结果

但是如果尾数使用 2 的补码或 1 的补码系统会发生什么。在这种情况下,如果数字为负,则强制该位为 1 将导致该位具有空值,使其无法实现其目的。

这很奇怪,因为“尾数”,signicand 是无符号的。然而,让我们将符号位和有效数字组合在一起作为符号幅度“尾数” sB.bbb...bbb。将其更改为某种 54 位 2 的补码意味着派生B的正数为 1,负数为 0。是的,强制B为 1 是一个糟糕的设计选择,也不是必需的。

另一种解决方案是在数字为负的情况下将其强制为 0,但我想它的物理实现可能会变得复杂。

是的,在正常数字为负数的情况下,它将为 0 。不存在阻止物理实现的过于复杂的问题 - 真的很微不足道。然而,这种替代方法没有明显的价值。如果您有一大笔钱来实现具有出色浮点能力的下一个处理器 - 您会押注常见的符号幅度浮点格式还是尝试 2 的补码格式?

...是否存在具有标准化 2 或 1 补码尾数的系统?

由于记忆,这是实施的。然而,出于次要 或主要的原因,当今常见的浮点格式不使用 2 的补码有效位。达尔文式的技术压力导致符号幅度浮点在行业中占据主导地位。关键事件导致了IEEE 754-1985的发布。这详细说明了浮点的许多方面——但也是为了反映当时领先的硬件制造商的目标。2 或 1 的补码尾数以及许多其他浮点格式都错过了

于 2017-12-21T18:45:26.090 回答