Существуют ли исключения для аргументов функции?

#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

что даст вам нормальную точность в большинстве практических случаев.