替代C中的模运算

时间:2013-12-28 18:38:04

标签: c kernel modulo

我需要在内核中使用模运算,这会减慢速度。我不可能删除它。基本上我有一个%b,其中b不是2的幂。有没有办法避免使用它?

1 个答案:

答案 0 :(得分:1)

您可以预取答案并使用查找表吗? 而不是

c = a%b;
然后你可以尝试

c = table[a][b];

必须对签名和表格化进行一些考虑。 根据整体用例,您可以将此表移动到更高级别,并删除更多只有这一次计算。

modulo的自定义实现将使用它的定义

(a/b)*b + a%b == a; //true
a%b == a - (a/b)*b // true

根据a和b的可能值,您可以尝试优化它。

根据您的目标硬件,您可以尝试查看是否有可以解决特定产品的快速硬件解决方案。 (见this

可能会有更多解决方案。