如何在两个浮点数上执行浮点运算?

时间:2013-02-18 23:02:07

标签: math floating-point

假设我想添加,减去和/或乘以以下格式的以下两个浮点数:

  

1位符号

     

3位指数(偏差3)

     

6位尾数

有人能简单解释一下我会怎么做吗?我尝试在线搜索有用的资源,但我找不到任何太直观的东西。但是,我知道程序通常应该非常简单。作为一个例子,这里有两个我想要执行三个操作的数字:

  

0 110 010001

     

1 010 010000

1 个答案:

答案 0 :(得分:3)

首先,取有效数字编码并在其前面加上“1”,然后用符号位确定的符号写出结果。因此,对于您的示例数字,我们有:

+1.010001
-1.010000

然而,它们具有不同的尺度,因为它们具有不同的指数。第二个的指数比第一个小指数小(010 2 与110 2 相比)。所以将它向右移动四位:

+1.010001
- .0001010000

现在两个有效数字具有相同的比例(指数110 2 ),因此我们可以在二进制中执行常规算术:

+1.010001
- .0001010000
_____________
+1.0011000000

接下来,将有效位数舍入到可用位(七位)。在这种情况下,尾随位为零,因此舍入不会改变任何内容:

+1.001100

此时,如果大于2(10 2 )或小于1,我们可以有一个需要更多移位的有效数。但是,这个有效数字正好在我们想要的地方,在1和2之间。因此我们可以保持指数不变(110 2 )。

将符号转换回位,从有效数字中取出前导“1”,并将这些位放在一起:

0 110 001100

如果数字溢出或低于正常指数范围,则会出现异常,但这些都不会发生。