欢迎来到天天文库
浏览记录
ID:15197721
大小:43.50 KB
页数:5页
时间:2018-08-01
《定点补码一位乘的运算方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、定点补码一位乘的运算方法:按乘数为正、负两种情况讨论:1.被乘数[x]补符号任意,乘数[y]补为正设[x]补=x0.x1x2…xn[y]补=y0.y1y2…yn根据补码定义可推得:[x]补=2+x=2n+1+x(MOD2)[y]补=y=0.y1y2...yn其中x,y为真值.故:[x]补[y]补=(2n+1+x)*y=2n+1+xy=21*2n(0.y1y2...yn)+xy=2(y1y2...yn)+xy•注意0.y1y2...yn被2n乘已成为正整数.根据模的运算性质有:2(y1y2...yn)=2(mod2)所以[x]p*[y]p=2+x*y=
2、[x*y]补(mod2)即[x*y]p=[x]p*[y]p=[x]p*y(因为ys=0为正)=[x]p*(0.y1y2...yn)(1)当乘数y>0,不管x的符号如何,将[x]p*y=[x*y]p2.被乘数[x]p符号任意,乘数y为负[x]补=x0.x1x2…xn[y]补=1.y1y2…yn=2+y(mod2)该项得:y=[y]补-2=1.y1y2…yn-2=1+0.y1y2...yn-2=0.y1y2...yn-1所以x*y=x*(0.y1y2...yn-1)=x*(0.y1y2...yn)-x将上式两边取补所以有:[x*y]p=[x(0.y1y2
3、...yn)-x]p=[x(0.y1y2...yn)]p-[x]p=[x(0.y1y2...yn)]p+[-x]p因为(0.y1y2...yn)>0正数的补码=本身所以[x(0.y1y2...yn)]p=[x]p*(0.y1y2...yn)所以[x*y]p=[x]p*(0.y1y2...yn)-[x]p(2)将(1)和(2)综合起来:得统一的算式[x*y]p=[x]p*(0.y1y2...yn)-[x]p*y0(3)=[x]p*(-y0+0.y1y2...yn)分析:右边第二项[x]p*y0当y为正y0=0该项不存在(1)y为负y0=1该项为[x]p
4、(2)将(3)式展开,推出逻辑实现分步算法:获得各项部分积的累加形式.[x*y]p=[x]p*(0.y1y2...yn)-[x]p*y0=[x]p*(2-1y1+2-2y2+…+2-nyn)-[x]p*y0=[x]p*[-y0+(y1-2-1y1)+(y22-1-2-2y2)+…+(2-(n-1)yn-2-nyn)=[x]p*[(y1-y0)+(y2-y1)2-1+…+(yn-yn-1)2-(n-1)+(yn+1-yn)2-n]说明:(1)0.y1y2...yn可写成2-1y1+2-2y2+…+2-nyn(2)提公因式[x]p将-y0提前(3)去括号
5、重新组合(4)y1-2-1y1=(20-2-1)y1=(1-1/2)y1=0.5yy22-1-y22-2=(2-1-2-2)*y2=2-2y2[x*y]补=[x]补*(0.y1y2...yn)-[x]补*y0=[x]补*(2-1y1+2-2y2+…+2-nyn)-[x]补*y0=[x]补*[-y0+(y1-2-1y1)+(y22-1-2-2y2)+…+(2-(n-1)yn-2-nyn)=[x]补*[(y1-y0)+(y2-y1)2-1+…+(yn-yn-1)2-(n-1)+(yn+1-yn)2-n]将[x]p乘进去,然后从第2项开始,每次提2-1=(
6、y1-y0)[x]p+(y2-y1)2-1[x]p+…+(yn+1-yn)2-n[x]p=(y1-y0)[x]p+2-1[(y2-y1)[x]p+(y3-y2)2-1[x]p+(y4-y3)2-2[x]p…+(yn+1-yn)2-(n-1)[x]p]1=(y1-y0)[x]p+2-1{(y2-y1)[x]p+2-1[(y3-y2)[x]p+(y4-y3)2-1[x]p…+(yn+1-yn)2-(n-2)[x]p]2}1=(y1-y0)[x]p+2-1{(y2-y1)[x]p+2-1{(y3-y2)[x]p+2-1[(y4-y3)[x]p…+(yn+1
7、-yn)2-(n-3)[x]p]3}2}1…………………=(y1-y0)[x]p+2-1{(y2-y1)[x]p+2-1{(y3-y2)[x]p+2-1{(y4-y3)[x]p…+2-1{(yn-yn-1)[x]p+2-1[(yn+1-yn)[x]pn]n}n-1…}3}2}1说明:式中yn+1是增设的附加位,初始值位0.ai取决于相邻两位乘数的比较结果显然(4)式就是部分积累加的形式若定义[p0]补位初始部分积=0.[p1]补……[pn]补依次位各步求得的累加并右移后的部分积.将(4)改写:更接近于分步运算逻辑实现[x*y]p=[x]p*[(y1-
8、y0)+(y2-y1)2-1+…+(yn-yn-1)2-(n-1)+(yn+1-yn)2-n]将[x]p乘进
此文档下载收益归作者所有