兩個有符號定點數相乘結果將導致兩個符號位,為此dsp處理器一般都設計了硬體控制邏輯,可以直接將乘積結果左移移位,去掉符號位以後再儲存。
兩個16位元定點數相乘得到的是32位定點數,一種處理方法是直接保留32位元乘積,進行後續處理;另一種處理方法是捨棄低16位元,降低精度。
設浮點乘法運算的表示式為:
float x,y,z;
z=xy ;
假設經過統計後x的q值為qx,y的q值為qy,乘積z的q值為qz,則
zq*2^(- qz) = xq* yq*2^(-(qx +qy))
zq=(xq* yq)*2^( qz -(qx +qy))
所以定點表示的乘法為:
int x,y,z;
long temp;
temp=(long)x;
z=(temp×y)>>( qx + qy– qz);
例:q15×q15=q30 0.5×0.5 = 0.25
0.100 0000 0000 0000
×0.100 0000 0000 0000
00.01 0000 0000 0000 0000 0000 0000 0000 = 0.25 ; q30
q14×q14=q28 1.5×0.75=1.125
01.00 0000 0000 0000
×00.11 0000 0000 0000
0001. 0010 0000 0000 0000 0000 0000 0000 = 1.125 ; q28
定點c程式之二 定點加減法
1.定點數表示的基礎 q值。q值就是小數點的位置。16位整形數表示小數 32位整形數表示小數 2.將浮點加減法轉化為定點加減法最重要的是必須保持兩個運算元的q值一致。如果兩者不一致,一般地,為了保證數的精度,在運算前將q值小的數調整為與q值大的數的q值,同時必須注意是否溢位。設x的q值為qx,y的q...
c 程式設計師修煉真經之三
談一下跨平台網路通訊應用程式的設計,第一種呢就是用預編譯巨集,在不同的巨集定義下包含不同的標頭檔案,呼叫不同的函式,這個麻煩了點,但好處是直截了當,除錯方便,哪兒個步驟出來問題了然於胸,第二種呢就是用apr啦,標頭檔案呢應該是象這樣 include include include include i...
c語言小程式之三子棋
第一次寫這麼長的程式,再此總結一下。首先考慮test.c的功能 1 main函式內實現乙個遊戲介面,用乙個迴圈可以讓遊戲一直迴圈進行,並且再迴圈內部使用分支用來選擇開始遊戲or退出遊戲。2 寫乙個menu函式,作用是列印遊戲選單介面。3 寫乙個game函式,主要在函式內部呼叫各個步驟的函式,實現乙個...