Неинициализированная переменная P на C++

Я писал код к следующем задаче: В партии, состоящей из K изделий, имеются L дефектных. Выбираются для контроля из партии R изделий. Найти вероятность того, что партия будет забракована. Партия бракуется, если среди контрольных окажется более S дефектных изделий. Должно быть при вводе L< k и r <k.Если L<S или R<=S, то партия не бракуется.
Искомая вероятность: введите сюда описание изображения введите сюда описание изображения

#include<iostream>
#include<math.h>
using namespace std;
int i;
float fact(int a)
{
    if (a < 0)
        return 0;
    if (a == 0 || a == 1)
        return 1;
    long f = 1;
    for (i = 2; i <= a; i++)
        f *= i;
    return f;
}
float C(float x, float y)
{
    float pi;
    pi = fact(x) / (fact(x - y) * fact(y));
    return pi;
}
int main()
{
    int R, L, K, S;
    float P{};
    setlocale(LC_ALL, "Rus");
    system("color f0");
    //cout << "Введите переменные K,L,R так, чтобы они соответствовали следующим условиям: L < K && R < K\n";
    cout << "Введите количество изделий в партии: \n";
    cin >> K;
    cout << "Введите количество дефектных изделий в партии: \n";
    cin >> L;
    cout << "Введите количество изделий, взятых для контроля: \n";
    cin >> R;
    cout << "Введите количество дефектных изделий, найденных в контрольной партии: \n";
    cin >> S;
    
    if (L < K && R < K)
    {
        for (i=S + 1; R<i; i++)
        P += C(i,L) * C(R-i,K-L) / C(R,K);
        if (L < S || R <= S)
        {
            cout << "\nПартия не бракуется\n";
        }
    cout << "Вероятность забраковки партии = " << P*100 << "% \n";
    }
    else
    {cout << "Неверный ввод данных " << '\n';}
    return 0;
}

Код запускается, но выдаёт странное значение: -1.07374e+10%, однако перед тем, как выдать это значение, выдаёт следующую ошибку: Run-Time Check Failure #3 - The variable 'P' is being used without being initialized. Если ввести в начале P=0, то будет выдаваться постоянно значение 0. Помогите пожалуйста исправить это предупреждение, которое мешает правильной работе программы.


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

Автор решения: Никита

Ошибка была исправлена, поменяв в строке объявления функции C, поменять местами float x и float y, что выглядело так: float C(float y, float x). Это сделано для того, что бы не получался отрицательный ответ, т.к. до этого выдавало, либо 0, либо -nan(ind). Далее я заметил, что в строке for (i=S + 1; R<i; i++), R<i, а такого не может быть ведь допустим, если R=4(количество изделий в контрольной), то i = S + 1 будет в любом случае меньше, либо равно R, т.к. S - количество найденных дефектных изделий, найденных в контрольной партии. Поэтому я исправил это условие на i<=R, после чего программа стала работать. Спасибо @Kotomi за помощь.

→ Ссылка