Я умножал очень два огромных значения BigInteger в программе. Это не удалось. Каковы пределы BigInteger
и BigDecimal
?
Каковы пределы BigDecimal и BigInteger?
Ответы (2)
Вы не получите NumberFormatException, умножая большие числа. Если полученное число слишком велико, вы получите загадочное исключение NegativeArraySizeException, поскольку размер массива переполняется.
У вас больше шансов получить ошибку нехватки памяти.
Предел составляет 32 * 2 ^ 32-1 бит для BigInteger или около 2 ^ (4 миллиарда).
Вы можете получить исключение NumberFormatException, если вы
- создать BigInteger из пустого байта[]
- используйте знак ‹ -1 или > +1
- попробуйте разобрать число по основанию >36 или ‹ 2
- есть строка с недопустимыми цифрами.
Когда вы получаете исключение, вы также должны посмотреть на сообщение и трассировку стека, поскольку это обычно дает вам реальную причину.
person
Peter Lawrey
schedule
30.07.2013
Означает ли это, что вы действительно можете иметь отрицательные индексы массива? В противном случае было бы 2^31-1
- person Ingo; 30.07.2013
ограничения быть не должно, кроме памяти, но может и есть, согласно реализации класса (например, какие-то поля там могут быть int или long).
person
android developer
schedule
30.07.2013
Как указал Питер, это ограничение является косвенным и вытекает из типа индексации массива: Int. Поскольку Big... поддерживается int[], у вас не может быть такого индекса, как 8888888888888888888888888888888888. (Но вы, скорее всего, получите OutOfMemory раньше).
- person Ingo; 30.07.2013
это потому, что максимальное количество элементов для массива, которое является оперативной памятью (хорошо, деленное на 4, что является размером int)? Интересно, сколько оперативной памяти необходимо для хранения этого количества.
- person android developer; 30.07.2013
На машине с 64-битным адресным пространством у вас может быть массив целых чисел размером 2^62. (и ничего больше) Но задолго до этого ограничения вступает в действие Java, потому что вы не можете использовать long для индексации массива.
- person Ingo; 30.07.2013
так что предел реализации - это то, что написал Питер (и он уменьшил его на 1 из-за отрицательных чисел)?
- person android developer; 30.07.2013
NumberFormatException
возникает при умножении? Можете ли вы показать свой код? Проблема может быть в другом. - person mthmulders   schedule 30.07.2013multiply
не бросаетNumberFormatException
. Покажи свой код... - person assylias   schedule 30.07.2013