Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Ирина123
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 28
#1

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

24.09.2011, 17:39. Просмотров 853. Ответов 3
Метки нет (Все метки)

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

Функции. побитовые операции. Написать функцию, которая для заданного целого числа Х вычисляет количество единичных битов в этом числе
Здравствуйте, уважаемые мастера программирования. Нуждаюсь в вашей помощи....

Можно ли взять корень квадратный из целого числа без остатка?
Как унать, возможно ли вынести корень из числа а?

Вычислить корень квадратный не используя стандартных функций
Делаю лабу в универе и появилась проблема. Как можно добыть корень не...

Вычислить квадратный корень из произвольного числа
Вычислить квадратный корень из произвольного числа, используя метод Ньютона...

Вычислить квадратный корень введенного пользователем числа
Написал небольшую программку, которая ищет квадратный корень из числа, которое...

3
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 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;
}
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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;
}
Представление в двоичном виде сделаете самостоятельно, благо можно скопипастить из тысяч тем.
0
Ирина123
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 28
25.09.2011, 13:15  [ТС] #4
Спасибо Вам, но не могли бы Вы это как раз программно показать, представление в двоичной виде, в этом и проблема вся..
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2011, 13:15

Помогите пожалуйста!Написать программу, используя только побитовые операции. Представить исходные данные и/или результаты в двоичном виде
!И ПОЖАЛУЙСТА с построчными комментариями, чтоб легче потом разобраться было, и...

Вычислить с заданной точностью квадратный корень введенного числа X
7. Вводится число X&gt;1 и точность e. Вычислить с заданной точностью квадратный...

Вычислить с заданной точностью квадратный корень введенного числа X, не пользуясь функцией SqRt
Вводится число X&gt;1 и точность e. Вычислить с заданной точностью квадратный...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru