java - 创建一个不使用 Math.sqrt 计算数字平方根的程序

标签 java

这是可用于计算数字平方根的公式。

result=(guess+(number/guess))/2;

例如,我需要求出 9 的平方根。首先,我需要进行猜测。对于这个,它是 6。虽然我知道 9 的平方根是 3,但我还是选择了 6 来展示程序应该如何工作。

这使得...

result=(6+(9/6))/2 which is equal to 3.75. 

要获得 9 的实际平方根,我需要将结果作为新的猜测。程序应该继续...

result=(3.75+(9/3.75))/2 which is equal to 3.075.

这个过程要一直持续到结果和结果差为0之后,例如

result=(3+(9/3))/2 is always equal to 3. 

当result的值传给guess时,下一个结果也会是3,也就是说3是9的平方根。

这是我的代码:

package javaPackage;

public class SquareRoot {

    public static void main(String[] args) {
        calcRoot();
    }

    public static void calcRoot(){
        double num=9;
        double guess=6;
        double result=0;

        while(Math.abs(guess-ans)!=0){
            result=(guess+(num/guess))/2;       
            guess=result;
        }
    System.out.print(result);
    }
}

输出

3.75

我的问题是我无法将结果的值与之前的结果进行比较。由于猜测等于结果,程序立即因为猜测和结果已经相等。我该如何解决?

最佳答案

只需交换 while 循环中的两个语句(以及避免被零除的初始化):

public static void calcRoot(){
    double num=9;
    double guess=0;
    double result=6;

    while(Math.abs(guess-result)!=0){
        guess=result;
        result=(guess+(num/guess))/2;       
    }
System.out.print(result);
}

诀窍是在执行测试时让旧值仍在 guess 中,而新值在 result 中。

并且您不应该测试 != 0,由于舍入误差,这可能无法实现。更好地测试一些小值 >= 1e-7

关于java - 创建一个不使用 Math.sqrt 计算数字平方根的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013004/

相关文章:

java - Applet在服务器上执行程序

java - 如何在 OpenNLP 中使用自定义分割字符扩展 SentenceDetector?

java - Spring Boot使用http请求头进行分页

java - 如何在java swing中自动更改图像?

java - Android - 将屏幕转回关闭模式

java - 阶乘递归中的用户输入?

java - 什么是NullPointerException,我该如何解决?

java - XP 上的 Java 程序是否会像在 Windows 7 上一样运行

java - 从 java 执行进程并使其保持 Activity 状态以供输入

Java数字减法,分解第二个数字的和为1