java BigDecimal 开三次方

        /**
	 *  可能的方法之一是使用牛顿迭代法来计算。
	 * 首先,我们需要选择一个初始估计值。一种常见的选择是将  BigDecimal  的值转换为  double  类型,然后使用  double  的开方函数得到一个估计值。
	 * 然后,我们可以使用以下迭代公式来计算开三次方:
	 * x  =  (2  *  x  +  n  /  (x  *  x))  /  3
	 * 其中,x  是上一次迭代的结果,n  是我们要开三次方的  BigDecimal  值。
	 * 我们可以重复应用这个公式,直到结果收敛(即相邻两次迭代的结果差距小于一个极小值  ε)。
	 */
        public static BigDecimal cubeRoot(BigDecimal num,int fix) {
		double x = num.doubleValue();
		double y = Math.pow(x, 1.0 / 3.0);
		BigDecimal guess = BigDecimal.valueOf(y);
		BigDecimal prev;
		do {
			prev = guess;
			guess = BigDecimal.valueOf(2).multiply(prev)
					.add(num.divide(prev.multiply(prev), fix, RoundingMode.HALF_EVEN))
					.divide(BigDecimal.valueOf(3), fix, RoundingMode.HALF_EVEN);
		} while (prev.subtract(guess).abs().compareTo(BigDecimal.valueOf(EPSILON)) > 0);
		return guess;
	}
        public static void main(String[] args) {
            BigDecimal n = new BigDecimal("12345678901234567890123");
            BigDecimal cubeRoot = cubeRoot(n,4);
            System.out.println(cubeRoot);
        }
posted @ 2023-05-18 17:07  阿灿呀  阅读(502)  评论(0)    收藏  举报