After changing `BigInteger.sqrt()` algorithm, this can be also used to speed up 
`BigDecimal.sqrt()` implementation. Here is how I made it.

The main steps of the algorithm are as follows:
first argument reduce the value to an integer using the following relations:

x = y * 10 ^ exp
sqrt(x) = sqrt(y) * 10^(exp / 2) if exp is even
sqrt(x) = sqrt(y*10) * 10^((exp-1)/2) is exp is odd

Then use BigInteger.sqrt() on the reduced value to compute the numerical digits 
of the desired result.

Finally, scale back to the desired exponent range and perform any adjustment to 
get the preferred scale in the representation.

-------------

Commit messages:
 - Merge branch 'openjdk:master' into patchBigDecimalSqrt
 - Change BigDecimal.sqrt() implementation

Changes: https://git.openjdk.org/jdk/pull/21301/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21301&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8341402
  Stats: 302 lines in 2 files changed: 109 ins; 129 del; 64 mod
  Patch: https://git.openjdk.org/jdk/pull/21301.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21301/head:pull/21301

PR: https://git.openjdk.org/jdk/pull/21301

Reply via email to