Я пытаюсь вычислить квадратный корень из числа, используя функцию, содержащую цикл while. В условиях цикла while я хочу сравнить абсолютное значение отношения двух значений, угаданного квадратного корня и числа, до 1. Однако, всякий раз, когда я запускаю программу, я продолжаю получать бесконечный цикл, выводящий 1.414214. Любая помощь? Благодарю.Использование цикла while для вычисления аппроксимации квадратного корня из числа
// Function to calculate the absolute value of a number
#include <stdio.h>
float absoluteValue (float x)
{
if (x < 0)
x = -x;
return (x);
}
// Function to compute the square root of a number
float squareRoot (float x, const float epsilon)
{
float guess = 1.0;
while (absoluteValue ((guess * guess)/x) != epsilon) {
guess = ((x/guess) + guess)/2.0;
printf("%f\n", guess);
}
return guess;
}
int main (void)
{
printf ("squareRoot (2.0) = %f\n", squareRoot (2.0, 1.0));
printf ("squareRoot (144.0) = %f\n", squareRoot (144.0, 1.0));
printf ("squareRoot (17.5) = %f\n", squareRoot (17.5, 1.0));
return 0;
}
Подсказка. Тестирование значений с плавающей запятой для точного равенства почти всегда является ошибкой. –
Ваша петля никогда не заканчивается, потому что условие петли не выполняется. Узнайте, почему он не удовлетворен. Если он должен быть удовлетворен. – Imprfectluck
Добавьте это в свой цикл while, если вы хотите увидеть, почему: 'printf ("% f \ n ", absoluteValue ((угадать * угадать)/x));' –