我需要一個算法來做C中的無符號定點除法。我最多可以使用32位字。定點無符號除法C
我想盡量減少表示整數部分所需的位數,同時可以使用[0..15]範圍內的數字。所以顯然最小的比特數是4.問題是我發現的算法只能使用5比特。因爲它將餘數與除數進行比較,然後將餘數進行移位直至大於除數,如果除數具有最高有效位1,則該算法將不做任何操作,而是移位餘數(它永遠不會更大)。這裏的代碼:
int divu(int a, int b){
int pt_int, r, pt_frac=0;
int i;
pt_int = ((unsigned) a/b) << BITS_FRAC;
r = (unsigned) a%b;
for (i=BITS_FRAC; i>=0; i--){
if ((unsigned) r < b)
r <<= 1;
else{
r -= b;
pt_frac += 01 << i;
r <<= 1;
}
}
return pt_int + pt_frac;
}
如果你有一個解決方案,但不想了解代碼,請發佈它。 :)
例子:
我們希望在2,這將導致0.75分1.5。假設我們使用整數部分的4位和分數的28位。所以,我們的數字是十六進制是:
1.5: 0x18000000
2: 0x20000000
result: 0x0c000000
這氣味像功課 – 2011-12-14 14:47:06
我不明白的問題。你能提供一個示例輸入,以及預期的和實際的輸出。 – 2011-12-14 14:55:03
如果你想分解無符號的值,你能做的最少就是在你的函數聲明中這麼說。 – unwind 2011-12-14 15:12:38