Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
 Аватар для Хитрый_КОТ
3 / 3 / 1
Регистрация: 21.11.2010
Сообщений: 30

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

19.12.2010, 15:42. Показов 4708. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста вычислить функцию корень из Х без использования сопра.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2010, 15:42
Ответы с готовыми решениями:

вычисление квадратного корня из 16разрядного числа
Доброго времени суток! нужна помощь в создании программы на TASM. Цель: вычислить корень числа введенного с клавиатуры. Ограничение по...

Вычисление квадратного корня (КР580)
Помогите составить программы: 1) решение данной функции y=корень из x; 2) Дана высота h найти ускорение обьекта падающего с данной...

Вычисление квадратного корня
Доброго дня! Подскажите WinAPI функцию для вычисления квадратного корня. Если можно то с примером. Заранее всем очень благодарен)))...

8
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
19.12.2010, 15:45
Попробуй двоичным поиском на промежутке от 0 до X
1
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.12.2010, 15:56
Вот такое например нашел. Вычисляет целую часть квадратного корня.
Assembler
1
2
3
4
5
6
7
8
9
10
11
        xchg    bx,ax          ; Сохраняем AX в BX
        mov dx,8000h       ; DH = маска с установленным битом, DL = результат
@@NextBit:  xor dl,dh          ; Устанавливаем в DL очередной бит (с помощью маски)
        mov al,dl          ; Записываем результат в AL
        mul al             ; AX = AL*AL (возводим в квадрат)
        cmp ax,bx          ; Сравниваем результат с исходным числом
        jna @@DontReset    ; Если результат больше, то...
        xor dl,dh          ; Сбрасываем установленный ранее бит
@@DontReset:    shr dh,1           ; Переходим к следующему биту
        jnz @@NextBit      ; Если они (биты) не кончились, повторяем
        xchg    ax,dx          ; Иначе записываем результат в AX
0
 Аватар для Хитрый_КОТ
3 / 3 / 1
Регистрация: 21.11.2010
Сообщений: 30
19.12.2010, 19:10  [ТС]
А нет такой команды вроде fsqrt, только для региста eax например?
0
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
19.12.2010, 19:17
есть sqrtss
Assembler
1
2
3
cvtsi2ss xmm0,eax
sqrtss   xmm0,xmm0
cvtss2si eax,xmm0
2
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
20.12.2010, 09:23
Хитрый_КОТ, без использования FPU и естественно результат целочисленный
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    mov ebp,X
    inc ebp
    bsr ecx,ebp
    and ecx,-2
    mov ebx,1
    shl ebx,cl;для уменьшения количества итераций 
    xor eax,eax
@@: lea ecx,[eax+ebx]
    shr eax,1
    cmp ecx,ebp
    sbb edx,edx
    mov edi,edx
    and edx,ecx
    sub ebp,edx
    and edi,ebx
    or eax,edi
    shr ebx,2
    jnz @b
возвращает EAX =√X для 32-разрядного корня за максимум 16 итераций (зависит от величины Х)
0
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
20.12.2010, 17:58
Можно поробовать числа с фиксированой точкой. Только как их перемножать? Вроде бы мантиссы перемножаются, а порядок складывается. Чувствую в результате получится не программа, а "многабукаф".

Добавлено через 2 минуты
Mikl___
О - у тебя без умножения. Прокомментируй строки пожалуйста.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
21.12.2010, 04:28
murderer, да чего там комментировать это переложение на ассемблер
C
1
2
3
4
5
6
7
8
9
10
int isqrt4(unsigned x) {   unsigned m, y, b;
   m = 0x40000000;
   y = 0;
   while(m != 0) {              // Do 16 times.
      b = y | m;
      y = y >> 1;
      if (x >= b) {  x = x - b; y = y | m; }
      m = m >> 2;
   }
   return y;
Причем алгоритм был описан аж в 1945 в Von Neumann J. "First Draft of a Reaport on the EDVAC"
1
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
22.12.2010, 15:49
Нашёл тупой, но очень простой алгоритм
Для квадратов чисел верны следующие равенства:
1 = 1*1
1 + 3 = 2*2
1 + 3 + 5 = 3*3

и так далее.

То есть, узнать целую часть квадратного корня числа можно, вычитая из него все нечётные числа по порядку, пока остаток не станет меньше следующего вычитаемого числа или равен нулю, и посчитав количество выполненных действий. Например, так:
9 − 1 = 8
8 − 3 = 5
5 − 5 = 0

Выполнено 3 действия, квадратный корень числа 9 равен 3.
Реализация
Delphi
1
2
3
4
5
6
7
8
9
10
function sqrt(x: integer): dword;assembler;register;
asm
  mov edx,-1
  @1:add edx,2
     sub eax,edx
  jnle @1
  sbb edx,-1
  shr edx,1
  mov eax,edx
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2010, 15:49
Помогаю со студенческими работами здесь

Вычисление квадратного корня
Доброго времени суток! Необходимо реализовать вычисление квадратного корня из 36 по двум алгоритмам 1)1 36-1=35 2 35-3=32 3...

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

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

Извлечение квадратного корня без использования функции
Всем привет. У меня возник вопрос. Можно ли извлечь корень из числа без функции Math.Sqrt(double);? Знаю, что можно, но как?

Вычисление квадратного корня без cmath
Всем привет. Сделал простенький калькулятор без cmath, "+,-,*,/,степень и квадратный корень". вопрос такой case 's': if...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru