1. 确定符号位;
这个比较好理解,有一个负数,就是负数,否则,就是正数;
2. 解码相加;
这个也比较好激烈,乘法就是指数相加;
3. 尾数相乘;
这里的乘法,其实已经不涉及有符号数无符号数了,只需要做二进制的乘法就可以了;
4. 规格化处理;
因为乘法会使得位数扩大,比如,两bit数相乘,最终得到最多4bit数,会超出浮点数的表示范围;
如果超出了浮点数的表示范围,则需要进行规格化,左移小数点,这会导致阶码增加;
(以下copy自:计算机系统:浮点数乘法详解-CSDN博客)
浮点数乘法实例
为了更好地理解浮点数乘法算法,我们来看一个具体的例子。
假设有两个单精度浮点数,分别表示为:
A = 0 10000011 10100000000000000000000
B = 1 10000010 11000000000000000000000
首先,我们可以得到乘积的符号位为负,因为两个乘数的符号位不同。
接着,将两个乘数的指数位相加,得到乘积的指数位为:
10000011 + 10000010 = 10000101
然后,将两个乘数的尾数位相乘,得到乘积的尾数位为:
10100000000000000000000 * 11000000000000000000000 = 11110000000000000000000000000000
最后,对乘积进行规格化处理。由于乘积的尾数位长度为27,而单精度浮点数的尾数位长度为23,所以需要进行舍入操作,得到规格化后的尾数位为:
1.11100000000000000000000
相应地,更新乘积的指数位为:(这里怎么理解?可以理解为,超出多少bit(2的幂次方),则小数点移位后,需要在阶码上增加幂次方)
10000101 + 2 = 10000111
因此,乘积表示为:
P = 1 10000111 11100000000000000000000