Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 14:33

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Длинная арифметика
Автор Сообщение
  Заголовок сообщения:  Re: Длинная арифметика  Ответить с цитатой
Вот обожаю наше скромное сообщество!
Называется, сам спросил сам ответил.
Реализовал упрощенный вариант алгоритма Карацубы.

Фрагмент ООП-кода.

Код:
\ См. алгоритм Карацубы
\ общее: a*c*base*base + (a*d+b*c)*base + b*d
\ частное a*d*base + b*d
M: L*
{ a \ b d addr cnt k }
a VRS
FROM a V@ TO b \ раскладываем число
TO a
0 DUP TO cnt TO k
POINT @ TO addr
BEGIN cnt LEN @ XOR WHILE
addr C@ TO d \ мы работаем с байтами, так что считаем, что C равно 0. Отсюда и упрощенная формула
b d *
k +
DUP
addr C!

8 RSHIFT \ мы записали байт в длинное число, отсекаем его
a d * VLS/2 \ сдвиг влево на 8 байт
+   
TO k
FROM addr    1+!
FROM cnt    1+!
REPEAT
;


Сообщение Добавлено: Сб авг 14, 2021 10:52
  Заголовок сообщения:  Re: Длинная арифметика  Ответить с цитатой
Вот как раз для полутора раз можно было бы и подтянуть DLL не в стандартную систему, а в те приложения, где она нужна. Впрочем, дело Ваше, я только на вопрос ответил.
Если хочется непременно на Форте, то в описании eForth-a (PDF-ка гуглится по строке "eForth overview") есть реализация арифметики (в том числе и умножения UM* ( n n -- d )) через сложение с переносом UM+ ( n n -- d ), но скорость оставляет желать лучшего.
Сообщение Добавлено: Вт июл 27, 2021 18:05
  Заголовок сообщения:  Re: Длинная арифметика  Ответить с цитатой
А) не тянуть зависимостей, DLL и прочего. Поскольку либа нужна раза полтора.
Б) Не лезть в ассемблер, делать мне блин нечего реализовывать все это ещё в маш. коде, чтоб при портировании с 32 на 64 бита либа превратилась в говно.
Сообщение Добавлено: Вт июл 27, 2021 09:16
  Заголовок сообщения:  Re: Длинная арифметика  Ответить с цитатой
А почему бы не использовать GMP (GNU Multiprecision Library)? Какой выигрыш ожидаете от собственной библиотеки?

У Интела есть умножение 32 бита на 32 бита с 64-битным результатом. ИМХО, такие вещи лучше делать в машинном коде.
Сообщение Добавлено: Вт июл 27, 2021 08:29
  Заголовок сообщения:  Длинная арифметика  Ответить с цитатой
Вот делаю себе длинную арифметику в кач-ве либы.

Возник вопрос. что делать с умножением?
Просто если множитель в 4 байта, то умножать может быть некорректно даже на байт.

Все остальный операции (сложение, деление и пр.) оперируют 2-байтовыми значениями.
Сообщение Добавлено: Пн июл 26, 2021 13:47

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB