//在DSP算法设计中常需要把浮点运算转化成定点运算,为什么在下面的代码中fresult和sresult的的运算结果不等<br />//请高手指教,谢谢!!!!!<br /><br />void fixPiontTest(short *in_data,int n )<br />{<br /> int i;<br /> float fw1,fw2,fw3,fw0,fw;<br /> short sw0,sw1,sw2; <br /> short fresult,sresult;<br /> short w[4];<br /> short fwf[4]; <br /> short x;<br /><br /> <br /><br /> fw0=5625636.482914;<br /> fw1=16796184.027028;<br /> fw2=-16716106.802805;<br /> fw3=5545557.1237500 ;<br /> fw=1.0-((fw1+fw2+fw3)/fw0); <br /> <br /> // fsw0=2.985650;<br /> // fsw1=-2.971416;<br /> // fsw2=0.985765;<br /> <br /> sw0 =(short) ( fw1/fw0 * 8192 ); //Q13<br /> sw1 =(short) ( fw2/fw0 * 8192 ); //Q13<br /> sw2 = (short)( fw3/fw0 * 8192 ); //Q13<br /> w[0]=w[1]=w[2]=in_data[0];<br /> fwf[0]=fwf[1]=fwf[2]=in_data[0];<br /> for(i=0;i<n;i++)<br /> {<br /> x=in_data;<br /> fresult=(short)(x*fw+(fw1*fwf[2]+fw2*fwf[1]+fw3*fwf[0])/fw0);<br /> fwf[0]=fwf[1];<br /> fwf[1]=fwf[2];<br /> fwf[2]=fresult;<br /> sresult=(short)(x + <br /> ((sw0*(w[2]-x)+sw1*(w[1]-x)+sw2*(w[0]-x)) >>13) );<br /> w[0]=w[1];<br /> w[1]=w[2];<br /> w[2]=sresult;<br /> if(fresult!=sresult) printf("f %d,s %d
",fresult,sresult);<br /> }<br />} |
|