< 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 >