< prev index next >
src/java.base/share/classes/java/math/BigDecimal.java
Print this page
*** 2202,2211 ****
--- 2202,2234 ----
if (this.subtract(result.multiply(result)).compareTo(ZERO) != 0) {
throw new ArithmeticException("Computed square root not exact.");
}
} else {
result = approx.scaleByPowerOfTen(-scaleAdjust/2).round(mc);
+
+ switch (targetRm) {
+ case DOWN:
+ case FLOOR:
+ // Check if too big
+ if (result.multiply(result).compareTo(this) > 0 ) {
+ result = result.subtract(result.ulp());
+ }
+ break;
+
+ case UP:
+ case CEILING:
+ // Check if too small
+ if (result.multiply(result).compareTo(this) < 0 ) {
+ result = result.add(result.ulp());
+ }
+ break;
+
+ default:
+ // Do nothing for half-way cases
+ break;
+ }
+
}
if (result.scale() != preferredScale) {
// The preferred scale of an add is
// max(addend.scale(), augend.scale()). Therefore, if
< prev index next >