Существуют ли библиотеки для квадратного корня над BigDecimal в Java?
Существуют ли библиотеки для квадратного корня над BigDecimal?
Ответ 1
JScience v4.3.1 имеет Real
класс, который кажется эквивалентным BigDecimal
, и это может вам помочь. Пример использования:
// The Square Root of Two, to 30 digits
// According to "The Square Root of Two, to 5 million digits."
// Source: http://www.gutenberg.org/files/129/129.txt
System.out.println("1.41421356237309504880168872420");
// Using JScience with 50 digits precision
Real.setExactPrecision(50);
System.out.println(Real.valueOf(2).sqrt());
// Using default java implementation
System.out.println(Math.sqrt(2));
> 1.41421356237309504880168872420
> 1.414213562373095048801689
> 1.4142135623730951
Изменить. Обновлен код и ссылки, чтобы отразить текущую версию в то время (v4.3.1). Основываясь на комментариях @ile @Tomasz, спасибо.
Ответ 2
Попробуйте Корень больших квадратов. Он использует метод
Ответ 3
(Это может быть не решение для вас)
Пока ваш BigDecimal находится в диапазоне double, вы можете преобразовать BigDecimal в double, использовать Math.sqrt() и продвинуть двойную обратно в BigDecimal. Вероятно, это будет быстрее, чем выполнить расчет на BigDecimals. Во многих случаях потеря точности из-за преобразования между типами будет незначительной по сравнению с неизбежной ошибкой при вычислении квадратного корня.