Выходное значение из функции типа double - inf

При вычислении результата уравнения получаю inf, при том, перед тем как я запихнул его в функцию - он выводил адекватное число. Необходимо сделать конкретно через функцию, так что просто забить болт не вариант.

#include <stdio.h> //подключение библиотеки для ввода/вывода данных
#include <stdbool.h> //подключение библиотеки для логического типа данных

double second(double x, double y, double z, double b){ //функция вычисления
    return(x*z*y*-((32*x-17*x*2*z*2*y+12*y/x)/b)); //вычисление результата 
}

double check(double b){ //функция проверки;
    if (b != 0.0){return 0;} //проверка, не является ли знаменатель нулю. В случае, если нет - возвращается "0"
    else{return 1;} //проверка, не является ли знаменатель нулю. В случае, если нет - возвращается "1"
}

int main() //мейн
{
    double x, y, z, S2, b; //инициализация переменных участвующих в вычислениях
    bool w = 1; // инициализация переменной, что является переключателем цикла "while"
    
    while(w){
    printf("Input \"x\": "); //ввод данных с клавиатуры
    scanf("%lf", &x);
    printf("Input \"y\": ");
    scanf("%lf", &y);
    printf("Input \"z\": ");
    scanf("%lf", &z);
    double b = ((2*z-y)*2.5*y); //вычисление знаменателя
    w = check(b);} //проверка, не равняется ли знаменатель нулю
    
    printf("Result: %f", second(x,y,z,b)); //вывод результата 
    return 0; //возврат числа в мейн, ибо мейн типа "int"
}

Ответы (1 шт):

Автор решения: MBo

Уберите double перед b = ((2*z-y)*2.5*y); //вычисление знаменателя

Получается, что Вы даёте значение локальной переменной b блока while, а переменная более высокого уровня видимости с тем же именем, которая участвует в вычислениях - не инициализирована явно, и в Вашем случае нулевая (а вообще там может быть что угодно).

→ Ссылка