do / while loop is infinite and will not break or return proper number, however when printing the variable last_guess inside of the loop, I infinitely get the correct value I want to return.
#include <stdio.h>
#include <math.h>
double square_root(double number, double last_guess) {
double new_guess = 1;
if (number >= 0) {
do {
new_guess = 0.5 * (last_guess + number / last_guess);
last_guess = new_guess;
} while (new_guess > 0.005);
} else {
printf("Not a positive integer.");
}
if (new_guess < 0.005) {
last_guess = roundf(last_guess * 100.0) / 100.0;
return last_guess;
}
}
int main() {
double number, new_guess = 1.0;
double last_guess = 1.0;
printf("enter: ");
scanf("%lf", &number);
printf("enter: ");
scanf("%lf", &last_guess);
double final_value = square_root(number, last_guess);
printf("%d", final_value);
return 0;
}
You should iterate until the difference between successive guesses is small enough, not until the last guess is below the threshold.
Furthermore, you should use %e, %f or %g to convert a double value with printf, not %d.
Here is a modified version:
#include <stdio.h>
#include <math.h>
double square_root(double number, double last_guess) {
double new_guess = 1;
if (number >= 0) {
for (;;) {
new_guess = 0.5 * (last_guess + number / last_guess);
if (fabs(new_guess - last_guess) <= 0.00001 * new_guess)
break;
last_guess = new_guess;
}
return new_guess;
} else {
printf("Not a positive integer.");
return 0;
}
}
int main() {
double number, new_guess = 1.0;
double last_guess = 1.0;
printf("enter: ");
scanf("%lf", &number);
printf("enter: ");
scanf("%lf", &last_guess);
double final_value = square_root(number, last_guess);
printf("%g\n", final_value);
return 0;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With