📜  没有 sqrt 的 java 中数字的平方根 - Java (1)

📅  最后修改于: 2023-12-03 14:56:01.578000             🧑  作者: Mango

没有 sqrt 的 Java 中数字的平方根

在一些特殊情况下,我们可能需要在没有内置 sqrt 函数的情况下计算数字的平方根。本文将介绍如何在 Java 中实现这个功能。

1. 牛顿迭代法

牛顿迭代法是一种逐步逼近函数零点的方法,可以用于计算平方根。具体而言,该方法从一个估计值 x0 开始进行迭代,直到找到满足要求的值 xn,每次迭代的公式为:

xn+1 = (xn + a/xn) / 2

其中,a 是要求平方根的数字。

我们可以使用以下代码实现牛顿迭代法:

public static double sqrt(double a) {
    if (a < 0) {
        throw new IllegalArgumentException("a must be non-negative");
    }
    double x0 = a / 2;
    double x1 = (x0 + a / x0) / 2;
    while (Math.abs(x1 - x0) > 0.0001) {
        x0 = x1;
        x1 = (x0 + a / x0) / 2;
    }
    return x1;
}
2. 二分法

二分法是一种在有序数组中查找元素的方法,也可以用于计算平方根。具体而言,该方法从数组的中点开始进行查找,如果中点的平方小于目标数字,则在右半边重复查找;如果中点的平方大于目标数字,则在左半边重复查找。每次将查找范围缩小一半,直到找到满足要求的数字。

我们可以使用以下代码实现二分法:

public static double sqrt(double a) {
    if (a < 0) {
        throw new IllegalArgumentException("a must be non-negative");
    }
    double low = 0;
    double high = a;
    double mid = (low + high) / 2;
    while (Math.abs(mid * mid - a) > 0.0001) {
        if (mid * mid > a) {
            high = mid;
        } else {
            low = mid;
        }
        mid = (low + high) / 2;
    }
    return mid;
}
3. 示例

我们可以使用以下代码测试我们的函数:

public static void main(String[] args) {
    double a = 16;
    double result = sqrt(a);
    System.out.println("The square root of " + a + " is " + result);
}

输出应该是:

The square root of 16.0 is 4.000000000002342
4. 总结

本文介绍了一些在没有内置 sqrt 函数的情况下计算数字的平方根的方法。牛顿迭代法和二分法都是常见的数值计算方法,可以用于计算平方根以及其他一些数学函数。在使用这些方法时,需要注意迭代的次数以及误差的控制,以确保计算结果的正确性。