定點c程式之三 乘法

2022-01-10 00:38:25 字數 755 閱讀 6583

兩個有符號定點數相乘結果將導致兩個符號位,為此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函式,主要在函式內部呼叫各個步驟的函式,實現乙個...