定点乘法原理
2022/1/17 6:06:00
本文主要是介绍定点乘法原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
定点乘法原理
目录- 定点乘法原理
- 原码一位乘法
- 原码两位乘法
- 补码一位乘法
- 矫正法
- booth公式
- 参考资料
原码一位乘法
原码的一位乘与十进制计算乘法过程类似,只不过在存储方式上有一些技巧。因为两个n位乘数相乘得到的数应该是2n位,但是考虑到每对于乘数的每一位,我们读取并判断后都不会再使用,因此可以将其舍去;而恰好乘数部分需要一个新的位来进行位权的改变,因此我们可以利用乘数寄存器进行辅助存储。同时,移位操作也可以让判断电路固定在一个位置,有利于简化电路。
原码一位乘的具体过程如下图所示
可以看到,C就是乘数寄存器,而A称为部分积,最后计算完成后合并在一起,再补上符号位则得到原码的乘积
原码两位乘法
原码两位乘的原理也很简单,因为源码实际对于两位的情况只有4中并且不区分正负数,计算方法一致,如下表所示
\(Y_{i+1}Y_i\) | 操作 | 部分积右移 |
---|---|---|
00 | +0 | 1位 |
01 | +X | 1位 |
10 | +2X | 1位 |
11 | +3X | 1位 |
但是上表存在一个问题,他的行为中不变、+X、+2X(移位后加)都可以方便的通过一步完成,但是+3X则需要拆解成两步,如果拆解成两步,那么对硬件设计和程序执行效率都会产生严重的负面影响。
所以我们实际采用的方法是将+3X分解为+4X-X,这样的话就能解决这个问题了,因为+4X又可以通过左移两位快速实现。
现在的问题变为-X怎么处理,当即再做一次加法显然不合适,因此我们引入一个标志位C进行存储,C=1表示我们欠下一个+4X,这样下一次计算时计算机就会补上一个+4X。进行右移2位后,+4X就变成了+X,因此计算大大简化了。
那么我们就可以将操作表扩展成如下模式
\(Y_{i+1}Y_i \ C\) | 部分积 | C置数 | 部分积右移 |
---|---|---|---|
000 | +0 | \(0 \rightarrow C\) | 2位 |
001 | +X | \(0 \rightarrow C\) | 2位 |
010 | +X | \(0 \rightarrow C\) | 2位 |
011 | +2X | \(0 \rightarrow C\) | 2位 |
100 | +2X | \(0 \rightarrow C\) | 2位 |
101 | -X | \(1 \rightarrow C\) | 2位 |
110 | -X | \(1 \rightarrow C\) | 2位 |
111 | +0 | \(1 \rightarrow C\) | 2位 |
最后给出一个例子:
补码一位乘法
矫正法
booth公式
参考资料
https://wenku.baidu.com/view/b43fe4fd0242a8956bece412.html
https://blog.csdn.net/qq_42898299/article/details/118446418
https://blog.csdn.net/qq_45757722/article/details/111466747
这篇关于定点乘法原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南