据我所知,归一化的尾数是一个分数尾数,其中它是更重要的位,等于1/2的那个总是1.这样做是为了避免在系统上重复表示相同的数字。
但是如果Mantissa使用2的补语或1的补语系统会发生什么。在这种情况下,如果数字为负,强制该位为1将导致该位具有空值,使其无法实现其目的。另一个解决方案是在数字为负数的情况下强制它为0,但我想这可能会变得复杂。这让我想到,一个具有标准化2或1的补码尾数的系统是否存在?如果它们存在,它们如何工作?
具有2或1的补码尾数的浮点系统是否可以归一化?
是的 - 所有类型的编码都是可能的。已经尝试了许多浮点编码 - 甚至可能是具有2或1的补充尾数的编码。然而,最受欢迎的浮点格式包含符号,无符号有效数和指数。
澄清一些(错误的)理解:
标准化的尾数是一个分数尾数,其中它是更重要的位,等于1/2的那个,总是1
注意:最好使用有效数/有效数而不是尾数。
像binary64这样的浮点格式区分了signifcand的值和它的编码。
有效数字m
的值是53位 - 通常被认为是二进制数,如B.bbb ... bbb。较低的52是直接编码的。最重要的一个B
来源。当偏置指数不为0时,最高有效位为1(正常数字)。否则它是0(次正常数字)。
该值的最高有效位并不总是1.编码的52位值的最高有效位也不总是1。
由于正常数字的最高位始终为1,因此该位不会被编码。它通常被认为具有1而不是1/2的值。虽然可以使用1/2,然后还需要调整许多描述格式的其他常量。
这样做是为了避免在系统上重复表示相同的数字。
是的 - 但间接的。良好的浮点格式的目标是以最小的空间编码许多不同的值。任何重复的陈述都会降低效率。没有或很少重复的表示是空间效率目标的结果。
但是如果Mantissa使用2的补语或1的补语系统会发生什么。在这种情况下,如果数字为负,强制该位为1将导致该位具有空值,使其无法实现其目的。
这很奇怪,因为“尾数”,signicand是无符号的。然而,让我们将符号位和符号组合在一起作为符号大小的“尾数”,就像sB.bbb...bbb
一样。将其更改为某种54位2的补码意味着导出的B
对于正数为1而对于负数为0。是的,强制B
为1是一个糟糕的设计选择,它都不是必需的。
另一个解决方案是在数字为负数的情况下强制它为0,但我想这可能会变得复杂。
是的,对于正常数字的负数,它将为0。没有过于复杂的问题阻止了物理实现 - 实际上非常微不足道。然而,这种替代方法没有显示出价值。如果你有一大笔钱来实现具有强大浮点能力的下一个处理器 - 你会打赌常见的符号幅度浮点格式还是尝试2的补码?
...是否存在具有标准化2或1的补码尾数的系统?
随着内存服务,这已实现。然而,对于minor或主要原因,今天常见的浮点格式不使用2的补码有效数。达尔文的技术压力导致了标志级浮点主导了整个行业。关键事件导致了IEEE 754-1985的问题。这详细说明了浮点的许多角落 - 但也是为了反映当时领先的硬件制造商目标。 2或1的补码尾数以及许多其他浮点格式missed the boat。