Работа с большими числами!?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Работа с большими числами!? Expand / Collapse
Автор
Сообщение
14.04.2006 8:40
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 14.04.2006 8:32
Сообщ.: 7, Visits: 78
Подскажите, если кто-нибудь писал программы для работы с длинными числами более 100 цифр.Есть ли что-то готовое в каком-нибудь языке или программе, или нужно писать с "нуля".
Спасибо.
Сообщ. #895217
16.04.2006 19:53


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 08.02.2007 21:57
Сообщ.: 148, Visits: 1 558
Я сталкивался пару раз. Я просто сохранял число в виде #.#### и отдельную переменную на количество десятков. То есть если число превышает 10, то делим его на десять, а количеству десятков добавляем 1. Вроде того...
Сообщ. #895340
16.04.2006 20:27
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 20.10.2006 17:44
Сообщ.: 19, Visits: 201
То с чем я работал: в JAVA есть весьма удобные классы java.math.BigInteger\BigDecemical которые умеют хранить числа неограниченной длинны и производить операции над ними.
Неудобность заключается в том, что операции только самые базовые (+,-,*,mod, и еще несколько) и классы достаточно медлительные. (Если нужно писать быстрый алгоритм - советую Си говорят там тоже что-то есть)
Сообщ. #895342
29.04.2006 18:48
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 26.10.2007 9:10
Сообщ.: 166, Visits: 1 538
Писал-с!
Чертовски интересная задача. Делать надо всё с нуля.
Но ведь и овчинка выделки стоит. Не так ли? ;)
Сообщ. #896245
29.04.2006 20:42


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.05.2008 23:42
Сообщ.: 121, Visits: 2 333
Если писать самому и качественно, то с применением ассемблера и формата BCD (Binary Coded Decimals - Двоично Кодированные Десятичные). 

BCD могут быть неупакованные - на каждую десятичную цифру приходится один байт; и упакованные - по 4 бита. Неупакованные BCD обрабатываются процессором по одной цифре за операцию. Кроме обычных комманд для сложения/вычитания есть специфичные для BCD комманды: aaa, aas, aad, aam, daa, das и др. Арифметический сопроцессор может за операцию обрабатывать 10-байтные упакованные BCD (это 18 цифр числа + знаковый байт)

Плюс неупакованные BCD легко переводятся в ASCII строку и наоборот.

Основы работы с BCD должны быть в любом нормальном учебнике по ассемблеру.

Удачи

Сообщ. #896248
03.05.2006 17:20


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 08.02.2007 21:57
Сообщ.: 148, Visits: 1 558
А чем Вам не нравится мой вариант с сохранением числа вида #.### и количества десятков отдельно? Объясните. Помоему и места мало и проще некуда.

С уважением, Александр.
Сообщ. #896463
05.05.2006 9:48


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.05.2008 23:42
Сообщ.: 121, Visits: 2 333
Никто здесь не говорил, что это кому-то не нравится.
А вот мне лично не совсем понятна идея.
Что значит число вида #.###?
Сообщ. #896569
05.05.2006 18:44


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 08.02.2007 21:57
Сообщ.: 148, Visits: 1 558
#.#### значит напр.: 1,436; 5,3421; 8,4321; 6,34; ... и т.д. где 1<=эточисло<10.

Как когда-то в школе на физике или химии было: 6,02*(10^23) [6,02 умноженное на 10 в 23-ей степени].

Так вот в моем варианте при желании точность конечно будет 8-10 знаков начальных, при желании у небольшом усовершенствовании я думаю можно до 15-20 легко, зато вот 10-ка может быть и в 10-ой и в 15-ой и 433347-ой степени.

Действия, на мой взляд, тоже легко описать, нарп.:

при вычислении корня вычислять корень из первого числа, а количество десятков делить на 2 (конечно надо учесть еще вариант нечетного количества десятков, но об этом счас не будем).

Возведение в степень и того проще, я уже не говорю о сложении, вычитании и так далее...


С уважением, Александр.
Сообщ. #896614