Реализация Java BigInteger - PullRequest
       9

Реализация Java BigInteger

0 голосов
/ 08 октября 2018

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

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

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

Итак, последний вопрос - является ли BigInteger уже эффективнымдостаточно, и я должен просто положиться на это?Было бы лучше узнать это, а не подвергать его испытанию без необходимости, что заняло бы много времени.

Спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

По крайней мере с Oracle Java 8 и OpenJDK 8, он не хранит одну десятичную цифру на int.Он хранит полные 32-битные порции на 32-битную int в int[], что можно увидеть с его исходным кодом .

Битовые операции выполняются быстро, так какзначение знака и величина хранятся в упакованном виде, как и следовало ожидать, просто убедитесь, что вы используете соответствующие BigInteger побитовые методы , а не реализуете свои собственные.

Есливам все еще нужно больше скорости, попробуйте что-то вроде GMP , хотя имейте в виду, что он использует лицензию LGPL или GPL.Также было бы лучше использовать его за пределами Java.

...