定点数和浮点数(六)

上文介绍了用浮点数进行加减运算的方法和步骤。

做而论道的结论就是:

 浮点数的加减计算,都是用定点整数进行的。

 无论数值 N 是否含有小数,在计算过程中,并没有小数的参与。

---------------------

本文,再介绍一下 “浮点数做乘除” 时的计算过程。

还是使用上文中的两个数值: 

  N1 = -100.625、N2 = 100.5。

这两个数相乘,乘积,应该是:N1 * N2 = -10112.8125。

这两个数字的 32 位浮点数的二进制形式如下。

 N1:1100 0010 1100 1001 0100 0000 0000 0000;

 N2:0100 0010 1100 1001 0000 0000 0000 0000。

---------------------

两个数相乘的运算规则,大家都知道:

 两符号位相异或,作为乘积的符号位;

 两个绝对值相乘,作为乘积的绝对值;

 两个指数相加,作为乘积的指数。

下面,就按照这些规则,分别计算一下吧。

---------------------

乘积的符号位,显然是 1 了,它代表了负号(-)。

---------------------

求乘积的绝对值,要用到 N1、N2 的绝对值。

在上文中,已经求出这两个数的绝对值,分别是:

 N1 的绝对值:1 100 1001 0100 0000 0000 0000;

 N2 的绝对值:1 100 1001 0000 0000 0000 0000。

它们都是 24 位二进制数,均含有 23 位小数。

将这两个绝对值以【无符号数】相乘之后,乘积则为 48 位二进制数:

 10011110  00000011  01000000  00000000  00000000  00000000。

注意:在这 48 位数中,是含有 46 位小数的,整数是最前两位。

为了符合单精度浮点数的规范,截取前 24 位。

(可能会造成误差? 不管那些了!)

再标注上小数点,这就是乘积的绝对值:

 10.01 1110  0000 0011  0100 0000。

把小数点左移一位,这才符合单精度浮点数的写法:

 1.001 1110 0000 0011 0100 0000。

把整数隐含起来吧。

那么,在小数点后面的 23 位二进制数,就是【乘积的尾数】。

  001 1110 0000 0011 0100 0000。

注意:在此处,把小数点左移了一位。

那么,在计算出阶码后,应该加上 1,以保证数值不变。

---------------------

浮点数的阶码,都是指数(e)的移码,单精度浮点数的偏移量是 7F。

用两个移码相加来求乘积的移码,偏移量就重复了。

因此,在相加时,应该减去一个偏移量。

所以有:E = E1 + E2-7F = 85 + 85-7F = 8BH。

又因为在前面把小数点左移了一位,此处应加一。

故此,N1 × N2 的阶码,就是:8CH = 1000 1100B。

---------------------

算到此处,就把 N1 × N2 的三个组成部分,都求出来了。

把它们组合在一起,就是乘积的浮点数:

 1 1000 1100 001 1110 0000 0011 0100 0000

这个浮点数,正好就是:-10112.8125 的浮点数。

感兴趣的朋友可以逆推一下,就可以验证本文介绍的方法是正确的。

---------------------

由上面的介绍可知,用浮点数做乘除运算,也是用定点数来计算的。

运算过程中所用的,都是整数。

虽然,曾考虑到小数的位数,但是,并没有使用小数来计算。

另一个关键点是:在求绝对值时,是用【无符号数】相乘来求出的。

综上所述,本文的结论就是:

 浮点数的乘除运算,符号位仅有一次异或而已。

 其余的计算,都是无符号整数来计算的。

 小数的算法? 都是不存在的!

那么,在《计算机组成原理》中介绍的 “原码(及补码)的乘除法”、“小数的乘除法”,还有什么意义呢?

不可思议啊! 

本文完。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值