为什么没有比符号和幅度更好的浮点数表示方法?

问题描述 投票:0回答:3

我们有整数的 2 补码,它允许我们执行运算而不必担心符号。这对实施层面有很大帮助。

同样,我们有如此多的浮点运算,但我们依赖符号和幅度。原因是什么?

为什么像 2 的补码系统不能用于浮点数?

floating-point double twos-complement
3个回答
4
投票

对于浮点数的加法,与整数情况相比,需要做更多的事情 - 您需要移动一个值以使指数匹配。相比之下,进行符号+幅度相加的任何额外成本都是微不足道的。

另请注意,单独的符号位对于乘法来说要好得多 - 您只需要一个无符号乘法器来处理所有情况,并单独处理符号位。将此与补码乘法进行比较,您必须标准化符号或支持有符号/无符号乘法。


0
投票

如果您深入研究浮点数的标准表示形式,它实际上是一个类似整数的尾数和指数。 我说类似整数,因为标准化时,第一位始终是“1” - 您知道两个数字的乘积将始终以 0 或 1 开头(在前一种情况下,您需要将结果左移并相应地调整指数,但会损失一位精度)。 只要不溢出指数中可以容纳的位数,乘法和除法就可以正常运行。

另一方面,加法和减法需要将表示形式从标准化形式更改为指数匹配的形式。 这就是为什么如果将两个大小相差很大的数字相加或将两个几乎相同的数字相减,就会得到看似奇怪的结果。 这就是为什么中间结果通常比标准 4 字节和 8 字节浮点数和实数具有更多的精度。

你可以在这里使用二进制补码表示法吗? 也许......但你不能使用相同的规则来操纵表示。

我认为这取决于对研究过这个问题的一代又一代专家的信任。 如果数百名博士和首席工程师认为当前的表示是最好的方法,那么我必须相信他们。


0
投票

事实上,这已经不再是事实了。 Posits(又名 Unum III)是(锥形)浮点表示形式,使用 2 的补码表示浮点。虽然大多数实现(目前还没有那么多)将其转换为有符号指数和无符号尾数,但有些实现还利用二进制补码格式来加快计算速度。

还有更新的 Takum 格式(使用基数“e”而不是二进制作为指数)使用 2 的补码编码。

© www.soinside.com 2019 - 2024. All rights reserved.