|
|
|
новичок
      
участник
Last Login: 14.04.2006 8:32
Сообщ.: 7,
Visits: 78
|
|
Подскажите, если кто-нибудь писал программы для работы с длинными числами более 100 цифр.Есть ли что-то готовое в каком-нибудь языке или программе, или нужно писать с "нуля".
Спасибо.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 08.02.2007 21:57
Сообщ.: 148,
Visits: 1 558
|
|
| Я сталкивался пару раз. Я просто сохранял число в виде #.#### и отдельную переменную на количество десятков. То есть если число превышает 10, то делим его на десять, а количеству десятков добавляем 1. Вроде того...
|
|
|
|
|
Junior Member
      
участник
Last Login: 20.10.2006 17:44
Сообщ.: 19,
Visits: 201
|
|
То с чем я работал: в JAVA есть весьма удобные классы java.math.BigInteger\BigDecemical которые умеют хранить числа неограниченной длинны и производить операции над ними.
Неудобность заключается в том, что операции только самые базовые (+,-,*,mod, и еще несколько) и классы достаточно медлительные. (Если нужно писать быстрый алгоритм - советую Си говорят там тоже что-то есть)
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
Писал-с!
Чертовски интересная задача. Делать надо всё с нуля.
Но ведь и овчинка выделки стоит. Не так ли? ;)
|
|
|
|
|
Supreme 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 должны быть в любом нормальном учебнике по ассемблеру. Удачи
|
|
|
|
|
Supreme Being
      
участник
Last Login: 08.02.2007 21:57
Сообщ.: 148,
Visits: 1 558
|
|
А чем Вам не нравится мой вариант с сохранением числа вида #.### и количества десятков отдельно? Объясните. Помоему и места мало и проще некуда.
С уважением, Александр.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.05.2008 23:42
Сообщ.: 121,
Visits: 2 333
|
|
Никто здесь не говорил, что это кому-то не нравится. А вот мне лично не совсем понятна идея. Что значит число вида #.###?
|
|
|
|
|
Supreme 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 (конечно надо учесть еще вариант нечетного количества десятков, но об этом счас не будем).
Возведение в степень и того проще, я уже не говорю о сложении, вычитании и так далее...
С уважением, Александр.
|
|
|
| | |