0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 28
1

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

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

Author24 — интернет-сервис помощи студентам
Существует простой способ вычисления квадратного корня: квадратный корень
из целого числа равен количеству последовательных целых чисел (начиная с 1),
которое можно из него вычесть. Например, вычислим корень из 25:
_25
1
1-е целое нечетное число;
---
_24
3
2-е -----"--------"-----;
---
_21
5
3-е -----"--------"-----;
---
_16
7
4-е -----"--------"-----;
---
_9
9
5-е -----"--------"-----;
---
0
Итак, квадратный корень из 25 равен 5.
Вычислить квадратный корень из целого числа m.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2011, 17:39
Ответы с готовыми решениями:

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

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

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

Вычислить квадратный корень из произвольного числа
Вычислить квадратный корень из произвольного числа, используя метод Ньютона (yn=(yn-1+a/yn-1)/2,...

3
Эксперт С++
4267 / 2241 / 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
4764 / 2574 / 892
Регистрация: 29.11.2010
Сообщений: 5,565
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
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 28
25.09.2011, 13:15  [ТС] 4
Спасибо Вам, но не могли бы Вы это как раз программно показать, представление в двоичной виде, в этом и проблема вся..
0
25.09.2011, 13:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2011, 13:15
Помогаю со студенческими работами здесь

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

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

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

Вводится число X>1 и точность e. Вычислить с заданной точностью квадратный корень введенного числа X
Три подобных темы есть, все без ответа. Условия: &quot;Вводится число X&gt;1 и точность e. Вычислить с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru