4 / 4 / 2
Регистрация: 06.03.2011
Сообщений: 151
|
|
1 | |
Работа с большими числами29.04.2006, 22:48. Показов 9723. Ответов 16
Метки нет (Все метки)
Писал-с!
Чертовски интересная задача. Делать надо всё с нуля. Но ведь и овчинка выделки стоит. Не так ли?
0
|
29.04.2006, 22:48 | |
Ответы с готовыми решениями:
16
Работа с большими числами (не влезающими в тип integer) Массив. Заполнить массив числами, делящимися нацело на 13 или на 17 и большими 30 Работа с большими числами Работа с большими числами |
John Paramol
|
|
30.04.2006, 00:42 | 2 |
Если писать самому и качественно, то с применением ассемблера и формата BCD (Binary Coded Decimals - Двоично Кодированные Десятичные).
BCD могут быть неупакованные - на каждую десятичную цифру приходится один байт; и упакованные - по 4 бита. Неупакованные BCD обрабатываются процессором по одной цифре за операцию. Кроме обычных комманд для сложения/вычитания есть специфичные для BCD комманды: aaa, aas, aad, aam, daa, das и др. Арифметический сопроцессор может за операцию обрабатывать 10-байтные упакованные BCD (это 18 цифр числа + знаковый байт) Плюс неупакованные BCD легко переводятся в ASCII строку и наоборот. Основы работы с BCD должны быть в любом нормальном учебнике по ассемблеру. Удачи |
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 139
|
|
03.05.2006, 21:20 | 3 |
А чем Вам не нравится мой вариант с сохранением числа вида #.### и количества десятков отдельно? Объясните. Помоему и места мало и проще некуда.
С уважением, Александр.
0
|
John Paramol
|
|
05.05.2006, 13:48 | 4 |
Никто здесь не говорил, что это кому-то не нравится.
А вот мне лично не совсем понятна идея. Что значит число вида #.###? |
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 139
|
|
05.05.2006, 22:44 | 5 |
#.#### значит напр.: 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 (конечно надо учесть еще вариант нечетного количества десятков, но об этом счас не будем). Возведение в степень и того проще, я уже не говорю о сложении, вычитании и так далее... С уважением, Александр.
0
|
John Paramol
|
|
06.05.2006, 00:53 | 6 |
Это практически экспоненциальное представление вещественных чисел. Только с увеличенной значимостью экспоненты (той степени десятки). Стандарт IEEE 754 уже содержит в себе экспоненту, и она занимает 10 бит (для 64-битного вещественного числа).
В таких языках как C,Pascal существуют 80-битные вещественные (long double/extended), соответствующие внутреннему 10-байтному представлению данных в i80x87. Диапазон значений для таких данных [3.6*10^–4951, 1.1*10^4932]. Экспонента занимает 15 бит, точность составляет 62 бита - 19-20 цифр. Хотя эти типы данных имеют проблему с переносимостью. zxc3 говорил о превышении 100 цифр, не думаете ли Вы, что имелась в виду значимость? Ведь 1.1*10^4932 это вообще 4932 цифры. Впрочем, выбор остается за zxc3. Кстати, я не уточнил выше, что BCD представляет _целые_ числа. Хотя подобный изврат можно применить и здесь - хранить отдельно положение точки. |
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 139
|
|
06.05.2006, 16:56 | 7 |
Да, согласен.
Хотя, честно говоря, не могу понять, где бы могла понадобится такая точность (20 знака), разве что в NASA Автор, будьте любезны, подскажите пожалуйста, где Вы это хотите использовать. Любопытство замучило. Заранее спасибо.
0
|
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
|
||||||
06.05.2006, 16:59 | 8 | |||||
Вот облегчённая версия программы написаная на JavaScript для чисел не превышающих 255 символов... (сложение и умножение):
0
|
4 / 4 / 2
Регистрация: 06.03.2011
Сообщений: 151
|
|
10.05.2006, 15:23 [ТС] | 9 |
Такая "точность" нужна в криптоаналитике.
Насколько я понял, автор вопроса решил подзаработать на поиске делителей огромных чисел. Задача очень интересная, но и весьма нетривиальная. Простой перебор невозможен (Солнышко погаснет или человечество вымрет раньше), а другие методы решения современной науке неизвестны. Поэтому за решение и предлагают такие деньги. Однако я сам не утратил надежду довести решение до конца. Не ради денег, а исключительно из любви к искусству решения задач.
0
|
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 139
|
|
11.05.2006, 00:25 | 10 |
А можно поподробнее, пожалуйста, про задачу. Хочется тоже мозг понапрячь =).
Заранее спасибо.
0
|
Messir
|
|
11.05.2006, 07:49 | 11 |
|
2 / 2 / 0
Регистрация: 09.09.2009
Сообщений: 118
|
|
13.06.2006, 21:42 | 12 |
Есть такой язык Лисп (Lisp) называется по-моему. Помню как один научный сотрудник изучал его лет 15 назад и показывал результаты своего обучения. Например, программа выдала результат факториала уж не помню какого числа, но результатом было число, которое занимало целый лист при печати. Этот язык как раз для таких чисел используется :-)
0
|
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
|
|
16.06.2006, 14:40 | 13 |
Программы по работе с большими целыми числами на Ассемблере приведены в следующем учебнике:
http://download.ware.ru:8080/win/6853_ASSEMBER.chm
0
|
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
|
|
16.06.2006, 16:17 | 14 |
А вот еще одна реализация по работе с 256 битными числами (при желании можно модифицировать и на более чем 32 байта) для С++:
http://sources.codenet.ru/file/491/int256.cpp
0
|
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 7
|
|
21.06.2012, 09:17 | 15 |
Подскажите, если кто-нибудь писал программы для работы с длинными числами более 100 цифр.Есть ли что-то готовое в каком-нибудь языке или программе, или нужно писать с "нуля".
Спасибо.
0
|
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 139
|
|
23.06.2012, 20:30 | 16 |
Я сталкивался пару раз. Я просто сохранял число в виде #.#### и отдельную переменную на количество десятков. То есть если число превышает 10, то делим его на десять, а количеству десятков добавляем 1. Вроде того...
0
|
acrobat
|
|
23.06.2012, 21:04 | 17 |
То с чем я работал: в JAVA есть весьма удобные классы java.math.BigIntegerBigDecemical которые умеют хранить числа неограниченной длинны и производить операции над ними.
Неудобность заключается в том, что операции только самые базовые (+,-,*,mod, и еще несколько) и классы достаточно медлительные. (Если нужно писать быстрый алгоритм - советую Си говорят там тоже что-то есть) |
23.06.2012, 21:04 | |
23.06.2012, 21:04 | |
Помогаю со студенческими работами здесь
17
Работа с большими числами Работа с большими числами Работа с большими числами Работа с большими числами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |