Подтвердить что ты не робот

Что означает BigInteger без ограничения?

Я рассмотрел этот вопрос qaru.site/info/95975/..., и в частности я не понимаю эту строку (слова курсивом):

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

Я не знаю, чего мне не хватает, но для представления чего-то, что не имеет предела, вам понадобится бесконечная память? Что это за трюк?

4b9b3361

Ответ 1

Теоретического предела нет. Класс BigInteger выделяет столько памяти, сколько необходимо для всех битов данных, которые требуется удерживать.

Существуют, однако, некоторые практические пределы, продиктованные доступной памятью. Существуют и другие технические ограничения, хотя вы вряд ли будете подвержены влиянию: некоторые методы предполагают, что биты адресуются индексами int, поэтому начнутся разрывы, когда вы перейдете к битам Integer.MAX_VALUE.

Ответ 2

Грэм дал отличный ответ на этот вопрос. Я хотел бы только добавить, что вам нужно быть осторожным с методом valueOf, потому что он создается с использованием параметра long , поэтому максимальное значение Long.MAX_VALUE.

Ответ 3

Да, он используется, когда нам нужны очень большие числа с произвольной точностью. Важно отметить, что "произвольная" точность или количество цифр не означает "неограниченный": это означает, что количество цифр в количестве или количестве цифр точности в расчете ограничено памятью и/или определенными пределами точности которые мы указываем.

Ответ 4

Посмотрите на исходный код класса BigInteger, вы увидите (это можно сделать с помощью NetBean). Число будет представлено как int-массивы. Например, 10113 будет [1, 0, 1, 1, 3] (это не совсем то, что делает класс BigInteger, просто пример того, как работает большой модуль). Таким образом, технически единственным ограничением будет ваша память.