下面是一个简单的方法来计算的整数平方根:按位整数立方根算法
int isqrt(int num)
{
int root=0;
int b = 0x8000;
int a=0, c=0;
while (b) {
c = a|b;
if (c*c <= num)
a |= b;
b >>= 1;
}
}
巧(感谢Wikipedia),这可以优化这样的:
int sqrt(short num)
{
int op = num;
int res = 0;
int one = 1 << 30;
while (one > op)
one >>= 2;
while (one != 0) {
if (op >= res + one) {
op -= res + one;
res = (res >> 1) + one;
}
else
res >>= 1;
one >>= 2;
}
return res;
}
我的问题:可以为整数立方根编写一个类似优化的算法吗? (这是在一个小型微控制器上运行,它不喜欢乘法运算)
不是我所知道的,但可以通过添加7,19,37,61等来产生连续整数的第三幂,并且可以通过添加12,18,24,30,36等来获得这些数字。它并不是特别聪明或者快速,但是考虑到2^32的整数立方根仍然只有1625,所以它不应该进行很多次迭代(所有这些迭代都由一对加法和一个比较组成,没有细节)。 编辑:所以原来有一种方法。很高兴知道! – harold