BigInteger или не BigInteger?
В Java большинство примитивных типов подписаны (один бит используется для представления +/-), поэтому, когда я превышу пределы типа, я могу получить неожиданные результаты, например отрицательные числа.
Есть ли лучшее решение, чем использование BigInteger для этого, так как BigInteger имеет проблемы с производительностью, и вам нужно использовать методы класса для базовой арифметики вместо операторов языка (читаемость развалин)?
Ответы
Ответ 1
Нет, лучшего решения нет. Если вы работаете со значениями, которые не могут вписаться в длинный или двойной, вам нужно будет использовать ссылочный тип типа BigInteger
, а Java не поддерживает перегрузку оператора.
Технически я предполагаю, что у вас может быть какое-то сопоставление между подписанными и неподписанными значениями, но если ваша цель - чистый и простой код, то это не совсем так.
Ответ 2
Scala действительно является решением здесь. В этом языке "операторы" на самом деле являются только встроенными методами и могут быть определены для произвольных классов. Фактически, в вашем случае они уже находятся в стандартной библиотеке. Таким образом, вы можете иметь мощь специальных представлений чисел, но чистый синтаксис примитивных типов Java.
Scala защищен от боев и будет полностью совместим с вашим кодом Java.
Ответ 3
Единственный способ по-прежнему иметь красивую логику buisiness - использовать язык script, который вы компилируете в классы java. Внутри вы можете использовать BigIntegers.