算法原理
每次将1位乘数所对应的部分积与原部分积的“累积和”相加,并移位
设置寄存器
- 存放部分积累积和、乘积高位
- 存放被乘数
- 存放乘数、乘积低位
法则
乘积的数值位俩数绝对值之积;符号位 位 俩数符号位进行异或,即 p= x ⊕ y
步骤
- 设部分积z=0
- 乘数最低位为1 ,z+|x|;
乘数最低位为0 ,z+0 - 部分积和乘数同时右移1位
- 重复上述步骤
例子
x=0.1101 ,y =0.1011,求x*y
笔算过程
计算机中过程
得到|x| 和 |y|
操作 | 高位部分积 | 低位部分积/乘数 | 丢失部分 | 说明 |
---|---|---|---|---|
初始 | 00.0000 | 1011 | ||
00.1101(被乘数) | 1011 | 开始乘1011 中的最低位 | ||
相加 | 00.1101 | 1011 | ||
整体右移,是包括高位和低位 | 00.0110 | 1101 | 1 | |
00.1101 | 1101 | 开始乘1011 中的倒数第二位 | ||
相加 | 01.0011 | 1101 | 1 | |
整体右移,是包括高位和低位 | 00.1001 | 1110 | 11 | |
00.0000 | 1110 | 11 | 开始乘1011 中的倒数第三位0 | |
相加 | 00.1001 | 1110 | 11 | |
整体右移,是包括高位和低位 | 00.0100 | 1111 | 011 | |
00.1101 | 1111 | 011 | 开始乘1011 中的最后一个 1 | |
相加 | 01.0001 | 1101 | 011 | |
整体右移,是包括高位和低位 | 00.1000 | 1111 | 1011 |
最后得到的高位+ 低位是 00.10001111
符号位有 x和y的符号位确定 ,0 异或 0 =0
最后 x*y = 0.10001111