Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 11:03   #1
GroZa
Freelancer
Пользователь
 
Аватар для GroZa
 
Регистрация: 29.01.2011
Сообщений: 33
По умолчанию Большие числа

Хочу прояснить для себя один момент.

Каким образом можно преобразовать число
из строки ANSI любой длины
Код:
// например 
string s ( "3423424131231231314312312315214252423525434534" );
в двоичный формат
Код:
//например (массив байт)
vector<BYTE> i;
и обратно. Интересует алгоритм.

Мне кажется проводить операции над большими числами быстрее в двоичном формате чем, например, складывать столбиком.

PS: просто необходимо понять суть работы с большими числами.
falax species rerum
GroZa вне форума Ответить с цитированием
Старый 14.06.2012, 11:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да как переводить - реализуйте операцию деления на 2 (и получения при этом остатка от деления) для строки любой длины.
дальше элементарно получите строку в виде массива байт в двоичном виде.

Цитата:
Мне кажется проводить операции над большими числами быстрее в двоичном формате чем, например, складывать столбиком.
сомневаюсь. Во-первых, на перевод потратите кучу времени и усилий. во-вторых, количество операций резко возрастёт (за счёт того, что N значное число превращается в M*N значное), да и операции деления и умножения на длинных двоичных числах достаточно навороченные получаются.

Так что, имхо, овчинка выделки явно не стоит!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2012, 11:28   #3
GroZa
Freelancer
Пользователь
 
Аватар для GroZa
 
Регистрация: 29.01.2011
Сообщений: 33
По умолчанию

Хм. Интересно. Неужели во всех этих быстрых математических библиотеках используются столбики для базовых операций?
falax species rerum
GroZa вне форума Ответить с цитированием
Старый 14.06.2012, 14:13   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
сомневаюсь. Во-первых, на перевод потратите кучу времени и усилий. во-вторых, количество операций резко возрастёт (за счёт того, что N значное число превращается в M*N значное), да и операции деления и умножения на длинных двоичных числах достаточно навороченные получаются.

Так что, имхо, овчинка выделки явно не стоит!
Ничего не навороченные. В двоичном формате, наоборот, работать гораздо удобнее и быстрее, за счет того, что все операции естественны для процессора.
Хотя, если Вам только сложить нужно, то проще в десятичном, на перевод и правда будет потрачено больше времени. Но если с числами много различных операций, то лучше перевести в двоичное и там работать, а потом обратно в десятичные.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 14.06.2012, 15:27   #5
GroZa
Freelancer
Пользователь
 
Аватар для GroZa
 
Регистрация: 29.01.2011
Сообщений: 33
По умолчанию

Полагаю, что операция умножения или деления столбиком намного временезатратнее, чем в двоичной системе.
а если корень надо извлечь или в степень возвести
В общем ну их, эти большие числа.
falax species rerum
GroZa вне форума Ответить с цитированием
Старый 14.06.2012, 19:24   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
В двоичном формате, наоборот, работать гораздо удобнее и быстрее
Гы, потеряете время на перевод туда-обратно.

Цитата:
В общем ну их, эти большие числа.
На самом деле есть и специальные алгоритмы, ищите лучше, но они сложны либо в понимании либо в реализации. Из простых - почитайте про ведическую математику - часть операций там осуществляется за счет перестановок, а это всегда быстрей чем прямой счет.

Цитата:
Но если с числами много различных операций, то лучше перевести в двоичное и там работать, а потом обратно в десятичные.
Проблема в том, что часто в операциях используются комбинации различных чисел, а это неизбежный перевод.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.06.2012 в 19:26.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
большие числа morgan97 Паскаль, Turbo Pascal, PascalABC.NET 5 22.11.2011 00:27
большие числа NiCola999 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 37 20.07.2011 16:26
Большие числа DRAgon™ Общие вопросы по Java, Java SE, Kotlin 12 29.01.2011 02:53
Большие числа Лубышев Помощь студентам 6 27.02.2008 22:57
Большие комплексные числа xoz Общие вопросы Delphi 0 24.02.2008 03:12