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

Вычислить квадратный корень из заданного целого числа, используя только побитовые операции - C++

Восстановить пароль Регистрация
 
Ирина123
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 28
24.09.2011, 17:39     Вычислить квадратный корень из заданного целого числа, используя только побитовые операции #1
Существует простой способ вычисления квадратного корня: квадратный корень
из целого числа равен количеству последовательных целых чисел (начиная с 1),
которое можно из него вычесть. Например, вычислим корень из 25:
_25
1
1-е целое нечетное число;
---
_24
3
2-е -----"--------"-----;
---
_21
5
3-е -----"--------"-----;
---
_16
7
4-е -----"--------"-----;
---
_9
9
5-е -----"--------"-----;
---
0
Итак, квадратный корень из 25 равен 5.
Вычислить квадратный корень из целого числа m.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2011, 17:39     Вычислить квадратный корень из заданного целого числа, используя только побитовые операции
Посмотрите здесь:

Вводится число X>1 и точность e. Вычислить с заданной точностью квадратный корень введенного числа X, не пользуясь функцией SqRt. C++
C++ Помогите пожалуйста!Написать программу, используя только побитовые операции. Представить исходные данные и/или результаты в двоичном виде
Вычислить с заданной точностью квадратный корень введенного числа X, не пользуясь функцией SqRt C++
Модуль целого числа без используя только + - * / % C++
C++ Вычислить с заданной точностью квадратный корень введенного числа X
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.09.2011, 18:54     Вычислить квадратный корень из заданного целого числа, используя только побитовые операции #2
Честно говоря, пока не знаю как полностью заменить все операции на побитовые (добавить, конечно, просто, но все заменить...), но ваш алгоритм можно так реализовать:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
long Sqrt(long a)
{
   long i = 0, n = 1;
   while (a - n >= 0)
   {
      a -= n;
      n += 2;
      i++;
   }
   return i;
}
 
int main()
{
   printf("%ld\n", Sqrt(100));
   getchar();
   return 0;
}
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
25.09.2011, 00:59     Вычислить квадратный корень из заданного целого числа, используя только побитовые операции #3
Как-то так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
 
int add(int a, int b) {
    do {
    int x = a & b;
    int y = a ^ b;
    a = x << 1;
    b = y;
  } while (a);
  return b;
}
 
int sub(int a, int b) {
  return add(a, add(~b, 1)); // a = a + (~b + 1)
}
 
int sqareRoot(int n) {
  int i = 1;
  int count = 0;
  while (sub(n, i) >= 0) {
    n = sub(n, i);
    count = add(count, 1);
    i = add(i, 2);
  }
  return count;
}
 
int main(int argc, char *argv[]) {
  int m = 25;
  std::cout << sqareRoot(m) << std::endl;
    return 0;
}
Представление в двоичном виде сделаете самостоятельно, благо можно скопипастить из тысяч тем.
Ирина123
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 28
25.09.2011, 13:15  [ТС]     Вычислить квадратный корень из заданного целого числа, используя только побитовые операции #4
Спасибо Вам, но не могли бы Вы это как раз программно показать, представление в двоичной виде, в этом и проблема вся..
Yandex
Объявления
25.09.2011, 13:15     Вычислить квадратный корень из заданного целого числа, используя только побитовые операции
Ответ Создать тему
Опции темы

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