BigInteger когда-нибудь переполняется?

В документах API говорится

Все детали в Спецификации относительно переполнения проигнорированы, поскольку BigIntegers сделаны столь же крупными по мере необходимости для размещения результатов операции.

Это подразумевает, что BigInteger никогда не будет переполнять предположения, что Вы имеете достаточную память в наличии? Раз так, почему мы позволяем некоторому "типу" переполниться, и некоторые не делают?

Поскольку язык развивается, он будет способствовать типам, которые скрывают переполняющийся механизм от программистов?

11
задан Ravi Gupta 29 January 2010 в 18:12
поделиться

5 ответов

Biginteger никогда не преодолевает, если у вас достаточно памяти, чтобы справиться с ней.

Чтобы ответить на ваш вопрос о том, почему мы позволяем некоторым типам переполнения, а не другие:

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

Типы выполняют переполнение, потому что они просто пара байтов (точная сумма зависит от типа) памяти, и после того, как это небольшое количество переполнения памяти, так что делать номера.

Нет класса «Переполняет», если он не предназначен для этого (или если у вас закончится ресурсы). Класс определяется достаточно памяти для всего, что он содержит, что в основном будет ссылками на другие классы или другие структуры данных.

13
ответ дан 3 December 2019 в 04:32
поделиться

EntityLoad вернет массив объектов сущности, чтобы мы могли закольцевать его и использовать entityDelete:

<cfloop array="#allUsers#" index="User">
   <cfset entityDelete( User )>
</cfloop>

При удалении данных будьте осторожны! Я обычно предпочитаю мягкое удаление.

-121--4631785-

BigInteger никогда не переполняется! Он имеет произвольный размер, поэтому он может вместить число, равное размеру памяти (и Java-кучи).

-121--2929471-

Вы прочитали его правильно , он никогда не переполнится. Хотя, он не создаст больше оперативной памяти для вас:)

Семантика арифметических операций точно имитируют целые числа Java арифметические операторы, как определено в Спецификация языка Java. Для например, деление на ноль бросает ArithmeticException и деление отрицательный на положительный выход отрицательный (или нулевой) остаток. Все из подробности в спецификации, касающиеся переполнение игнорируется, так как BigIntegers сделаны настолько большими, насколько это необходимо для учитывать результаты операция.

5
ответ дан 3 December 2019 в 04:32
поделиться

Biginteger никогда не переполняется! Это произвольный размер, поэтому он может разместить число, так как ваша память (и куча Java) может разместиться.

2
ответ дан 3 December 2019 в 04:32
поделиться

Правильно, BigInteger никогда не переполняется, он использует программные операции и динамическое распределение для хранения произвольных чисел.

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

2
ответ дан 3 December 2019 в 04:32
поделиться

, если Так почему же мы позволяем некоторому «типу» переполнению и некоторые нет?

, что полностью зависит от того, как он поддерживается. Если он поддерживается, например, простой примитив ванили int , то он, очевидно, переполняется в integer.max_value . Примитивы имеют четкие границы переполнения, в то время как те для объектов зависит от того, как они поддерживаются / запрограммированы.

2
ответ дан 3 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: