![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Добрый день. Может кто знает, есть ли для Си (желательно, но можно и для C++) библиотека для работы с длинными двоичными числами, где поддерживаются стандартный операции сложения, деления, деления по модулю, умножения, сравнения?
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
||||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
tzirechnoy, ты вопрос внимательно прочитал? Ему с двоичными числами надо работать, а не с десятичными.
-------------------- |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
kemiisto, а какая разница? ;-) gmp, к слову, к системе счисления не привязан
|
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Я не смог найти функций, отвечающих за какую-то определенную CC. Нашеол только функции конвертации числа в другую систему. Она записывает результат в строку. Смотрел для Си. Конечно, можно было бы каждое двоичное число вручную переводить в десятичную СС, получить нужный результат, а потом перевести обратно. Но это кастыль кастылем, и время работы увеличивается очень сильно, т.к. числа порядка 2^4000-5000. Хотел сначала сам написать двоичную арифметику, но подумал, что есть готовая библиотека, где реализовано качественное продакш решение. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
https://gmplib.org/manual/Converting-Integers.html https://gmplib.org/manual/Assigning-Integers.html |
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Вопрос стоит в том, как умножить/разделить два числа, хранящихся в строке с помощью API библиотеки? -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Ну так и сделать, перегнать их в gmp структура, перемножить gmp функциями, сделать обратно строки... А что вас смещает в таком подходе? Я не думаю что это на много медленнее чем перемножение строк вручную. А деление довольно сложно сделать в любом случае. |
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
меня смущает конвертация чисел туда-сюда порядка 2^4000-2^5000 в количестве 1млн штук. Хотя, если подумать, то наверное это не так много времени займет, как думается. Попробую, потом вернусь к теме, если не устроит:) -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
sQu1rr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Мне кажется, что конвертация в бинарный вид из текстового (и обратно) - это меньшая часть времени, что уйдет на перемножение двух чисел. Давайте подумаем, если взять умножение, то не переводить в бинарный вид, и числа, скажем по 4000 символов (0,1), то нужно посчитать в среднем 2000 4000-символьных строк сдвинуть и сложить. можно оптимизировать, но сразу заметно как это бьет по произовдительности. Поэтому правильное решение все же перевести в бинарную форму и скормить такому зверю как gmp.
Нужно бы бенчмарк сделать. быстрое умножение строки на строку в интернете легко найти Это сообщение отредактировал(а) sQu1rr - 12.5.2015, 16:56 |
||||
|
|||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Это если хранить 1 бит в одном байте. А если хранить биты в битах? Например, в типе __int64? Производительность резко возрастает, если смотреть в конкретном случае, а не в термине "О большое". Умножение столбиком и без интернета пишется ~5 минут. Просто сравнивать самописное умножение столбиком двух строк, даже с оптимизацией хранения бит в бите (а не байте) немного глупо, так как умножение в gmp реализовано посредством метода Карацубы. Я надеялся найти библиотеку наподобии gmp, но только для бинарных чисел. P.S. Написав последнее предложение я понял, что всего лишь ищу gmp с оберткой для двух функций - конвертации и занесения результата в структуру:). Так как оптимизация по памяти - это то же n-разрядное число в машине, которые мы видим в десятичной СС, ну а оптимизация по времени - тут gmp монстр монстров. sQu1rr, спасибо, Вы оказались правы. ![]() Это сообщение отредактировал(а) konshyn - 12.5.2015, 17:13 -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |