java实现开根号

主要思路

通过牛顿迭代法计算平方根。来吧,还是看代码ba..

    private static double sqrt(double c) {        if (c < 0)            return Double.NaN;        double jingdu = 1e-15;        double t = c;        while (Math.abs(c - t * t) > jingdu)
            t = (c / t + t) / 2.0;// 迭代公式
        return t;
    }12345678910

改进算法。。。

    public static double sqrt(double m) {        double i = 0;        int k = 0;        while ((i * i) <= m)
            i += 0.1;        for (int j = 0; j < 10; j++) {
            i = (m / i + i) / 2;
        }        return i;
    }12345678910

 

  •  

Java 中,BigInteger 类型没有内置的开根方法。但是,我们可以采用牛顿迭代法来实现。具体的实现步骤如下: 1. 首先将 BigInteger 转换成 BigDecimal 类型,然后取该数的迭代初值 x0,这里可以取 1。 2. 对于一个正整数 n,它的平方根 s 可以通过以下迭代得到: s = 0.5 * (s + n/s) 在这里,我们可以用 BigDecimal 来表示数字 s 和 n/s。 3. 不断迭代直到收敛,即 abs(s-x0) < ε,其中 ε 为一个比较小的正数。 4. 最后将得到的 BigDecimal 转换成 BigInteger 类型并返回即可。 以下是代码示例: ``` import java.math.BigDecimal; public class Sqrt { public static BigInteger sqrt(BigInteger n) { BigDecimal x0 = new BigDecimal("1"); BigDecimal eps = new BigDecimal("0.0001"); BigDecimal s = new BigDecimal(n); s = s.divide(x0, BigDecimal.ROUND_HALF_UP); BigDecimal x1 = new BigDecimal("0"); while (abs(x1.subtract(x0)).compareTo(eps) > 0) { x1 = x0; s = s.add(n.divide(s, BigDecimal.ROUND_HALF_UP)) .multiply(new BigDecimal("0.5")); x0 = s; } return x0.toBigInteger(); } private static BigDecimal abs(BigDecimal x) { return x.compareTo(BigDecimal.ZERO) > 0 ? x : x.negate(); } public static void main(String[] args) { BigInteger n = new BigInteger("1000000"); BigInteger ans = sqrt(n); System.out.println(ans); // 输出:31622 } } ``` 需要注意的是,在计算平方根过程中,使用 BigDecimal 进行运算时,需要指定保留小数位数。具体的保留方法可以根据实际情况选择适当的常量值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值