专题八之一-定点数的运算v2013_第1页
专题八之一-定点数的运算v2013_第2页
专题八之一-定点数的运算v2013_第3页
专题八之一-定点数的运算v2013_第4页
专题八之一-定点数的运算v2013_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、定点数的运算定点数的运算4.6小节,小节,Page 228定点数的表示定点数的表示n有符号数都以有符号数都以2的补码表示的补码表示n最高位为符号位最高位为符号位n整数部分比特数为整数部分比特数为m,小数部分为,小数部分为n当没有小数部分当没有小数部分-整数整数以以16bit为例,如果表示整数,大小顺序如下:为例,如果表示整数,大小顺序如下:0 x7FFF 32767 0 x0000 00 xFFFF -1 0 x8000 -32768整数的表示整数的表示nm-bit有符号定点整数表示的数据范围:有符号定点整数表示的数据范围: nm-bit无符号定点整数表示的数据范围:无符号定点整数表示的数据范

2、围:n能够表示能够表示 个数个数n在有限位的情况下,数据范围有限在有限位的情况下,数据范围有限m21201m12211mm定点数的表示定点数的表示n同样数值的数可以用不同同样数值的数可以用不同bit的二进制数表的二进制数表示示(6)10011000000110(-5)10101111111011n用更多位表示有符号数时,用更多位表示有符号数时,左边填充符号左边填充符号位位整数的算术运算整数的算术运算n加减运算加减运算无符号数无符号数 2+900101001+1011有符号数有符号数 2+(-7)00101001+1011整数的算术运算整数的算术运算n乘法运算乘法运算无符号数无符号数 2x900

3、101001x001000000000001000010010整数的算术运算整数的算术运算n乘法运算乘法运算有符号数有符号数 2x(-7)00101001x001000000000111011110010符号位乘法,符号位乘法,取补码!取补码!整数的算术运算整数的算术运算n乘法运算乘法运算n处理器必须知道是进行有符号还是无符号处理器必须知道是进行有符号还是无符号数的运算,才能给出正确结果数的运算,才能给出正确结果扩展扩展n可以用不同位数的二进制数表示同一个数可以用不同位数的二进制数表示同一个数值值无符号数无符号数8bit)00000000 10010110(16bit

4、)有符号数有符号数 -10610010110(8bit)11111111 10010110(16bit)n无符号数的扩展,高位补无符号数的扩展,高位补0。n有符号数的扩展,高位补有符号数的扩展,高位补符号位符号位扩展扩展n可以用不同位数的二进制数表示同一个数可以用不同位数的二进制数表示同一个数值值无符号数无符号数8bit)00000000 10010110(16bit)有符号数有符号数 -10610010110(8bit)11111111 10010110(16bit)移位移位(shift)n可以通过左移一位完成可以通过左移一位完成x2n可以通过右移一位完成可以通过右

5、移一位完成/2无符号数无符号数151 10010111 101001011 75有符号数有符号数-105 10010111 101001011 7511001011 -53逻辑右移逻辑右移算术右移算术右移定点数表示的小数定点数表示的小数n小数点后面的位数称为小数点后面的位数称为Q值值(小数,小数,n个比特个比特)n小数点前面的位数称为小数点前面的位数称为S值值(整数,整数,m个比特个比特)n相应的表示定点小数的格式称为相应的表示定点小数的格式称为S1Q15、S2Q14、S3Q13等等(有时也称有时也称Qm.n)n或简称或简称Q15、Q14、Q13格式的定点数格式的定点数n用于表示数据的总比特数

6、为:用于表示数据的总比特数为:m+n,其中包,其中包含一个符号比特(包含在含一个符号比特(包含在m个比特中)个比特中)定点数表示的小数定点数表示的小数n以以S1Q15为例,大小顺序如下:为例,大小顺序如下:0 x7FFF0 x00010 x00000 xFFFF0 x80010 x8000-1-1+2(-15)-2(-15)02(-15)1-2(-15)整数数值整数数值/215定点数表示的小数定点数表示的小数n数据范围与精度数据范围与精度S1Q15格式格式范围范围精度精度S2Q14S3Q13SmQn1521114222152142132n213244nmm22211定点数表示的小数定点数表示的

7、小数n定点小数的数据范围与数据精度有限定点小数的数据范围与数据精度有限n需要在范围与精度间做折中需要在范围与精度间做折中n在能够表示范围的情况下选择尽量大的在能够表示范围的情况下选择尽量大的Q值,值,从而获得更大的精度从而获得更大的精度n需要考虑运算过程中间数据的范围需要考虑运算过程中间数据的范围定点数表示的小数定点数表示的小数n将小数表示成定点数形式的方法将小数表示成定点数形式的方法选择合适的选择合适的Q值,即小数部分的比特数值,即小数部分的比特数n将小数将小数 ,然后取整数部分,然后取整数部分0.54321 X215=17799.90542取整后取整后17800=0 x4588=(0100

8、010110001000)b=0.543212890625nx2Q15格式格式定点数表示的小数定点数表示的小数-2.5467 X213=-20862.5664取整后取整后-20863=0 xAE81=(1010111010000001)b=-2.5467529296875Q13格式格式定点小数的运算定点小数的运算n加减运算加减运算0.25+ (-0.75)00101010-0.511000.5+ (-1.5)-1001010101100定点小数的运算定点小数的运算n处理器的运算规则与处理器的运算规则与Q值无关值无关n由程序员确定解释计算过程中的数据由程序员确定解释计算过程中的数据n但需要注意,

