织梦 旅游网站模板,教育网站制作下载,wordpress去除google,太原新站优化浮点转定点方法总结浮点转定点方法总结—孔德琦目录定点运算方法31.1 数 的 定 标31.2c语言#xff1a;从浮点到定点41.2.1 加法41.2.2乘法61.2.3除法71.2.4 三角函数运算81.2.5 开方运算91.3 附录101.3.1 附录1#xff1a;定点函数库101.3.2附录2#xff1a;正弦和余弦表28…浮点转定点方法总结浮点转定点方法总结—孔德琦目录定点运算方法31.1 数 的 定 标31.2c语言从浮点到定点41.2.1 加法41.2.2乘法61.2.3除法71.2.4 三角函数运算81.2.5 开方运算91.3 附录101.3.1 附录1定点函数库101.3.2附录2正弦和余弦表28定点运算方法1.1 数 的 定 标对某些处理器而言参与数值运算的数就是16位的整型数。但在许多情况下数学运算过程中的数不一定都是整数。那么如何处理小数的呢应该说处理器本身无能为力。那么是不是就不能处理各种小数呢当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。通过设定小数点在16位数中的不同位置就可以表示不同大小和不同精度的小数了。数的定标用Q表示法。表1.1列出了一个16位数的16种Q表示能表示的十进制数值范围和近似的精度。Q表示精度(近似)十进制数表示范围Q150.00002-1≤X≤0.9999695Q140.00005-2≤X≤1.9999390Q130.0001-4≤X≤3.9998779Q120.0002-8≤X≤7.9997559Q110.0005-16≤X≤15.9995117Q100.001-32≤X≤31.9990234Q90.002-64≤X≤63.9980469Q80.005-128≤X≤127.9960938Q70.01-256≤X≤255.9921875Q60.02-512≤X≤511.9804375Q50.04-1024≤X≤1023.96875Q40.08-2048≤X≤2047.9375Q30.1-4096≤X≤4095.875Q20.25-8192≤X≤8191.75Q10.5-16384≤X≤16383.5Q01-32768≤X≤32767表1.1 Q表示、S表示及数值范围从表1.1可以看出同样一个16位数若小数点设定的位置不同它所表示的数也就不同。例如16进制数2000H8192用Q0表示16进制数2000H0.25用Q15表示从表1.1还可以看出不同的Q所表示的数不仅范围不同而且精度也不相同。Q越大数值范围越小但精度越高相反Q越小数值范围越大但精度就越低。例如Q0的数值范围是-32768到32767其精度为1而Q15的数值范围为-1到0.9999695精度为 1/32768 0因此对定点数而言数值范围与精度是一对矛盾一个变量要想能够表示比较大的数值范围必须以牺牲精度为代价而想提高精度则数的表示范围就相应地减小。在实际的定点算法中为了达到最佳的性能必须充分考虑到这一点。浮点数与定点数的转换关系可表示为浮点数(x)转换为定点数()定点数()转换为浮点数(x)例如浮点数 x0.5定标 Q15则定点数式中表示下取整。反之一个用 Q15 表示的定点数16384其浮点数为16384×2-1516384/327680.5。c语言从浮点到定点下面所描述的几种基本运算是浮点到定点转换中经常遇到的从中可以体会到一些基本的技巧和方法。1.2.1 加法设浮点加法运算的表达式为float x,y,z;zxy;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。若两者不一样则在做加法/减法运算前先进行小数点的调整。为保证运算精度需使Q值小的数调整为与另一个数的Q值一样大。此外在做加法/减法运算时必须注意结果可能会超过16位表示即数的动态范围。如果加法/减法的结果超出16位的表示范围则必须保留32位结果以保证运算的精度。结果不超过16位表示范围设x的Q值为Qxy的Q值为Qy且QxQy加法/减法结果z的定标值为Qz则zxy ( (一般情况我们取x,y和z的定标值相同即Qx Qy Qz Qa 。所以定点加法可以描述为short x, y, z ; //Qaz add (x,y) //Qa函数add ( ) 有防饱和机制如果可以确信x y 不会溢出(-2^15 z 2^15-1)可以直接写为 z x y .定点减法:short x, y, z ; //Qaz sub (x,y) //Qa函数sub ( ) 有防饱和机制如果可以确信x - y 不会溢出(-2