Sqrt inverso para ponto fixo
Estou procurando o melhor algoritmo de raiz quadrada inversa para números de ponto fixo 16.16. O código abaixo é o que tenho até agora (mas basicamente ele pega a raiz quadrada e divide pelo número original, e eu gostaria de obter a raiz quadrada inversa sem uma divisão). Se mudar alguma coisa, o código será compilado para armv5te.
uint32_t INVSQRT(uint32_t n)
{
uint64_t op, res, one;
op = ((uint64_t)n<<16);
res = 0;
one = (uint64_t)1 << 46;
while (one > op) one >>= 2;
while (one != 0)
{
if (op >= res + one)
{
op -= (res + one);
res += (one<<1);
}
res >>= 1;
one >>= 2;
}
res<<=16;
res /= n;
return(res);
}