9、请在加,减运算前对齐小数但需要注意,请在加,减运算前对齐小数点点 !定点小数的运算定点小数的运算n乘法运算乘法运算0.25x (-0.75)-0.18750010X 1010000000100000111011110100.小数点位置小数点位置定点小数的运算定点小数的运算0.5x (-1.5)-0.750010 Q2X 1010 Q2000000100000111011110100.小数点位置小数点位置定点小数的运算定点小数的运算0.5x (-1.5)-0.50100 Q3X 1010 Q2000001000000110011101000.定点小数的运算定点小数的运算nSa1Qb1xSa2Qb

10、2 = S(a1+a2)Q(b1+b2)n小数运算保存结果时,可以只保存高位部小数运算保存结果时,可以只保存高位部分,从而损失部分精度分,从而损失部分精度n为了保证保存结果的为了保证保存结果的Q值,可能需要将乘积值,可能需要将乘积左移左移1位再保存位再保存(a1+a2中两个符号位中两个符号位)nDSP提供了将乘积自动左移提供了将乘积自动左移1位的功能位的功能例子:1.78 x 0.6 +2.43 = ?n估计使用的定点数格式:估计使用的定点数格式:1278.1因此,因此,S2Q14或或Q14,m=2,n=14026.0因此,因此,S1Q15或或Q15,m=1,n=15因此,因此,S3Q13或或

11、Q13,m=3,n=132243.24498.343.26.078.1x最后计算结果:最后计算结果:因此,结果可采用因此,结果可采用Q13!任何小数可以使用多种格式表示n1.78可以使用Q14格式表示(16bit):n还可以使用Q12格式(16bit):n还可以使用S2Q30格式(32bit)n其中整数部分比特决定数据范围数据范围,小数部分决定数据表示的精度精度!)710_(52.291631638478.1278.114EBxxx)710_(88.7290409678.1278.112BCxxx)851710_(.721911260446278.130EEBxx采用Q13格式计算:1.78x

12、0.6+2.43n表示两个乘数(Q13):n两个定点小数相乘n所以,乘法结果为S6Q26,总共32bit,其中小数部分26bit,整数部分4bit,符号2bi1278.113xx491581926.026.013xx)21()21(2211*bbaababaQSQSQS)4459B0200_(71670530491514582xx已完成1.78x0.6,继续后面的+2.43n由于后面的2.43使用S3Q13格式表示,所以,必须先将32位乘积通过移位方式保留为S3Q13的16bit存放格式,以便完成加法!n分两步来说明:n乘积结果71670530(0 x04459b02

13、)左移1位保存高16bit,得到S5Q11格式;n再将左移2bit,得到S3Q13, 8748n注意,因为我们知道成绩结果可以用Q13存放!否则上面的操作将导致溢出错误!完成最后的加法,n2.43用Q13表示n两个加数都是Q13,小数点位置相同,可以完成加法运算:n该结果转换为对应的小数:n整个过程都使用的整数运算整数运算操作指令!19907243.213x286551990787484979.3228655131.78x0.6+2.43的C程序代码:/* short - 16 bit, long - 32 bit */main() short a=1.78*8192; b=0.6*8192;

14、 c=2.43*8192; short d; d=(short)(long)a * (long)b *2) 16) *4) +c; printf(“The result is %fn”,d/8192.);溢出溢出n如果计算结果超出数据表示范围,则产生如果计算结果超出数据表示范围,则产生溢出溢出n溢出以后的结果与实际结果相差甚远溢出以后的结果与实际结果相差甚远n可能向正、负两个方向溢出可能向正、负两个方向溢出0110+ 001110010.75+ 0.3751.125-0.875溢出溢出1010+ 11010111-0.75+ -0.375-1.1250.875从计算结果中已经无法确定实际结果从

15、计算结果中已经无法确定实际结果应该是什么应该是什么每次算术运算,每次算术运算,CPU可以设置溢出可以设置溢出标志标志溢出溢出n信号处理算法中由于具有连续的乘累加运信号处理算法中由于具有连续的乘累加运算,因此容易出现溢出算,因此容易出现溢出n计算过程应该保证不产生溢出,或者溢出计算过程应该保证不产生溢出,或者溢出后能做正确的处理后能做正确的处理n定点定点DSP为溢出处理提供了各种机制为溢出处理提供了各种机制溢出溢出n为了确保不产生溢出,可以将需要累加的为了确保不产生溢出,可以将需要累加的数据缩小数据缩小n这种方式会导致精度损失这种方式会导致精度损失溢出溢出n在每次加减运算后,判断是否溢出。如果在

16、每次加减运算后,判断是否溢出。如果发生溢出,可以将输入数据缩小后,重新发生溢出,可以将输入数据缩小后,重新计算。计算。n极大降低计算效率极大降低计算效率溢出溢出n采用饱和的方法,得到一个最接近正确结采用饱和的方法,得到一个最接近正确结果的结果果的结果n对对32bit运算,如果向正方向溢出,结果设运算,如果向正方向溢出,结果设置成置成0 x7FFF FFFF。如果向负方向溢出,。如果向负方向溢出,结果设置成结果设置成n如果计算中间结果可能溢出,但保证最终如果计算中间结果可能溢出,但保证最终结果不会溢出时,这种方法引入误差结果不会溢出时,这种方法引入误差0 x8000 0000溢出溢出n引入保护位,采用更多的位数计算引入保护位,采用更多的位数计算1111 1010+ 1111 11011111 0111-0.75+ -0.375-1.125-1.125溢出溢出n如果计算中间结果可能溢出,但保证最终如果计算中间结果可能溢出,但保证最终结果不会溢出时,这种方法不会引入误差结果不会溢出时,这种方法不会引入误差n如果最终结果产生溢出,可以通过算术右如果最终结果产生溢出,可以通过算术右移的方式得到正确结果。如将移的方式得到正确结果。如将8bit结果右移结果右移1位后保存位后保存4bit结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论