ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1075925 Топик полностью
Andreas (10.02.2021 12:37, просмотров: 246) ответил SciFi на Недавно захотелось кое-где немного ускорить квадратный корень. Оказывается, это очень просто >>>
Откуда взял, не помню, но явно проще 
unsigned long sqrt(unsigned long x)
{
    register unsigned long op, res, one;
    op = x;
    res = 0;

    /* "one" starts at the highest power of four <= than the argument. */
    one = 1ul << 30;  /* second-to-top bit set */
    while (one > op) one >>= 2;

    while (one != 0)
    {
        if (op >= res + one)
        {
            op -= res + one;
            res += one << 1;  // <-- faster than 2 * one
        }
        res >>= 1;
        one >>= 2;
    }
    return res;
}