Witam wszystkich, ostatnio za pomoca programu komputerowego próbowałem rozwiązać następujące zadanie matematyczne zwane "Paradoksem dnia urodzin". Ile minimalnie osób należy wybrać, żeby prawdopodobieństwo znalezienia wśród nich co najmniej dwóch osób obchodzących urodziny tego samego dnia było większe od 0,5.Program poprawnie policzył ,że dla grupy liczacej 23 osoby prawdopodobieństwo tego zdarzenia jest większe niż 0,5. Jednakże kiedy wpisywałem liczbe osób(n) >=108 to otrzymywałem że prawdopodobieństwo jest równe 100% co jest błędem gdzyż taki wynik możemy otrzymać tylko wtedy gdy liczba osób(n) >=366. Co musze zrobic aby naprawic ten błąd?
#include <iostream>
# include <cstdio>
#include <cstdlib>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
while (true)
{
long double wynik=1;
long double moc_zbioru_Omega;
int n,stala=365;
cout << "Podaj liczbe osob:";
cin >> n;
for (int i=2; i <= stala ;i++)
{
wynik=wynik*i;
}
int stala2=365-n;
long double wynik2=1;
for (int i=2; i<= stala2; i++)
{
wynik2=wynik2*i;
}
float prawdopodobienstwo;
float wynik_ostateczny;
long double moc_zbioru_Aprim;
moc_zbioru_Omega=pow(365,n);
moc_zbioru_Aprim=wynik/wynik2;
prawdopodobienstwo=(1-moc_zbioru_Aprim/moc_zbioru_Omega);
cout <<setprecision(10000);
wynik_ostateczny=prawdopodobienstwo*100;
cout <<"Prawdopodobienstwo ze w grupie "<< n <<" osob co najmniej dwie z nich maja urodziny w tym samym dniu wynosi:"<<wynik_ostateczny<<"%"<<endl;
system("PAUSE");
system("cls");
}
getchar();getchar();
return 0;
}