《DSP芯片的定点运算oln.docx》由会员分享,可在线阅读,更多相关《DSP芯片的定点运算oln.docx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章 DSSP芯片片的定点点运算3.1 数的定标在定点DDSP芯芯片中,采采用定点点数进行行数值运运算,其其操作数数一般采采用整型型数来表表示。一一个整型型数的最最大表示示范围取取决于DDSP芯芯片所给给定的字字长,一一般为116位或或24位。显显然,字字长越长长,所能能表示的的数的范范围越大大,精度度也越高高。如无无特别说说明,本本书均以以16位字字长为例例。DSP芯芯片的数数以2的补码码形式表表示。每每个166位数用用一个符符号位来来表示数数的正负负,0表示数数值为正正,1则表示示数值为为负。其其余155位表示示数值的的大小。因因此二进制数数001100000000000000111b8
2、1995二进制数数111111111111111111000b-4对DSPP芯片而而言,参参与数值值运算的的数就是是16位的的整型数数。但在在许多情情况下,数数学运算算过程中中的数不不一定都都是整数数。那么么,DSSP芯片片是如何何处理小小数的呢呢?应该该说,DDSP芯芯片本身身无能为为力。那那么是不不是说DDSP芯芯片就不不能处理理各种小小数呢?当然不不是。这这其中的的关键就就是由程程序员来来确定一一个数的的小数点点处于116位中中的哪一一位。这这就是数数的定标标。通过设定定小数点点在166位数中中的不同同位置,就就可以表表示不同同大小和和不同精精度的小小数了。数数的定标标有Q表示法法和S表
3、示法法两种。表表3.11列出了了一个116位数数的166种Q表示、SS表示及及它们所所能表示示的十进进制数值值范围。从表3.1可以以看出,同同样一个个16位数数,若小小数点设设定的位位置不同同,它所所表示的的数也就就不同。例例如:16进制制数20000HH81992,用用Q0表示示16进制制数20000HH0.225,用用Q155表示但对于DDSP芯芯片来说说,处理理方法是是完全相相同的。从表3.1还可可以看出出,不同同的Q所表示示的数不不仅范围围不同,而而且精度度也不相相同。QQ越大,数数值范围围越小,但但精度越越高;相相反,QQ越小,数数值范围围越大,但但精度就就越低。例例如,QQ0的数数
4、值范围围是-327768到到+3227677,其精精度为11,而Q115的数数值范围围为-1到0.9999996955,精度度为 11/3227688 = 0.00000030551。因因此,对对定点数数而言,数数值范围围与精度度是一对对矛盾,一一个变量量要想能能够表示示比较大大的数值值范围,必必须以牺牺牲精度度为代价价;而想想提高精精度,则则数的表表示范围围就相应应地减小小。在实实际的定定点算法法中,为为了达到到最佳的的性能,必必须充分分考虑到到这一点点。浮点数与与定点数数的转换换关系可可表示为为:浮点数(x)转转换为定定点数():定点数()转换为为浮点数数(x):例如,浮浮点数xx=0.5
5、,定定标Q15,则则定点数数,式中中表示下下取整。反反之,一一个用QQ15表示示的定点点数1663844,其浮浮点数为为1633842-15163384/327768=0.55。表3.11 QQ表示、SS表示及及数值范范围Q表示S表示十进制数数表示范范围Q15S0.115-1XX0.9999996955Q14S1.114-2XX1.9999993900Q13S2.113-4XX3.9999887799Q12S3.112-8XX7.9999775599Q11S4.111-16X15.999951117Q10S5.110-32X31.999902334Q9S6.99-64X63.998804669
6、Q8S7.88-1288X1277.999609938Q7S8.77-2566X2555.999218875Q6S9.66-5122X5111.988043375Q5S10.5-10224X10223.9968775Q4S11.4-20448X20447.993755Q3S12.3-40996X40995.8875Q2S13.2-81992X81991.775Q1S14.1-163384X163383.5Q0S15.0-327768X3277673.2 高级级语言:从浮点点到定点点在编写DDSP模模拟算法法时,为为了方便便,一般般都是采采用高级级语言(如C语言)来编写写模拟程程序。程程序中所所
7、用的变变量一般般既有整整型数,又又有浮点点数。如如例3.1程序序中的变变量i是整型型数,而而pi是浮浮点数,hamwindow则是浮点数组。例3.11 2256点点汉明窗窗计算inti;floaatpi=3.1141559;floaathammwinndoww2556;for(i=00;iQyy,加法法/减法结结果z的定标标值为QQz,则则zx+y =所以定点点加法可可以描述述为:int x,yy,z;longg teemp;/*临时时变量*/temppy(QQxQz), 若QxQzz(iint)(teemp(QQzQx),若若QxQz例3.22定点加加法设x00.5,y3.11,则浮浮点运算
8、算结果为为zx+yy0.55+3.13.66;Qx115,Qy13,Qz13,则则定点加加法为:x1663844;y253395;tempp2533952)294491;因为z的的Q值为133,所以以定点值值z294491即即为浮点点值z294491/819923.66。例3.33定点减减法设x33.0,y3.11,则浮浮点运算算结果为为zx-y3.00-3.11-0.11;Qx113,Qy13,Qz15,则则定点减减法为:x2445766;y252295;tempp253395;temppx-temmp245576-253395-8199;因为QxxQzz,故 zz(intt)(-8199Q
9、yy,加法法结果zz的定标标值为QQz,则则定点加加法为:int x,y;longg teemp,z;temppy(QQx-Qz),若QxxQzzteemp327767,因因此Qx11,Qy0,Qz0,则定定点加法法为:x3000000;y200000;tempp2000001350000;因为z的的Q值为0,所以以定点值值z=3350000就是是浮点值值,这里里z是一个个长整型型数。当加法或或加法的的结果超超过166位表示示范围时时,如果果程序员员事先能能够了解解到这种种情况,并并且需要要保证运运算精度度时,则则必须保保持322位结果果。如果果程序中中是按照照16位数数进行运运算的,则则超过
10、116位实实际上就就是出现现了溢出出。如果果不采取取适当的的措施,则则数据溢溢出会导导致运算算精度的的严重恶恶化。一一般的定定点DSSP芯片片都设有有溢出保保护功能能,当溢溢出保护护功能有有效时,一一旦出现现溢出,则则累加器器ACCC的结果果为最大大的饱和和值(上溢为为7FFFFH,下下溢为880011H),从从而达到到防止溢溢出引起起精度严严重恶化化的目的的。3.2.2 乘法运运算的CC语言定定点模拟拟设浮点乘乘法运算算的表达达式为:floaat xx,y,z;z = xy;假设经过过统计后后x的定标标值为QQx,y的定标标值为QQy,乘乘积z的定标标值为QQz,则则z = xy = =所以
11、定点点表示的的乘法为为:int x,yy,z;longg teemp;tempp = (loong)x;z = (teempy) (Qxx+Qyy-Qz);例3.55定点乘乘法设x = 188.4,y = 366.8,则则浮点运运算值为为z =18.436.8 = 6777.112;根据上节节,得QQx = 100,Qy = 99,Qz = 55,所以以x = 188841;y = 1888411;tempp = 188841LL;z = (1888411L*1188441)(110+99-5) = 335499832281LL114 = 2116666;因为z的的定标值值为5,故定定点 zz
12、 = 216666即即为浮点点的 zz = 216666/32 = 6677.08。3.2.3 除法运运算的CC语言定定点模拟拟设浮点除除法运算算的表达达式为:floaat xx,y,z;z = x/yy;假设经过过统计后后被除数数x的定标标值为QQx,除除数y的定标标值为QQy,商商z的定标标值为QQz,则则z = x/yy = 所以定点点表示的的除法为为:int x,yy,z;longg teemp;tempp = (loong)x;z = (teemp(QQz-Qx+Qy)/yy;例3.66定点除除法设x = 188.4,y = 366.8,浮浮点运算算值为zz = x/yy = 18.
13、4/336.88 = 0.55;根据上节节,得QQx = 100,Qy = 99,Qz = 115;所所以有x = 188841, y = 1188441;tempp = (loong)188841;z = (1888411L(155-10+9)/1888411 = 308869009444L/1188441 = 1663844;因为商zz的定标标值为115,所所以定点点z = 1663844即为浮浮点 zz = 163384/215= 0.55。3.2.4程序序变量的的Q值确定定在前面几几节介绍绍的例子子中,由由于x、y、z的值都都是已知知的,因因此从浮浮点变为为定点时时Q值很好好确定。在在
14、实际的的DSPP应用中中,程序序中参与与运算的的都是变变量,那那么如何何确定浮浮点程序序中变量量的Q值呢?从前面的的分析可可以知道道,确定定变量的的Q值实际际上就是是确定变变量的动动态范围围,动态态范围确确定了,则则Q值也就就确定了了。设变量的的绝对值值的最大大值为,注注意必须须小于或或等于3327667。取取一个整整数n,使它它满足则有Q = 15-n例如,某某变量的的值在-1至1之间,即即1,因因此n = 00,Q15-n = 155。确定了变变量的就就可以确确定其QQ值,那那么变量量的又是是如何确确定的呢呢?一般般来说,确确定变量量的有两两种方法法:一种种是理论论分析法法,另一一种是统统
15、计分析析法。1理论论分析法法有些变量量的动态态范围通通过理论论分析是是可以确确定的。例例如:(1) 三角函函数,yy = sinn(x)或y = coss(x),由三三角函数数知识可可知,|y|1;(2) 汉明窗窗,y(n) = 0.54-0.446coos22pn/(NN-1),0nN-1。因为为-1coss2pn/(NN-1)1,所以以0.008y(n)1.00;(3)FFIR卷卷积。yy(n)=,设设,且x(n)是模拟拟信号112位量量化值,即即有211,则则211;(4) 理论已已经证明明,在自自相关线线性预测测编码(LPCC)的程程序设计计中,反反射系数数满足下下列不等等式:,i=
16、1,22,p, p为为LPCC的阶数数。2统计计分析法法对于理论论上无法法确定范范围的变变量,一一般采用用统计分分析的方方法来确确定其动动态范围围。所谓谓统计分分析,就就是用足足够多的的输入信信号样值值来确定定程序中中变量的的动态范范围,这这里输入入信号一一方面要要有一定定的数量量,另一一方面必必须尽可可能地涉涉及各种种情况。例例如,在在语音信信号分析析中,统统计分析析时就必必须采集集足够多多的语音音信号样样值,并并且在所所采集的的语音样样值中,应应尽可能能地包含含各种情情况,如如音量的的大小、声声音的种种类(男声、女女声) 等。只只有这样样,统计计出来的的结果才才能具有有典型性性。当然,统统
17、计分析析毕竟不不可能涉涉及所有有可能发发生的情情况,因因此,对对统计得得出的结结果在程程序设计计时可采采取一些些保护措措施,如如适当牺牺牲一些些精度,Q值取比统计值稍大些,使用DSP芯片提供的溢出保护功能等。3.2.5浮点点至定点点变换的的C程序举举例本节通过过一个例例子来说说明C程序从从浮点变变换至定定点的方方法。这这是一个个对语音音信号(0.33kHzz3.44kHzz)进行行低通滤滤波的CC语言程程序,低低通滤波波的截止止频率为为8000Hz,滤滤波器采采用199点的有有限冲击击响应FFIR滤滤波。语语音信号号的采样样频率为为8kHHz,每每个语音音样值按按16位整型型数存放放在inns
18、p.datt文件中中。例3.77 语音音信号8800HHz 119点FIRR低通滤滤波C语言浮浮点程序序#inccludde consst intt leengtth = 1880/*语音音帧长为为1800点222.5mms88kHzz采样*/voidd ffiltter(intt xiin,innt xxoutt,intt n,flooat h); /*滤滤波子程程序说明明*/*199点滤波波器系数数*/stattic flloatt h19=0.0122183354,-0.000900128882,-0.02288118399,-0.00474432339,-0.00458845668,-
19、0.000866925503,0.00644462665,00.155446655,0.2228997944,0.25778833,0.222897794,0.1154446555,0.0644462265,-0.000866925503,-0.00458845668,-0.00474432339,-0.00288818339,-0.000900128882,0.00121183554;stattic innt xx1llenggth+20;/*低通通滤波浮浮点子程程序*/voidd ffiltter(intt xiin,iint xouut,innt nn,flloatt h)int i,j
20、j;floaat ssum;for(i=00;ilenngthh;i+) x1n+ii-1=xiinii;for (i=0;iileengtth;ii+)sum=0.00;for(j=00;jn;jj+) suum+=hjj*xx1ii-j+nn-1;xoutti=(iint)summ;for(i=00;i(n-1);i+) xx1nn-i-2=xinnleengtth-1-i;/*主程程序*/voidd mmainn()FILEE *ffp1,*fpp2;int frramee,inndattallenggth,ouutdaatalenngthh;fp1=foppen(inssp.ddat,
21、rbb);/*输入入语音文文件*/fp2=foppen(outtsp.datt,wwb);/*滤波波后语音音文件*/framme=00;whille(ffeoff(fpp1)=0)framme+;prinntf(frramee=%ddn,frramee);for(i=00;ilenngthh;i+) inndattaii=ggetww(fpp1); /*取一一帧语音音数据*/filtter(inddataa,ouutdaata,19,h);/*调用用低通滤滤波子程程序*/for(i=00;ilenngthh;i+) puutw(outtdattaii,ffp2); /*将滤滤波后的的样值写写入
22、文件件*/fclooseaall();/*关闭闭文件*/retuurn(0);例3.88 语音音信号8800HHz 119点FIRR低通滤滤波C语言定定点程序序#inccludde consst iint lenngthh=1880;voidd ffiltter(intt xiin,innt xxoutt,intt n,intt h);stattic intt hh199=3999,-2966,-9455,-15555,-15003,-2855,21112,50661,775033,84450, 775033,50061,21112,-2855,-15003,-15555,-9455,-296
23、6,3999; /*QQ15*/stattic intt xx1llenggth+20;/*低通通滤波定定点子程程序*/voidd ffiltter(intt xiin,innt xxoutt,intt n,intt h)int i,jj;longg suum;for(i=00;ilenngthh;i+) x1n+ii-1=xinni;for (i=0;iileengtth;ii+)sum=0;for(j=00;j15;for(i=00;i(n-1);i+) xx1nn-i-2=xinnleengtth-i-1;主程序与与浮点的的完全一一样。3.3 DSSP定点点算术运运算定点DSSP芯片片的
24、数值值表示是是基于22的补码码表示形形式。每每个166位数用用1个符号号位、ii个整数数位和115-i个小数数位来表表示。因因此数00000000110.11010000000表示示的值为为=2.6255,这个个数可用用Q8格式(个小小数位)来表示示,它表表示的数数值范围围为-1288+1227.9996,一一个Q88定点数数的小数数精度为为1/2256=0.0004。虽然特殊殊情况(如动态态范围和和精度要要求)必须使使用混合合表示法法,但是是,更通通常的是是全部以以Q155格式表表示的小小数或以以Q0格式式表示的的整数来来工作。这这一点对对于主要要是乘法法和累加加的信号号处理算算法特别别现实
25、,小小数乘以以小数得得小数,整整数乘以以整数得得整数。当当然,乘乘积累加加时可能能会出现现溢出现现象,在在这种情情况下,程程序员应应当了解解数学里里面的物物理过程程以注意意可能的的溢出情情况。下下面讨论论乘法、加加法和除除法的DDSP定定点运算算,汇编编程序以以TMSS3200C255为例。3.3.1 定点乘乘法2个定点点数相乘乘时可以以分为下下列3种情况况:1小数数乘小数数Q15Q155Q300例3.990.55*0.5 = 0.250.10000000000000000000;Q1550.11000000000000000000;Q15500.00100000000000000000000
26、00000000000000000=0.225 ;Q3002个Q115的小小数相乘乘后得到到1个Q300的小数数,即有有2个符号号位。一一般情况况下相乘乘后得到到的满精精度数不不必全部部保留,而而只需保保留166位单精精度数。由由于相乘乘后得到到的高116位不不满155位的小小数精度度,为了了达到115位精精度,可可将乘积积左移11位,下下面是上上述乘法法的TMMS3220C225程序序:LTOOP1;OP11=40000HH(0.5/QQ15)MPYOP22 ;OP22=40000HH(0.5/QQ15)PACSACHHANSS,1;ANSS=20000HH(0.25/Q155)2整数数乘整
27、数数Q0QQ0 = Q00例3.110 17(-5)=-85000000000000001000011=177111111111111111110111=-5111111111111111111111111111111111010010111=-853混合合表示法法许多情况况下,运运算过程程中为了了既满足足数值的的动态范范围又保保证一定定的精度度,就必必须采用用Q0与Q155之间的的表示法法。比如如,数值值1.223455,显然然Q155无法表表示,而而若用QQ0表示示,则最最接近的的数是11,精度度无法保保证。因因此,数数1.223455最佳的的表示法法是Q114。例3.111 1.550.
28、775 = 1.125501.1100000000000000000 = 1.5 ;Q14400.110000000000000000 = 00.755 ;Q14400011.0001000000000000000000000000000000000 = 11.1225;QQ28Q14的的最大值值不大于于2,因此此,2个Q144数相乘乘得到的的乘积不不大于44。一般的,若若一个数数的整数数位为 i位,小小数位为为 j 位,另另一个数数的整数数位为 m 位位,小数数位为 n 位位,则这这两个数数的乘积积为 ( i + mm )位位整数位位和(jj+n)位小小数位。这这个乘积积的最高高16位可可能
29、的精精度为( i + mm )整整数位和和(155-i-m)小数数位。但是,若若事先了了解数的的动态范范围,就就可以增增加数的的精度。例例如,程程序员了了解到上上述乘积积不会大大于1.8,就就可以用用Q144数表示示乘积,而而不是理理论上的的最佳情情况Q113。例例3.111的TMSS3200C255程序如如下:LTOOP1;OPP1 = 60000HH(1.5/QQ14)MPYOP22;OPP2 = 30000HH(0.75/Q144)PACSACHHANSS,1;ANNS24000H(1.1125/Q133)上述方法法为了保保证精度度均对乘乘的结果果舍位,结结果所产产生的误误差相当当于减去
30、去1个LLSB(最低位位)。采用用下面简简单的舍舍入方法法,可使使误差减减少二分分之一。LTOOP1MPYOP22PACADDONEE,14(上舍入入)SACHHANSS,1上述程序序说明,不不管ANNS为正正或负,所所产生的的误差是是1/22 LSSB,其其中存储储单元OONE的的值为11。3.3.2定点点加法乘的过程程中,程程序员可可不考虑虑溢出而而只需调调整运算算中的小小数点。而而加法则则是一个个更加复复杂的过过程。首首先,加加法运算算必须用用相同的的Q点表示示;其次次,程序序员或者者允许其其结果有有足够的的高位以以适应位位的增长长,或者者必须准准备解决决溢出问问题。如如果操作作数仅为为
31、16位长长,其结结果可用用双精度度数表示示。下面面举例说说明166位数相相加的两两种途径径。1保留留32位结结果LACOP11;(QQ15)ADDOP22;(QQ15)SACHHANSSHI;(高16位结结果)SACLLANSSLO;(低16位结结果)2调整整小数点点保留116位结结果LACOP11,155;(QQ14数数用ACCCH表表示)ADDOP22,155;(QQ14数数用ACCCH表表示)SACHHANSS;(QQ14)加法运算算最可能能出现的的问题是是运算结结果溢出出。TMMS3220提供供了检查查溢出的的专用指指令BVV,此外外,使用用溢出保保护功能能可使累累加结果果溢出时时累加
32、器器饱和为为最大的的整数或或负数。当当然,即即使如此此,运算算精度还还是大大大降低。因因此,最最好的方方法是完完全理解解基本的的物理过过程并注注意选择择数的表表达方式式。3.3.3定点点除法在通用DDSP芯芯片中,一一般不提提供单周周期的除除法指令令,为此此必须采采用除法法子程序序来实现现。二进进制除法法是乘法法的逆运运算。乘乘法包括括一系列列的移位位和加法法,而除除法可分分解为一一系列的的减法和和移位。下下面来说说明除法法的实现现过程。设累加器器为8位,且且除法运运算为110除以以3。除的的过程就就是除数逐逐步移位位并与被除数比较的过程,在在每一步步进行减减法运算算,如果果能减则则将位插插入
33、商中中。(1) 除数的的最低有有效位对对齐被除除数的最最高有效效位。0000010010000011100001111100010(2) 由于减减法结果果为负,放放弃减法法结果,将将被除数数左移一一位再减减。0000101100000011100001111110000(3) 结果仍仍为负,放放弃减法法结果,被被除数左左移一位位再减。0011010000000011100000000100000(4) 结果为为正,将将减法结结果左移移一位后后加,作作最后一一次减。0011000001000011100000000010001(5) 结果为为正,将将结果左左移一位位加1得最后后结果。高高位代代表
34、余数数,低44位表示示商。0000100011即商为000111=3,余余数为000011=1。TMS3320没没有专门门的除法法指令,但但使用条条件减指指令SUUBC可可以完成成有效灵灵活的除除法功能能。使用用这一指指令的唯唯一限制制是两个个操作数数必须为为正。程程序员必必须事先先了解其其可能的的运算数数的特性性,如其其商是否否可以用用小数表表示及商商的精度度是否可可被计算算出来。这这里每一一种考虑虑可影响响如何使使用SUUBC指指令的问问题。下下面给出出两种不不同情况况下的TTMS3320CC25除除法程序序。(1) 分子小小于分母母DIV_A:LTNNUMEERAMPYDENNOMPAC
35、SACHHTEMMSGNN;取商的的符号LACDENNOMABSSACLLDENNOM;使分母母为正ZALHHNUMMERAA;使分子子为正ABSRPTKK14SUBCCDENNOM;除循环环15次SACLLQUOOTLACTEMMSGNNBGEZZA1;若符号号为正,则完成成ZACSUBQUOOTSACLLQUOOT;若为负负,则商为为负A1:RRET这个程序序中,分分子在NNUMEERA中中,分母母在DEENOMM中,商商存在QQUOTT中,TEEMSGGN为暂暂存单元元。(2) 规定商商的精度度DIV_B:LTNNUMEERAMPYDENNOMPACSACHHTEMMSGNN;取商的的符
36、号LACDENNOMABSSACLLDENNOM;使分母母为正LACKK15ADDFRAACSACLLFRAAC;计算循循环计数数器LACNUMMERAAABS;使分子子为正RPTFRAACSUBCCDENNOM;除循环环16+FRAAC次SACLLQUOOTLACTEMMSGNNBGEZZB1;若符号号为正,则完成成ZACSUBQUOOTSACLLQUOOT;若为负负,则商为为负B1:RRET与DIVV_A相相同,这这个程序序中,分分子在NNUMEERA中中,分母母在DEENOMM中,商商存在QQUOTT中,TEEMSGGN为暂暂存单元元。FRRAC中中规定商商的精度度,如商商的精度度为Q1
37、13,则则调用程程序前FFRACC单元中中的值应应为133。3.4 非线线性运算算的定点点快速实实现在数值运运算中,除除基本的的加减乘乘除运算算外,还还有其他他许多非非线性运运算,如如对数运运算、开开方运算算、指数数运算、三三角函数数运算等等,实现现这些非非线性运运算的方方法一般般有:(1)调调用DSSP编译译系统的的库函数数;(22)查表表法;(3)混混合法。下下面分别别介绍这这三种方方法。1调用用DSPP编译系系统的库库函数TMS3320CC2X/C5XX 的C编译器器提供了了比较丰丰富的运运行支持持库函数数。在这这些库函函数中,包包含了诸诸如对数数、开方方、三角角函数、指指数等常常用的非
38、非线性函函数。在在C程序中中(也可在在汇编程程序中)只要采采用与库库函数相相同的变变量定义义,就可可以直接接调用。例例如,在在库函数数中,定定义了以以10为底底的常用用对数llog110():inccludde doubble loog100(dooublle xx);在C程序序中按如如下方式式调用:floaat xx,y;x = 10.0;y = logg10(x);从上例可可以看出出,库函函数中的的常用对对数loog100()要求的的输入值值为浮点点数,返返回值也也为浮点点数,运运算的精精度完全全可以保保证。直直接调用用库函数数非常方方便,但但由于运运算量大大,很难难在实时时DSPP中得到
39、到应用。2查表表法在实时DDSP应应用中实实现非线线性运算算,一般般都采取取适当降降低运算算精度来来提高程程序的运运算速度度。查表表法是快快速实现现非线性性运算最最常用的的方法。采采用这种种方法必必须根据据自变量量的范围围和精度度要求制制作一张张表格。显显然输入入的范围围越大,精精度要求求越高,则则所需的的表格就就越大,即即存储量量也越大大。查表表法求值值所需的的计算就就是根据据输入值值确定表表的地址址,根据据地址就就可得到到相应的的值,因因而运算算量较小小。查表表法比较较适合于于非线性性函数是是周期函函数或已已知非线线性函数数输入值值范围这这两种情情况,例例3.112和例例3.113分别别说
40、明这这两种情情况。例3.112已知知正弦函函数y=coss(x),制作作一个5512点点表格,并并说明查查表方法法。由于正弦弦函数是是周期函函数,函函数值在在1至1之间,用用查表法法比较合合适。由于Q115的表表示范围围为11至327767/327768之之间,原原则上讲讲1至1的范围围必须用用Q144表示。但但一般从从方便和和总体精精度考虑虑,类似似情况仍仍用Q115表示示,此时时1用327767来来表示。(1) 产生5512点点值的CC语言程程序如下下所示:#deffinee NN 5512#deffinee ppi 3.1141559int siin_ttab5122;voidd mmainn()int i;for(i=00;iN;ii+) siin_ttabi=(innt)(327767*sinn(2*pi*i/NN); (2) 查表查表实际际上就是是根据输输入值确确定表的的地址。设设输入xx在02p之间,则则x对应于于5122点表的的地址为为:inndexx =