Обратный sqrt для фиксированной точки

Я ищу лучший алгоритм обратного квадратного корня для чисел с фиксированной запятой 16,16. Код ниже это то, что у меня есть (но в основном он берет квадратный корень и делится на исходное число, и я хотел бы получить обратный квадратный корень без деления). Если это что-то изменит, код будет скомпилирован для 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);
}
5
задан Jonathan 8 June 2011 в 23:31
поделиться