下面是一個簡單的方法來計算的整數平方根:按位整數立方根算法
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