#c #function #arguments
#c #функция #аргументы
Вопрос:
Я пытаюсь ввести аргумент в функцию с квадратным корнем. Функция примет значение b, умноженное на b, но она не принимает значение b, умноженное на b минус 4. Почему это так? Как я могу обойти это? Заранее благодарю.
#include <stdio.h>
//Function to compute square root of a number
float squareRoot (float x)
{
float guess = 1.0;
while (( x/ (guess * guess)) != 1)
{
guess = (x/ guess guess) / 2.0;
}
return guess;
}
int main (void)
{
float b;
float valueOne;
float answerOne;
float squareRoot (float x);
printf("give me a 'b'n");
scanf("%f", amp;b);
valueOne = b*b-4;
answerOne = squareRoot(valueOne);
printf("%f", answerOne);
return 0;
}
Ответ №1:
Проверки на равенство с плавающей запятой обычно не выполняются. Вместо использования
( x/ (guess * guess)) != 1
замените его на
( x/ (guess * guess)) >1.0000001 || ( x/ (guess * guess)) <=0.99999999
что даст вам нормальную точность в большинстве практических случаев.