The Problem Your first job is to create a Java program that repeatedly asks the
ID: 640283 • Letter: T
Question
The Problem
Your first job is to create a Java program that repeatedly asks the user whether they wish to calculate another square root. If the response is "y", then the program should proceed; if it is anything else, then the program should quit. Whenever it proceeds, the program should prompt the user for a number (a positive double , and your program may simply assume the input is consistent with this requirement) and then report the square root of that number to within a relative error of no more than 0.01%. The computation must be done using Newton iteration.
The intuitive idea of Newton iteration for computing square roots is fairly straightforward. Suppose you have a guess r for x1/2 that is too large; the argument is similar if it is too small. If r is too large to be the square root of x, then x/r must be too small, so the average of r and x/r should be a better guess than either r or x/r. This suggests that if you repeatedly replace your current guess r by (r + x/r)/2, then your sequence of guesses should converge to x1/2. And indeed it can be proved that it does. A good initial guess for x1/2 is simply r = x. If you continue updating r until |r2
Explanation / Answer
import java.util.Scanner;
public class SqaureRoot {
public static double sqrt(double n) {
double guess = n / 2;
if (n < 0) {
System.out.println("Can't find square root of a negative number");
guess = -1;
} else {
double pctDiff = Double.MAX_VALUE;
double lastGuess = guess;
while (Math.abs(pctDiff) >= 0.01) {
double r = n / guess;
guess = (guess + r) / 2;
pctDiff = ((guess - lastGuess) / lastGuess);
lastGuess = guess;
}
}
return guess;
}
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
String l = new String();
while(true){
System.out.print("do you wish to calculate a square root: ");
l = input.nextLine();
if(l.equalsIgnoreCase("y")){
System.out.print("Enter number to compute the square root of: ");
double n = input.nextDouble();
double guess = sqrt(n);
System.out.println("The estimate of the square root of " + n + " is " + guess);
input.nextLine();
}
else{
break;
}
}
System.out.println("End of Program");
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.