|
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
|
|
Работа с 128 битными числами10.02.2013, 08:39. Показов 9478. Ответов 13
Метки нет (Все метки)
Делаю генерацию ключей для RSA.
Контроллер atmega644p. Понадобилось оперировать 128 битными целыми числами. +,-,/,*. Есть какая то джедайская техника ? Как освоить по быстрому ?
0
|
|
| 10.02.2013, 08:39 | |
|
Ответы с готовыми решениями:
13
Проблема с 32 битными числами Битовые операции с 64 битными числами (STM32) Открытый текст и ключ заданы 32-битными числами |
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
|||||||||||
| 10.02.2013, 11:46 | |||||||||||
|
Сложение и вычитание делается просто. Ассемблерная функция (или вставка) по типу:
С умножением и особенно делением сложнее. Есть такой умный дядька, Дональд Кнут зовут, так вот он уже давно придумал и описал в своих книжках алгоритмы быстрого умножения и деления для больших чисел. Можно там посмотреть: Д.Кнут Искусство программирования. Но он тяжеловато пишет, много формул. Есть еще одна замечательная книжка - Hoskirs Delight ("Алгоритмические трюки для программистов" по русски), в ней тоже есть искомое, в частности модифицированные алгоритмы Кнута. Но имеющиеся алгоритмы придётся сильно адаптировать, чтоб они хорошо работали на AVR, потому, что они рассчитаны на 32-х битный процессор. Вот например, алгоритм Кнута для умножения 32x32=>64 заточенный для AVR, имеющий аппаратное умножение 8х8=>16. В этой функции возвращается только старшие 32 бита результата.
Деление скорее всего придётся делать сдвигами и вычитаниями, так как аппаратного деление нет никакого и алгоритм кнута выигрыша не даст. Получится примерно 5000 - 10000 тактов, если на ассемблере реализовывать.
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|||||||
| 10.02.2013, 13:36 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
|
| 10.02.2013, 13:57 | |
|
Проверял.
1) в выражении a * b не будет автоматически происходить расширения до long long. Результат будет 32-х разрядным. Надо так: long long c = (long long)a * b; 2) В avr-gcc это умножение реализовано сдвигами и сложениями без использования аппаратного умножения. Как результат, тот код, что я привёл выполняется за время около 100 тактов, встроенное умножение - около 700-800 тактов (пишу по пямяти, могу наврать).
0
|
|
|
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
|
|
| 10.02.2013, 18:00 | |
|
а подскажите чем отличается запись long от long long ? В чем фокус ?
0
|
|
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
||
| 10.02.2013, 19:10 | ||
long long - это int64.
0
|
||
|
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
|
|
| 10.02.2013, 20:00 | |
|
а как будет 128 bit ? long long long long ? В чем нигия ?
Есть где то описание таких типов ?
0
|
|
|
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 140
|
|
| 10.02.2013, 20:25 | |
|
Вот здесь есть про long long long http://ru.wikipedia.org/wiki/Long,_Long,_Long
:) шучу, можно почитать, например, здесь: http://en.wikipedia.org/wiki/I... r_science)
0
|
|
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
||||||
| 10.02.2013, 20:41 | ||||||
|
http://en.wikipedia.org/wiki/C_data_types
Типа 128 бит с стандарте нет. Некоторые компиляторы, на некоторых платформах поддерживают тип __int128. Например gcc и MS VisualStudyo, когда генерят код для платформы x64. Так, что для AVR uint128_t будет выглядеть так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 798
|
|
| 11.02.2013, 03:32 | |
|
Прекратите насиловать лошадь. 128 бит RSA ключики - это уже немного не для AVR.
Не знаю, правда или нет, но вроде как DSP умеют довольно шустро перемалывать большие и нестандартные вещи
0
|
|
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
||
| 11.02.2013, 10:29 | ||
<Изображение удалено> Я расковыривал такую штуку - нижняя слева на картинке. Там 8-ми битный Friiscale-овский процессор, RTC и питается всё от литиевой батарейки. Работает несколько лет, потом на выброс.
0
|
||
|
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
|
|
| 11.02.2013, 21:27 | |
|
Помогите разобраться.
Эти исходники позволяют вычитать, прибавлять, умножать, делить числа больших размерностей. Помоги разобраться как этим пользоваться. [9.53 Кб]
0
|
|
|
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
|
|
| 11.02.2013, 23:05 | |
|
заработало вроде.
0
|
|
|
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 51
|
||
| 12.02.2013, 03:30 | ||
И попутно можно еще заглянуть и сюда, там мало, но кое что есть.
0
|
||
| 12.02.2013, 03:30 | |
|
Помогаю со студенческими работами здесь
14
Разработать класс или библиотеку функций для работы с m-битными целыми числами Работа с 16-битными оттенками серого
Массив с отрицательными числами (Atmega 128, ASM)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений
Всем привет. А вот мой компьютер, переделанный из ноутбука.
Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
|
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
|
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца:
Хочу еще Симбу взять, очень нравится. . .
|
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
|
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
|
|
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
|
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
|
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
|
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7
Чтобы решить задачу, использовал интернет:
поисковики Google и Yandex, а также подсказки Deep Seek.
Как оказалось, чтобы создать. . .
|
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
|