Вот простой способ вычисления целочисленного квадратного корня:
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;
}
}
Ingeniously (спасибо 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;
}
Мой вопрос: Можно ли написать аналогично оптимизированный алгоритм для целочисленного кубического корня? (Это должно выполняться на небольшом микроконтроллере, который предпочитает не делать умножения)