2017-02-13 22 views
0

Есть ли готовая библиотека Java для операций над объектами BigInteger и BigDecimal?Квадратные корневые и ++ операторы для BigInteger и BigDecimal

Я хотел бы использовать операторов с квадратным корнем и ++.

Спасибо

P.S. BigInteger.add() следует использовать вместо ++, я получил его. Как насчет квадратного корня из BigInteger?

+0

Ну, вы изучили документацию для классов? – Kayaman

+0

Да и, к сожалению, я не нашел ни слова о том, как получить квадрат от BigInteger – sunny

+0

@sunny, если вы посмотрите на мой ответ, вы обнаружите, что нет необходимости в специальном методе 'square()'. Простое умножение выполняет задание. –

ответ

2

BigIntegerнепреложный. Это делает что-то вроде ++ -оператор на нем концептуально невозможным. Вы не можете изменить значение заданного BigInteger, как вы не можете сделать это с String.

Приращение

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

Edit: Как было отмечено в комментарии, "Приращение" будет выглядеть следующим образом:

BigInteger result = a.add(BigInteger.ONE); 

или

a = a.add(BigInteger.ONE); 

Обратите внимание, что обе линии не Смените значение BigInteger, который a изначально указывает на. Последняя строка создает новый BigInteger и сохраняет ссылку на него в a.

Расчет на площади

Вы можете вычислить квадрат BigInteger как это:

BigInteger a = BigInteger.valueOf(2); 
BigInteger a_square = a.multiply(a); // a^2 == a * a 

или

BigInteger a_square = a.pow(2); 

квадратный корень

Код взят из https://gist.github.com/JochemKuijpers/cd1ad9ec23d6d90959c549de5892d6cb. Он использует простую биссектрису и умную верхнюю границу. Обратите внимание, что a.shiftRight(x) эквивалентно a/2^x (только для неотрицательных чисел, но это все, что мы имеем дело с, во всяком случае)

BigInteger sqrt(BigInteger n) { 
    BigInteger a = BigInteger.ONE; 
    BigInteger b = n.shiftRight(5).add(BigInteger.valueOf(8)); 
    while (b.compareTo(a) >= 0) { 
     BigInteger mid = a.add(b).shiftRight(1); 
     if (mid.multiply(mid).compareTo(n) > 0) { 
      b = mid.subtract(BigInteger.ONE); 
     } else { 
      a = mid.add(BigInteger.ONE); 
     } 
    } 
    return a.subtract(BigInteger.ONE); 
} 

Использование операторов Вместо методов

Оператор перегружать как в C++ не является возможно в Java.

+0

, чтобы увеличить 'BigInteger' использование' BigInteger result = a.add (BigInteger.ONE); ' – matoni

+0

thnk you, получил это – sunny

+0

, чтобы быть полным, добавьте также этот квадратный вариант' BigInteger result = a.pow (2); ' – matoni

 Смежные вопросы

  • Нет связанных вопросов^_^