浮点加法解释

时间:2012-08-27 17:15:42

标签: floating-point

我正在学习浮点加法,我在一个部分感到困惑。我正在使用的例子是这样的:

(假设8位机器,指数超过-3)

x = 6.75 = 01011011
y = -10 = 11100100

反规范并使用相同的指数给出:

x = 1.1011 x 2^2 = 0.1101 x 2^3
y = -1.0100 x 2^3

添加/减去mantissas给出:

01101 + -10100 = -00111

我不知道如何01101 + -10100 = -00111。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:5)

首先,缩放1.1011•2 2 应给出0.11011•2 3 ,而不是0.1101•2 3 。提前丢弃比特是错误的。

然而,考虑到它的方式,我们想要计算01101 + -10100。将较大的数字放在较小的数字上方并记住,因为较大的数字是负数,结果必须是负数:

1 0 1 0 0
0 1 1 0 1
_________

现在减去小学的方式。在右边,我们从0减去1.这需要从左边的数字借用,所以我们从10减去1(0加上借来的值)并标记借用:

1 0 1 0'0
0 1 1 0 1
_________
        1

现在我们从-1减去0(0减去借位)。这需要再次借用,所以我们从1减去0(0减去1的借位加上新借的10):

1 0 1'0'0
0 1 1 0 1
_________
      1 1

然后从0开始1(1减去借来的1)。我们再次借用,所以我们从10减去1:

1 0'1'0'0
0 1 1 0 1
_________
    1 1 1

然后从-1开始1(0减去借来的1)。我们再次借用,所以我们从1减去1(0减去借来的1加上新借的10):

1'0'1'0'0
0 1 1 0 1
_________
  0 1 1 1

然后0从0开始(1减去借来的1)。最后,没有新的借款,我们有:

1'0'1'0'0
0 1 1 0 1
_________
0 0 1 1 1

我们记得这是否定的,所以结果是-00111。

答案 1 :(得分:2)

解释它的最简单方法是将它们转换为十进制。

+01101 (base 2) = +13 (base 10)
-10100 (base 2) = -20 (base 10)

-20 + 13 = -7

-7 (base 10) = -00111 (base 2)

答案 2 :(得分:1)

首先,当我在非十进制基础上进行简单的数学运算时,我发现将其转换回十进制以查看正在发生的事情偶尔会有用。

所以,首先,添加数字给我们

6.75 - 10.0 = -3.25

或者二进制,不要过多地担心指数,因为它们是相同的力量

01101 - 10100 = -00111

手动执行此操作的最佳方法是查找

的结果
 10100
-01101

使用常规添加规则,然后反转结果。简言之:

从最左边1借用以执行减法:

 02100
-01101
 _____
 00111

由于最右下方列中的1,我们需要再次借用,类似于以十进制表示。

现在,让我们仔细检查一下这个结果究竟是什么:

-0.0111_2 * 2 ^ 3
实际上是-3.5!之所以如此,是因为将1.1011 x 2 ^ 2视为0.1101 x 2 ^ 3而不是实际值而导致的精度损失,.11011 x 2 ^ 3.