Форум программистов, компьютерный форум CyberForum.ru

Замена sqrt операцией сдвига - C++

Восстановить пароль Регистрация
 
Matwei
 Аватар для Matwei
176 / 140 / 12
Регистрация: 03.11.2012
Сообщений: 1,029
17.11.2014, 11:18     Замена sqrt операцией сдвига #1
Как получить корень из числа без функции SQRT ?
Именно - операцией сдвига...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mss307
17.11.2014, 11:22
  #2

Не по теме:

надо подумать

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2014, 11:28     Замена sqrt операцией сдвига #3
C++
1
for (y=1; x!=1; x>>=2, y<<=1);
что ли? Оригинально.
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
17.11.2014, 11:37     Замена sqrt операцией сдвига #4
как вариант, вот такой колхоз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    unsigned int a = 64;
    unsigned int     tmp1 = a;
    unsigned int     tmp2 = 1;
    while(tmp1)
    {
        tmp1 >>= 1;
        tmp2 <<= 1;
        std::cout << tmp2 << " ? " << tmp1 << std::endl;
        if(tmp2 == tmp1)
        {
            std::cout << tmp2;
            break;
        }
    }
Добавлено через 6 минут
C++
1
2
3
4
5
6
    unsigned int a = 64;
    unsigned int     tmp1 = a;
    unsigned int     tmp2 = 1;
    while(((tmp2 <<= 1) != (tmp1 >>= 1)) && tmp1);
 
    std::cout << tmp2;
только во втором варианте ответ будет неверным, если нет целого корня.

ай, блин, фигню какую-то написал.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2014, 11:44     Замена sqrt операцией сдвига #5
Не только если нет целого корня, но и если под корнем не степень двойки. Корень из 4-х, 16-ти, 64-х, 256-ти посчитает, а из девяти нет.
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
17.11.2014, 11:46     Замена sqrt операцией сдвига #6
taras atavin,
Цитата Сообщение от mss307 Посмотреть сообщение
ай, блин, фигню какую-то написал.
согласен)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2014, 11:50     Замена sqrt операцией сдвига #7
Так ведь у меня та же фигня получилась.
Matwei
 Аватар для Matwei
176 / 140 / 12
Регистрация: 03.11.2012
Сообщений: 1,029
17.11.2014, 12:11  [ТС]     Замена sqrt операцией сдвига #8
Ok, норм.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 13:08     Замена sqrt операцией сдвига
Еще ссылки по теме:

Дано натуральное число n. Вычислить sqrt(2+ sqrt(5 + sqrt(7...)) C++
C++ Вычислить y=sqrt(1+sqrt(4+sqrt(9+.+sqrt(36+sqrt(49)
Найти порядок числа, операцией сдвига C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,121
Записей в блоге: 3
17.11.2014, 13:08     Замена sqrt операцией сдвига #9
Выдрал с SO:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
short isqrt(short num) {
    short res = 0;
    short bit = 1 << 14; // The second-to-top bit is set: 1L<<30 for long
    // "bit" starts at the highest power of four <= the argument.
    while (bit > num)
        bit >>= 2;
    while (bit != 0) {
        if (num >= res + bit) {
            num -= res + bit;
            res = (res >> 1) + bit;
        }
        else
            res >>= 1;
        bit >>= 2;
    }
    return res;
}
Yandex
Объявления
17.11.2014, 13:08     Замена sqrt операцией сдвига
Ответ Создать тему
Опции темы

Текущее время: 16:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru