10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
1 | |
Преобразование сверхбольшого двоичного числа в строку-десятичное_число.23.02.2012, 08:11. Показов 3742. Ответов 21
Метки нет (Все метки)
Пишу класс для хранение и операций над числами большой размерности.
Перепробовал несколько вариантов представления числа и на данный момент решил поработать с массивом типа __int8. Массив представляет собой непрерывное число. Но тут возникает проблема: как показать число пользователю в десятичном виде. Т.е. как перевести очень большое двоичное число в десятичное. П.с. Надеюсь поняли ибо, на работе, одному математику долго пришлось объяснять суть проблемы.
0
|
23.02.2012, 08:11 | |
Ответы с готовыми решениями:
21
Преобразование числа в строку!!!! Преобразование числа в строку Преобразование числа в строку Преобразование числа в строку |
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
||||||
23.02.2012, 11:39 | 2 | |||||
вот может пригодится:
1
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
23.02.2012, 12:06 [ТС] | 3 |
Спасибо, сейчас буду разбираться, что тут к чему.
0
|
23.02.2012, 14:36 | 4 |
Во-первых int8 неудачная идея, а во-вторых зачем его переводить? Только не говорите, что Вы храните фактически по одному биту в каждом разряде, то есть в каждой ячейке массива Какое количество бит вы называете сверхбольшим?
1
|
Комп_Оратор)
|
|
23.02.2012, 14:39 | 5 |
С праздником!
солидарен с Вашим математиком, хотя не математик. Т.е. не возьму в толк и просится ответ - выберите Int64. А интересно, именно, в чем загвоздка?
0
|
Диссидент
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
23.02.2012, 14:54 | 6 |
Russian_Dragon, Судя по всему, вы умеете работать с длинными числами, те производить с ними арифметические операции. В данном случае требуется деление с остатком. Покажите, как вы делите, форму представления числа. Если пойму, попытаюсь вам помочь.
ЗЫ. Иногда бывает полезней переводить сначала в 1000-ричную
1
|
Комп_Оратор)
|
|
23.02.2012, 15:05 | 7 |
Извините за почемучество, но если это для двоичного, - почему не unsigned char (byte) ?
fasked, похоже я задал вопрос, который уже задан, - не увидел.
0
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
23.02.2012, 15:35 [ТС] | 8 |
Скажем так - я просто перестраховываюсь.
Нет. Еще раз говорю, - массив - это единое число. Вот пример __int8 mas[4] = {85, 85, 85, 85}; 01010101 01010101 01010101 01010101 Но класс будет возвращать число: 1431655765. больше чем 64 [на данный момент] Добавлено через 1 минуту Спасибо. И тебя. И всех остальных)) чтобы работать с числами которые не помещаются __int64. Добавлено через 7 минут Что-то не совсем понял. Пока я пытаюсь представить массив как единое число. Пример чуть выше. Добавлено через 3 минуты Сначала небольшое отступление. Я, пред всеми, извиняюсь я использую не __int8, а "unsigned __int8". Что касается "unsigned char", то суть от этого не меняется. http://msdn.microsoft.com/en-u... 80%29.aspx Просто для меня так наглядней.
0
|
Комп_Оратор)
|
|
23.02.2012, 15:48 | 9 |
Тогда, присоединяюсь. Если вопрос только во внешнем отображении, а библиотеки для арифметики у Вас уже есть, то можно, например, выбрать для внутреннего double, а потом выводить в строку. Или я опять не понимаю?
1
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
23.02.2012, 15:56 [ТС] | 10 |
Вопрос пока только в этом.
Нет пока еще логики операций. Есть такая у меня мысля для временного решения отображения.
0
|
Комп_Оратор)
|
|
23.02.2012, 16:04 | 11 |
"выбрать для внутреннего double, а потом выводить в строк" - Это, похоже, опять глупость, - не подумал (мало знаков в мантиссе- 14).
Добавлено через 6 минут Это главный вопрос, мне кажется. Представление ему и в подмётки не годится. ИМХО решив его, - получите решение для вывода без труда.
1
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
23.02.2012, 17:06 [ТС] | 12 |
Всем спасибо за беспокойство.
Но походу игра не стоит свеч. Суть в том, что на подготовку расчетов будет уходить столько же времени, что и в текущем варианте класса. А расчет более хитрый чем текущий. На данный момент я реализую класс, в котором, в каждом элементе массива храниться одна цифра числа. Он умудряется складывать два вот таких числа 54308428790203478762340052723346983453487023489987231275412390872348475543084287 90203478762340052723346983453487023489987231275412390872348475543084287902034787 62340052723346983453487023489987231275412390872348475543084287902034787623400527 23346983453487023489987231275412390872348475.54308428790203478762340052723346983 45348702348998723127541239087234847554308428790203478762340052723346983453487023 48998723127541239087234847554308428790203478762340052723346983453487023489987231 27541239087234847554308428790203478762340052723346983453487023489987231275412390 872348475 за 6 тысячных секунды [0.006]. На ноуте с i7 c частой 1.7Ггц на ядро. Кстати, если кто не заметил, число не целое.
0
|
Комп_Оратор)
|
|
23.02.2012, 18:16 | 13 |
Russian_Dragon, это для меня тема интересная. Есть у меня программка рассчитывающая определители матриц для получения полиномиальных коэффициентов методом Гауса, для интерполяции функции заданной конечным количеством пар точек.
При размерах матрицы >15x15 double уже не хватает даже для гладких кривых... Может где-то есть библиотеки, для работы с рациональными числами большей точности и порядка, хоть на Fortran-e? В данной ситуации, для меня скорость на 3-м плане.
0
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
||||||||||||||||
23.02.2012, 18:49 [ТС] | 14 | |||||||||||||||
Говорят, что есть, но я даже не пробовал искать самому интересно реализовать.
Если руки дойдут нормально реализовать операции, то потом скину исходники. Если скорость на 3-м, то вот мой курсовая 3 курса учебы. Тут я больше выёживался чем оптимизировал, то приведенное выше число она считает где-то за 0.15 секунды. chislo.rar Пользоваться так:
Есть один нюанс. При делении: если группа чисел повторяются более 2 раз расчет останавливается. т.е.
Более нормальную логику времени не хватило реализовать. Кстати, обойти можно так:
1
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
16.03.2012, 00:36 [ТС] | 16 |
IGPIGP, недавнее тестирование показало ошибки в старой версии класса.
Вот собственно новый вариант класса. Тестирование до конца пока не завершено, но ошибок пока, тьфу, тьфу, тьфу, не наблюдается. А работает многократнее быстрее: http://narod.ru/disk/438235330... 0.rar.html П.с. Админам, ну не входит архив во вложение вот и приходиться ссылкой.
1
|
10 / 11 / 2
Регистрация: 18.02.2012
Сообщений: 140
|
|
16.03.2012, 02:07 [ТС] | 18 |
Я сам себя сглазил и поспешил выкладывать. Нашел новые недочеты, то опять пошел тестировать.
0
|
fasked
|
16.03.2012, 08:16
#19
|
0
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
16.03.2012, 09:21 | 20 |
Ну мы здесь только на половину математики, так что нам сразу понятно.
Добавлено через 2 минуты Ну это в любом случае так. Только какая? По основанию 256? Или 65536? Или 4294967296? А может с ещё большим?
0
|
16.03.2012, 09:21 | |
16.03.2012, 09:21 | |
Помогаю со студенческими работами здесь
20
Преобразование числа в строку Преобразование целого числа в строку Преобразование двоичного кода в ASCII Преобразование двоичного кода в текст Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |