Форум программистов, компьютерный форум CyberForum.ru

Преобразование сверхбольшого двоичного числа в строку-десятичное_число. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
23.02.2012, 08:11     Преобразование сверхбольшого двоичного числа в строку-десятичное_число. #1
Пишу класс для хранение и операций над числами большой размерности.
Перепробовал несколько вариантов представления числа и на данный момент решил поработать с массивом типа __int8. Массив представляет собой непрерывное число.
Но тут возникает проблема: как показать число пользователю в десятичном виде.
Т.е. как перевести очень большое двоичное число в десятичное.

П.с. Надеюсь поняли ибо, на работе, одному математику долго пришлось объяснять суть проблемы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2012, 08:11     Преобразование сверхбольшого двоичного числа в строку-десятичное_число.
Посмотрите здесь:

Преобразование числа в строку!!!! C++
C++ проверка двоичного числа
преобразование числа в строку C++
Преобразование двоичного массива int в символ C++
C++ Преобразование двоичного кода в текст
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
16.03.2012, 10:04  [ТС]     Преобразование сверхбольшого двоичного числа в строку-десятичное_число. #21
Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:

Russian_Dragon, а в следующий раз в архив вставляйте только исходники. Кому ж здесь интересны объектные файлы или логи компиляции.

хорошо

Цитата Сообщение от taras atavin Посмотреть сообщение
Добавлено через 2 минуты
Ну это в любом случае так. Только какая? По основанию 256? Или 65536? Или 4294967296? А может с ещё большим?
О_о т.е. система счисления? То, тогда - 10-чная. Всё легко и просто.

На самом деле, на данный момент вижу только один недочет, не могу выкинуть стандартное исключение деления на ноль. Кто-нибудь знает?
Ночью в сети пытался найти , но без успешно((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2012, 21:39     Преобразование сверхбольшого двоичного числа в строку-десятичное_число.
Еще ссылки по теме:

C++ Преобразование числа в строку
C++ Перевод двоичного числа в десятичное
Преобразование числа в строку C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
22.03.2012, 21:39  [ТС]     Преобразование сверхбольшого двоичного числа в строку-десятичное_число. #22
Вот выкладываю тестовую DLL на общий суд. На данный момент ошибок вроде я не наблюдаю.
Единственное, что мне лично не нравиться, - при делении на ноль вы получите ноль, а не исключение. Так сделано по причине того, что мне не удалось найти как выкинуть стандартное исключение деления на ноль.

И вот пример работы программы:
C++
1
2
3
4
5
char* num1_str = "54308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475.54308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475";
char* num2_str = "54308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348475.54308428790203478762340052723346983453487023489987231275412390872348475543084287902034787623400527233469834534870234899872312754123908723484755430842879020347876234005272334698345348702348998723127541239087234847554308428790203478762340052723346983453487023489987231275412390872348474";
 
Bigdouble n1(num1_double, true, true, 1000, false, 1), n2(num2_double, true, false), n3;
n3 = n1 * n2;
Время расчета в тысячных секундах>> 34421 (34,421 секунды)
Результат >>
29494054376606020878496855777881938823484549660238134037711132674634875407162328
34338886259181129868537564188764341831144975661624627184095375519384112920717516
39865403959193189554044134002051817285538121693555875631605897498046170205496780
49848814919323926172958658909451616203016375743827682075374824012339521405044402
84603718343865500533365110712476875856049466652703477819182262311600656498835105
14772342157278605221937375968271251230032131626025003218156910151633026856791837
81192099731397876080493035807360785432867744124713163804430948565860254051055942
40858376192714820384689439239710485031269417457228870274928670290190887503188763
04936604962018093046553225937825671110026791983997086529325832597793764171583895
39346746853395966844381924762824713693065502768460777692398765293801741166754006
60238707750938178415622635402133919007595722787003766416019586940040544670814486
57494432068420557111202335246730667881608767538237432713327082739241895640506857
21218478820270751485865612976213768660455278486613620807669304706069393740164005
29339167725000558070818769782673124259900158876096713771631930268143222384075839
64135503165423770904890970033186696944524122837194466796122439474760002032704482
60028772027108815806473235012951531902757003324101656565444164424053933546337731
49326661579759773081378940968319539852080873656128326815403384492387742715445073
53046311149806350033882076380060090746812489206752835438437640641085987847807972
84857331188358502862427026791146716514636664222665129418907530114942592164299221
22795966334447809700462554123287213276615118196729072382077211480025130572334298
06468592609778391731937762330565106974550614649211830795751039916708932784893755
19094229340588311384515095752372156916346450111476949261083567505101584284100669
49238860438465084530193699183481069427202858605458202225309413377259045578894094
92415073308015241450615688742928767949832836945517242470417421665399585463650620
85836783717750308058654677294207471665725071563575797751905076003150508636583259
84884927374380586638582106385932900656734173838410566542650396414798682520195466
90106495982956741106140729749892549924916057082150284193014105191541660058324053
27331375826348558843050926011421547621650171971229527862887853215583146717060105
46556387936209302097927038161150.05974944495053423404637284224016080645266764217
02936767818443252870064994752766037320558023953010133360455279986972046122526054
27093801924014983530587579587692643268736042704829914707179875215684430357443509
77964972308409121854827262584461952049204549427387704308842806443949000319149610
86230664121961881900187861393579184147595533402001182530454490858649498640522063
89096501215913770737953818867803362495159558616959981398149386418737486562311205
31639680082328453588011191588317934703465471937649274196952909233657398473655894
2670308830821902068147631078997096247715


П.с. Если кому нужно, то пользуетесь.
П.п.с.
А, чуть не забыл, пара слов об конструкторе:
Bigdouble(typeNumber number, bool isRounding = true, bool isFractionSize = true, size_t fractionSize = 16, bool isBlockingCircle = false, size_t circleCount = 2)
number - Число. Принимает массивы из char или просто число типа int.
isRounding - округление чисел. Например, у нас в ответе число 2,123[55555]. Если вы скажите isRounding = true, то получите 2,124, а если isRounding = false 2,123.
Так как данный класс предназначен для расчетов чисел любой длинны в него введены "системы защиты" от зацикливания.
isFractionSize - Включает ограничение на количество чисел после запятой.
fractionSize - количество чисел после запятой.
isBlockingCircle - Включает ограничение на количество блоков повторяющихся чисел.
circleCount - количество блоков повторяющихся чисел.
Пара слов о системе блокировке повторяющихся чисел. Например у нас при делении получается число:
2, 0 127 127 127 127 ..., если мы поставим ограничение типа ..., true, 2,); То в ответе мы получим "2, 0 127 127 127".
Вложения
Тип файла: rar BigDoubleDLL.rar (95.0 Кб, 22 просмотров)
Yandex
Объявления
22.03.2012, 21:39     Преобразование сверхбольшого двоичного числа в строку-десятичное_число.
Ответ Создать тему
Опции темы

Текущее время: 23:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru