Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с числами больше long / 12 сообщений из 12, страница 1 из 1
22.04.2007, 18:38:03
    #34478784
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Здравствуйте!
Стоит задача обрабатывать числа очень больших размеров порядка 50 возведенное в степень 100, либо чуть меньше.
Может подскажете, где можно почитать, либо как такое можно сделать?

Заранее ОГРОМНОЕ СПАСИБО!!!!!
...
Рейтинг: 0 / 0
22.04.2007, 20:11:00
    #34478866
chand0s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Код: plaintext
1.
java.math.BigInteger
java.math.BigDecimal
уже смотрели?
...
Рейтинг: 0 / 0
22.04.2007, 20:35:52
    #34478898
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Я еще не в курсе как это можно применить.
Если просто написать import java.math.BigInteger; то тот же long остался прежней длинны.
Может подскажете как можно его правильно использовать? :)
...
Рейтинг: 0 / 0
22.04.2007, 21:01:20
    #34478928
chand0s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 import  java.math.BigInteger;

 public   class  Main {
    
     public   static   void  main(String[] args){
        BigInteger i = BigInteger.valueOf( 50 ).pow( 100 );
        System.out.println(i.toString());
    }    
}
Этот пример выводит на консоль число 50 100
...
Рейтинг: 0 / 0
22.04.2007, 21:04:52
    #34478934
chand0s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
P.S. подробности о классе BigInteger
...
Рейтинг: 0 / 0
23.04.2007, 18:08:32
    #34481479
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Спасибо!!
Действительно все просто оказалось. :)
Но есть небольшая загвоздка:
можно ли использовать в этом вырвжении
BigInteger i = BigInteger.valueOf(А).pow(В);
вместо А и В те же BigInteger?
На сколько я понимаю, то нет.
А приобразовать BigInteger в Int не выходит (не знаю как).
Для чего это все надо:
есть элемент
A = (long)Math.pow(g,a)%p;
где Math.pow(g,a) во много больше максимального числа типа long и при вычислении этого значения он поступает так - (максимальное число long)%р


МОжет есть варианты решения такой проблеммы?
Спасибо большое!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
23.04.2007, 22:22:52
    #34481927
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
light_retСпасибо!!
Для чего это все надо:
есть элемент
A = (long)Math.pow(g,a)%p;
где Math.pow(g,a) во много больше максимального числа типа long и при вычислении этого значения он поступает так - (максимальное число long)%р


МОжет есть варианты решения такой проблеммы?
Спасибо большое!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Непонятно, у вас g и a сами по себе, что ли, не укладываются в long? Если укладываются, то что мешает так сделать?
Код: plaintext
1.
2.
3.
4.
BigInteger g1 = BigInteger.valueOf(g);
BigInteger a1 = BigInteger.valueOf(a);
BigInteger p1 = BigIntgeger.valueOf(p1);
BigInteger result = g1.modPow(a1, p1); 
...
Рейтинг: 0 / 0
24.04.2007, 06:31:38
    #34482135
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
light_retСпасибо!!
Действительно все просто оказалось. :)
Но есть небольшая загвоздка:
можно ли использовать в этом вырвжении
BigInteger i = BigInteger.valueOf(А).pow(В);
вместо А и В те же BigInteger?

есть BigInteger(String _);//"12343313543645663453453413212312131123"
есть pow(int _)
Не представляю зачем нужно число в степени больше чем 2147483647
Код: plaintext
1.
BigInteger B123= new  BigInteger("123");
 int  C123=( int )B123.longValue();
...
Рейтинг: 0 / 0
24.04.2007, 09:54:34
    #34482384
chand0s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
LINUXER[quot light_ret]
Код: plaintext
1.
2.
BigInteger B123= new  BigInteger("123");
 int  C123=( int )B123.longValue(); // ??????????


странная строка, особенно если вспомнить что есть метод BigInteger.intValue()
...
Рейтинг: 0 / 0
24.04.2007, 22:40:21
    #34484913
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Здравствуйте!
На самом деле все числа в результате получаются маленкими, но при вычислении такого выражения A = (long)Math.pow(g,a)%p; выходит такая закономерность:
внчале вычисляется Math.pow(g,a), которое, к примеру будет равно 999999999999999999999999999999, а максимальное значение лонга 9223372036854775807, так вот - получается, что вместо A = 999999999999999999999999999999 % p; он вычисляет A = 9223372036854775807 % p; и в итоге результат не верный.

Вот с этим и боримся :)
Может кто-то может обьяснить, как это решить?
Спасибо большое, что помогаете!
...
Рейтинг: 0 / 0
25.04.2007, 18:51:29
    #34487666
Amigo111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
Если вы используете BigInteger или BigDecimal, то забудьте про лонги и флоаты..В чем проблема собственно?
...
Рейтинг: 0 / 0
25.04.2007, 19:01:43
    #34487699
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с числами больше long
А просто прочитать JavaDoc лень, чтобы найти это
BigInteger[] divideAndRemainder(BigInteger val)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с числами больше long / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]