Floating point 为什么没有比符号和大小更好的浮点表示法?

Floating point 为什么没有比符号和大小更好的浮点表示法?,floating-point,double,twos-complement,Floating Point,Double,Twos Complement,我们有2的整数补码,它允许我们在不担心符号的情况下执行运算。这在实施层面上是一个很大的帮助 类似地,我们有很多浮点运算,但我们依赖符号和大小。原因是什么 为什么像2的补码这样的系统不能用于浮点?对于浮点加法,要做的事情比整数情况下要多得多-您需要移动一个值以使指数匹配。相比之下,符号+幅度相加的任何额外成本都是微不足道的 另外请注意,单独的符号位对于乘法来说要好得多——您只需要一个无符号乘法器,它可以处理符号位单独处理的所有情况。将其与二的补码乘法进行比较,在二的补码乘法中,您要么必须对符号进行

我们有2的整数补码,它允许我们在不担心符号的情况下执行运算。这在实施层面上是一个很大的帮助

类似地,我们有很多浮点运算,但我们依赖符号和大小。原因是什么


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

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


另外请注意,单独的符号位对于乘法来说要好得多——您只需要一个无符号乘法器,它可以处理符号位单独处理的所有情况。将其与二的补码乘法进行比较,在二的补码乘法中,您要么必须对符号进行归一化,要么必须支持有符号/无符号乘法。

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


另外请注意,单独的符号位对于乘法来说要好得多——您只需要一个无符号乘法器,它可以处理符号位单独处理的所有情况。将其与二的补码乘法进行比较,在二的补码乘法中,必须对符号进行归一化,或者支持有符号/无符号乘法。

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

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

你能在这里用两个补码吗?大概但是不能使用相同的规则来操纵表示


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

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

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

你能在这里用两个补码吗?大概但是不能使用相同的规则来操纵表示


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

@Paul R:所以,浮点数优化用于乘法,而2的补码整数优化用于加法。。。我说得对吗?@cambr:是的,这是一种合理的看待方法,尽管在浮点格式和相关硬件的设计中还有许多其他问题implementations@PaulR:所以,浮点数优化用于乘法,而2的补码整数优化用于加法。。。我说得对吗?@cambr:是的,这是一种合理的看待方法,尽管在浮点格式的设计和相关硬件实现中还有许多其他问题