java 大整數開方模板與常用方法
阿新 • • 發佈:2019-02-19
BigInteger開方:
public static BigInteger Sqrt(BigInteger xx) { BigDecimal x=new BigDecimal(xx); BigDecimal n1=BigDecimal.ONE; BigDecimal ans=BigDecimal.ZERO; while((n1.multiply(n1).subtract(x)).abs().compareTo(BigDecimal.valueOf(0.001))==1) { BigDecimal s1=x.divide(n1,2000,BigDecimal.ROUND_HALF_UP); BigDecimal s2=n1.add(s1); n1=s2.divide(BigDecimal.valueOf(2),2000,BigDecimal.ROUND_HALF_UP); } ans=n1; BigInteger rt =new BigInteger(ans.toString().split("\\.")[0]); return rt; }
BigDecimal開方:
private static BigDecimal sqrtIteration(BigDecimal x, BigDecimal n) { return x.add(n.divide(x, MathContext.DECIMAL128)).divide(new BigDecimal("2"), MathContext.DECIMAL128); } public static BigDecimal sqrt(BigDecimal num) { if(num.compareTo(BigDecimal.ZERO) < 0) { return BigDecimal.ZERO; } BigDecimal x = num.divide(new BigDecimal("2"), MathContext.DECIMAL128); while(x.subtract(x = sqrtIteration(x, num)).abs().compareTo(new BigDecimal("0.0000000000000000000001")) > 0); return x; }
基礎用法: