![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
привет.
допустим у нас есть стандартный C++, в котором максимальный тип - восьмибайтовый long. в него можно поместить определённые числа, меньшие чем 2^64. если надо поместить число большее чем long_max, то необходимо использовать два long'а. как правильно сделать математические операции над таким типом, и ввод-вывод? я думаю, сложение делается так - складываются младшие части, потом складываются старшие части и перенос из младшего разряда. я знаю как проверить бит переноса на ассемблере, но не знаю как на C++ Код:
mov eax, long1_low add eax, long2_low mov long3_low, eax mov eax, long1_high adc eax, long2_high mov long3_high, eax
__________________
THE TRUTH IS OUT THERE |
|
|
|
|
| Реклама: |
|
|
#2
|
|
Новичок
Пол:
Регистрация: 08.09.2006
Сообщений: 28
Репутация: 2
|
Ищи алгоритмы для работы с "большими числами". Можно сделать и ассемблерную вставку.
|
|
|
|
|
|
#3
|
|
Неактивный пользователь
Регистрация: 22.09.2009
Сообщений: 3
Репутация: 0
|
Без ассемблера сделать можно, но медленно. Перед сложением проверять, если оба числа больше ULONG_MAX/2 (или одно больше, а другое равно) будет перенос. А вобще есть библиотека gmp (http://gmplib.org/) для C.
|
|
|
|
|
|
#4
|
|
Новичок
Пол:
Регистрация: 23.10.2008
Сообщений: 4
Репутация: 0
|
Ещё одна библиотека для работы с большими числами - NTL - www.shoup.net/ntl/
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| расширение*.dtc | TOPGAN | Скорая помощь | 1 | 08.09.2009 14:01 |
| Расширение .pwp | Liatra | Архив | 3 | 18.11.2007 14:31 |
| Расширение .iso | subjekt | Архив | 11 | 17.04.2006 21:47 |
| расширение Bin | hanoy | Архив | 4 | 18.05.2005 01:56 |
|
|