使用近似值和循环求平方根
Finding square roots using approximations and loop
这个程序应该取一个非负整数并求平方根
一个非负数n的平方根可以连续计算
近似值。在每一步,新的近似计算如下:
next approximation = (n / current + current) / 2
近似过程一直持续到值足够接近为止,
也就是说,(current * current) 和 n 之间的差异足够小
可以接受。
但是,当我打印我的答案时,什么也没有出现。我究竟做错了什么。我的循环工作不正常吗?
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class Squareroot1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a non negative integer: ");
double n = in.nextInt();
double result = approx(n);
/*double current = result;
while ((current * current)- n == Math.sqrt(n)) {
double nextapproximation = (n/current + current)/2;
nextapproximation = current;
System.out.println(nextapproximation);
}*/
System.out.println( result);
}
public static double approx(double val) {
double current = val;
double approximation = (val / current + current) / 2;
return approximation;
}
}
您有几个问题:
1) 你的 while 循环条件应该是:
while ((current * current) - n != 0)
2) 您没有将 current
设置为 nextapproximation
的值
3) 您没有打印出最终结果(应该是最新的)。
代码:
double result = aprox(n);
double current = result;
while ((current * current) - n != 0)
{
double nextapproximation = (n / current + current) / 2;
// Stop infinite loop
if (nextapproximation == current)
{
break;
}
current = nextapproximation;
System.out.println(current);
}
System.out.println("Result: " + current);
测试运行:
Enter a non negitive integer: 23
6.958333333333333
5.131861277445109
4.806832989404423
4.795844112917605
4.795831523329245
4.795831523312719
Result: 4.795831523312719
编辑:
您不需要 aprox
方法,也不需要 result
变量。
在 while 循环之前简单地做:
double n = in.nextInt();
double current = (n / n + n) / 2;
这个程序应该取一个非负整数并求平方根
一个非负数n的平方根可以连续计算
近似值。在每一步,新的近似计算如下:
next approximation = (n / current + current) / 2
近似过程一直持续到值足够接近为止, 也就是说,(current * current) 和 n 之间的差异足够小 可以接受。 但是,当我打印我的答案时,什么也没有出现。我究竟做错了什么。我的循环工作不正常吗?
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class Squareroot1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a non negative integer: ");
double n = in.nextInt();
double result = approx(n);
/*double current = result;
while ((current * current)- n == Math.sqrt(n)) {
double nextapproximation = (n/current + current)/2;
nextapproximation = current;
System.out.println(nextapproximation);
}*/
System.out.println( result);
}
public static double approx(double val) {
double current = val;
double approximation = (val / current + current) / 2;
return approximation;
}
}
您有几个问题:
1) 你的 while 循环条件应该是:
while ((current * current) - n != 0)
2) 您没有将 current
设置为 nextapproximation
3) 您没有打印出最终结果(应该是最新的)。
代码:
double result = aprox(n);
double current = result;
while ((current * current) - n != 0)
{
double nextapproximation = (n / current + current) / 2;
// Stop infinite loop
if (nextapproximation == current)
{
break;
}
current = nextapproximation;
System.out.println(current);
}
System.out.println("Result: " + current);
测试运行:
Enter a non negitive integer: 23
6.958333333333333
5.131861277445109
4.806832989404423
4.795844112917605
4.795831523329245
4.795831523312719
Result: 4.795831523312719
编辑:
您不需要 aprox
方法,也不需要 result
变量。
在 while 循环之前简单地做:
double n = in.nextInt();
double current = (n / n + n) / 2;