我需要一个算法来做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