imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 19.04.2006, 21:49     # 1
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
Question Помогите реализовать деление больших чисел

Нужно посчитать

u=s^2 mod N

где
N - 64-битное число
s - 64-битное (т.е. s^2 уже 128 бит)

Как это реализовать на асме? Помогите пожалуйста, очень нужно!!!

Последний раз редактировалось Perfilev; 20.04.2006 в 07:12.
Perfilev вне форума  
Старый 19.04.2006, 23:05     # 2
Andrewpg
Junior Member
 
Регистрация: 09.09.2004
Сообщения: 179

Andrewpg Известность не заставит себя ждать
Способ 1 (самый простой): использовать мат. сопроцессор.
Способ 2 (чуть сложнее): вспомнить школьный курс математики (а именно: алгорить умножения "столбиком" и деления "углом"), и закодировать его на асме.
Способ 3: <надо вспомнить курс лекций на случай, если 1 и 2 не помогут>
__________________
"О, как тоскливо ехать без мигалки!"
Andrewpg вне форума  
Старый 20.04.2006, 04:45     # 3
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
А можно чуточку поподробнее?
Особенно про 1-й способ?
Perfilev вне форума  
Старый 20.04.2006, 05:31     # 4
lak_b
Junior Member
 
Регистрация: 10.11.2004
Сообщения: 66

lak_b Нуль без палочки
юзай
ya.ru: длинная арифметитка
lak_b вне форума  
Старый 21.04.2006, 09:14     # 5
XPEHOMETP
Junior Member
 
Регистрация: 03.02.2006
Сообщения: 160

XPEHOMETP МолодецXPEHOMETP МолодецXPEHOMETP Молодец
А переход на 128-битные числа нужен принципиально? Если нет, почему бы не обойти это дело таким трюком:

a = s\N (результат целочисленного деления, пардон за Basic)
b = s mod N
s = a*N + b
Тогда:
s^2 = a^2*N^2 + 2*a*b*N + b^2
В результате получаем:
u = s^2 mod N = b^2 mod N = (s mod N)^2 mod N

Разве не так?
XPEHOMETP вне форума  
Старый 21.04.2006, 09:43     # 6
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Никто не гарантирует что (s mod N) меньше 31 бита
crawler вне форума  
Старый 21.04.2006, 09:44     # 7
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Абсолютно верно. Поскольку приведение по модулю N является гомоморфным отображением из кольца целых в кольцо целых о модулю N, верны следующие утверждения:
(A + B) mod N = [(A mod N) + (B mod N)] mod N
(A - B) mod N = [(A mod N) - (B mod N)] mod N
(A * B) mod N = [(A mod N) * (B mod N)] mod N
Последнее равенство как раз нужно. Это элементы модулярной арифметики, использующейся в некоторых асимметричных криптосистемах (RSA, системы Полига-Хеллмана и Эль-Гамаля). Я по этому диплом писал...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 21.04.2006, 12:01     # 8
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
я думаю решить эту задачу при помощи sse, там xmm регистры 128-битные, только я не знаю как их использовать, т.к. при компиляции masm-ом выдаются ошибки:
Assembling: _gendll.asm
_gendll.asm(118) : error A2085: instruction or register not accepted in current CPU mode
_gendll.asm(120) : error A2006: undefined symbol : xmm0

118: movaps xmm0, eax
120: or xmm0, 10000000000000000000000000000000b

Пробовал подключать iaxmm.inc - ещё больше ошибок.
В чем проблема?
Perfilev вне форума  
Старый 21.04.2006, 13:32     # 9
XPEHOMETP
Junior Member
 
Регистрация: 03.02.2006
Сообщения: 160

XPEHOMETP МолодецXPEHOMETP МолодецXPEHOMETP Молодец
А если подсмотреть, как такие вычисления компилятор делает? И подправить при необходимости? Могу вечером проделать на Фортране с g95, только он выдает ассемблер в стиле ATT. Обычный асм выдает Salford FTN95, но он пишет много лишнего: присоединение рантайм-модулей и прочее.
XPEHOMETP вне форума  
Старый 21.04.2006, 14:11     # 10
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
боюсь, это слишком сложно для меня.
могу скинуть исходники, посмотреть, в чём дело.
Perfilev вне форума  
Старый 22.04.2006, 09:53     # 11
XPEHOMETP
Junior Member
 
Регистрация: 03.02.2006
Сообщения: 160

XPEHOMETP МолодецXPEHOMETP МолодецXPEHOMETP Молодец
Виноват, наобещал лишнего! Нету у меня компиляторов, которые с такими большими числами работают.
XPEHOMETP вне форума  
Старый 22.04.2006, 12:57     # 12
Willow
Junior Member
 
Регистрация: 23.12.2003
Адрес: Киев
Сообщения: 118

Willow Реально крут(а)Willow Реально крут(а)Willow Реально крут(а)Willow Реально крут(а)
Цитата:
Сообщение от Andy1
я думаю решить эту задачу при помощи sse, там xmm регистры 128-битные, только я не знаю как их использовать, т.к. при компиляции masm-ом выдаются ошибки:
Assembling: _gendll.asm
_gendll.asm(118) : error A2085: instruction or register not accepted in current CPU mode
_gendll.asm(120) : error A2006: undefined symbol : xmm0

118: movaps xmm0, eax
120: or xmm0, 10000000000000000000000000000000b

Пробовал подключать iaxmm.inc - ещё больше ошибок.
В чем проблема?
Ну начнем стого, что строка 118 ошибочная. (Левый операнд 128 бит, а правый только 32)

МАСМ я давно не юзал, так что сказать конкретно тяжело, но должна быть деректива которая разрешит юзать ССЕ. Но могу сказать что Делфа и Вижуалы уже года три как позволяют на асме вставлять такие инструкции (7 Делфа и 2003 Вижуалы точно, предки вроде тоже).

А вообще есть такой замечательный ассемблер как FASM (http://flatassembler.net/)
Willow вне форума  
Старый 22.04.2006, 16:53     # 13
GOre01
Junior Member
 
Аватар для GOre01
 
Регистрация: 10.08.2004
Адрес: Завис в конторе
Пол: Male
Сообщения: 180

GOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царстве
Не совсем то, но вдруг поможет. Рассматриваются операции для работы с большими числами. Принципы работы с ними и т.п. Но... применительно к С++. Может окажется полезным.
Вложения
Тип файла: zip long.zip (354.4 Кбайт, 3 просмотров - Кто скачивал? )
__________________
Не нервируйте меня. Мне скоро негде будет прятать трупы!
GOre01 вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:56.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.