Почему BIGInteger в JAVA не отвечает за высшие силы? - PullRequest
0 голосов
/ 15 июня 2009

Когда я пытаюсь найти значение типа данных BigInteger для 2 23 000 , я не могу увидеть это значение.

Однако для расчетов до 2 22 000 я мог бы без проблем отобразить значение BigInteger.

Есть ли какое-либо решение или причина для этого?

Ответы [ 4 ]

8 голосов
/ 15 июня 2009

Я попробовал следующее, чтобы создать BigInteger представление 2^23000:

BigInteger bi = new BigInteger("2");
bi = bi.pow(23000);
System.out.println(bi);

И отображаемое число было очень большим, охватывающим 6925 цифр. (Я не буду вставлять его здесь, поскольку он будет занимать более 100 строк.)

Это с Java 6 SE версии 1.6.0_12 в Windows XP.

Согласно спецификации API, BigInteger - это целочисленное значение произвольной точности, которое означает, что оно должно справляться с очень большими целочисленными значениями.

4 голосов
/ 15 июня 2009

У меня работает нормально на GNU / Linux. Что вы имеете в виду, что вы не можете "показать" это? Какой у вас код и какую ошибку / проблему вы получаете?

1 голос
/ 15 июня 2009

этот предел для BigInteger составляет около 2 ^ 16 миллиардов, хотя было отмечено, что некоторые функции работают некорректно после примерно 2 ^ 2 миллиардов.

Я предполагаю, что ваша консоль или IDE имеют проблемы с отображением очень длинных строк.

0 голосов
/ 15 июня 2009

Вам нужно все это? Существует также метод BigInteger.modpow (power, modulus), который повышает целочисленное значение до указанной мощности и возвращает% результата модуля - обычно используется в криптографии. Это также НАМНОГО быстрее при работе с очень большими показателями.

...