matlab实现浮点转定点,浮点转定点方法总结.doc
浮點轉(zhuǎn)定點方法總結(jié)
浮點轉(zhuǎn)定點方法總結(jié)
—孔德琦
目錄
定點運算方法3
1.1 數(shù) 的 定 標3
1.2c語言:從浮點到定點4
1.2.1 加法4
1.2.2乘法6
1.2.3除法7
1.2.4 三角函數(shù)運算8
1.2.5 開方運算9
1.3 附錄10
1.3.1 附錄1:定點函數(shù)庫10
1.3.2附錄2:正弦和余弦表28
定點運算方法
1.1 數(shù) 的 定 標
對某些處理器而言,參與數(shù)值運算的數(shù)就是16位的整型數(shù)。但在許多情況下,數(shù)學運算過程中的數(shù)不一定都是整數(shù)。那么,如何處理小數(shù)的呢?應該說,處理器本身無能為力。那么是不是就不能處理各種小數(shù)呢?當然不是。這其中的關鍵就是由程序員來確定一個數(shù)的小數(shù)點處于16位中的哪一位。這就是數(shù)的定標。
通過設定小數(shù)點在16位數(shù)中的不同位置,就可以表示不同大小和不同精度的小數(shù)了。數(shù)的定標用Q表示法。表1.1列出了一個16位數(shù)的16種Q表示能表示的十進制數(shù)值范圍和近似的精度。
Q表示精度(近似)十進制數(shù)表示范圍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表示及數(shù)值范圍
從表1.1可以看出,同樣一個16位數(shù),若小數(shù)點設定的位置不同,它所表示的數(shù)也就不同。例如:
16進制數(shù)2000H=8192,用Q0表示
16進制數(shù)2000H=0.25,用Q15表示
從表1.1還可以看出,不同的Q所表示的數(shù)不僅范圍不同,而且精度也不相同。Q越大,數(shù)值范圍越小,但精度越高;相反,Q越小,數(shù)值范圍越大,但精度就越低。例如,Q0的數(shù)值范圍是-32768到+32767,其精度為1,而Q15的數(shù)值范圍為-1到0.9999695,精度為 1/32768 = 0因此,對定點數(shù)而言,數(shù)值范圍與精度是一對矛盾,一個變量要想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價;而想提高精度,則數(shù)的表示范圍就相應地減小。在實際的定點算法中,為了達到最佳的性能,必須充分考慮到這一點。
浮點數(shù)與定點數(shù)的轉(zhuǎn)換關系可表示為:
浮點數(shù)(x)轉(zhuǎn)換為定點數(shù)():
定點數(shù)()轉(zhuǎn)換為浮點數(shù)(x):
例如,浮點數(shù) x=0.5,定標 Q=15,則定點數(shù)=,式中表示下取整。反之,一個用 Q=15 表示的定點數(shù)16384,其浮點數(shù)為16384×2-15
=16384/32768=0.5。
c語言:從浮點到定點
下面所描述的幾種基本運算是浮點到定點轉(zhuǎn)換中經(jīng)常遇到的,從中可以體會到一些基本的技巧和方法。
1.2.1 加法
設浮點加法運算的表達式為:
float x,y,z;
z=x+y;
將浮點加法/減法轉(zhuǎn)化為定點加法/減法時最重要的一點就是必須保證兩個操作數(shù)的定標值一樣。若兩者不一樣,則在做加法/減法運算前先進行小數(shù)點的調(diào)整。為保證運算精度,需使Q值小的數(shù)調(diào)整為與另一個數(shù)的Q值一樣大。此外,在做加法/減法運算時,必須注意結(jié)果可能會超過16位表示,即數(shù)的動態(tài)范圍。如果加法/減法的結(jié)果超出16位的表示范圍,則必須保留32位結(jié)果,以保證運算的精度。
結(jié)果不超過16位表示范圍
設x的Q值為Qx,y的Q值為Qy,且Qx>Qy,加法/減法結(jié)果z的定標值為Qz,則
z=x+y (
=
= (
一般情況,我們?nèi),y和z的定標值相同,即Qx = Qy = Qz = Qa 。
所以定點加法可以描述為:
short x, y, z ; //Qa
z = add (x,y); //Qa
函數(shù)add ( ) 有防飽和機制,如果可以確信x + y 不會溢出(-2^15 <= z < = 2^15-1),可以直接寫為 z = x + y .
定點減法:
short x, y, z ; //Qa
z = sub (x,y); //Qa
函數(shù)sub ( ) 有防飽和機制,如果可以確信x - y 不會溢出(-2
總結(jié)
以上是生活随笔為你收集整理的matlab实现浮点转定点,浮点转定点方法总结.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中常用的运算符和表达式有哪几种,p
- 下一篇: emlog过滤html,Emlog 搜索