Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2024, 23:22   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 662
По умолчанию Вычисление корня "вручную"

Зайду с объяснения зачем это надо.

Есть переменная Int64, но я не нашел ее "положительного" аналога в виде некоего Word64 (Если говорить о 32 разрядном Delphi 7)

Но немного открыв основы asm вставок понял, что в целом, через asm процедуры вполне себе можно использовать Int64 как Word64. А можно даже просто массив LongWord любой длины, который использовать как одно единое суперчисло.

Простые asm процедуры вполне справляются с прибавлением, отниманием, умножением. Деление сложнее, но тоже реализуемо. Процедуру перевода числа в строку (для вывода на экран) и строки в число тоже можно за два экрана текста.

И вот возникает вопрос: а как высчитать корень из такого числа?
Kronos913 вне форума Ответить с цитированием
Старый 20.06.2024, 00:06   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,674
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
а как высчитать корень из такого числа?
Корень это не целочисленная операция.
Arigato вне форума Ответить с цитированием
Старый 20.06.2024, 01:58   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Зайду с объяснения зачем это надо.
Ваше объяснение ничего не объясняет.

Цитата:
Сообщение от Arigato Посмотреть сообщение
Корень это не целочисленная операция.
Деление тоже не целочисленная операция. Но ТС похоже где-то нарыл алгоритм деления на ассемблере без использования сопроцессора. Теперь хочет нарыть алгоритм вычисления корня без использования сопроцессора.
А это действительно возможно.
northener вне форума Ответить с цитированием
Старый 20.06.2024, 09:04   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,658
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
asm процедуры вполне справляются с прибавлением, отниманием, умножением
Отнимание - это в уголовном кодексе, прибавление - в роддоме. А в математике существует вычитание и сложение.
А для корня - можно посмотреть хотя бы (если не заблокирован доступ к Вики )
https://ru.wikipedia.org/wiki/Итерац...формула_Герона
digitalis вне форума Ответить с цитированием
Старый 20.06.2024, 10:36   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,674
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Деление тоже не целочисленная операция.
Деление может быть целочисленным. То есть когда и аргументы целые, и результат целый. А вот корень дает вещественный результат. А потому странно говорить о корне применительно к целым числам. Int64 приводится к Double или Extended, дальше считается корень, результат также будет Double.

Нет, конечно, есть Целочисленный квадратный корень, но вряд ли это именно то, что нужно автору.
Arigato вне форума Ответить с цитированием
Старый 20.06.2024, 14:32   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,658
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
вряд ли это именно то, что нужно автору.
"Ты что потерял, моя радость?" - кричу я ему,
А он отвечает: "Ах, если б я знал это сам" ©
https://yandex.by/video/preview/6084412523451799985 2:39

Последний раз редактировалось digitalis; 20.06.2024 в 14:37.
digitalis вне форума Ответить с цитированием
Старый 22.06.2024, 20:09   #7
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 662
По умолчанию

А как-то вообще можно увидеть, как устроен оригинальный sqrt?
Kronos913 вне форума Ответить с цитированием
Старый 22.06.2024, 21:22   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,897
По умолчанию

Можно в модуле system. Но вам это будет неинтересно.
northener вне форума Ответить с цитированием
Старый 22.06.2024, 22:06   #9
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 662
По умолчанию

Я открыл system но там его не нашел
Kronos913 вне форума Ответить с цитированием
Старый 22.06.2024, 22:26   #10
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 662
По умолчанию

Единственное что мне пришло на ум - это как-то так
Это черновик кода, который для быстродействия лучше перевести на asm

Использует метод половинного деления
Код:
Function sqrt2(a:Int64):LongWord;
var
  b, k:Int64;
  i, j:LongWord;
begin
  i:=2147483648; {2^31}
  j:=0;
  while i>0 do begin
    k:=j+i;
    b:=k*k;
    If b<=a then j:=j+i;
    i:=i div 2;
  end;
  Result:=j;
end;
Kronos913 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо написать "таймер", который будет запускаться при нажатии кнопки "Start", приостанавливаться на "Pause", и сбрасываться на "Reset" billiejean78 JavaScript, Ajax 1 03.09.2021 08:58
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Вычисление квадратного корня вручную 6AZblJlb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 16.11.2011 04:02
Как "натянуть" сайт написанный вручную на CMS ? zlo_999 HTML и CSS 3 01.02.2011 09:57