我正在学习浮点加法,我在一个部分感到困惑。我正在使用的例子是这样的:
(假设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。有人可以向我解释一下吗?
答案 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.