Witam, napisałem program który liczy pewnie wyrażenie i sprawdza czy jest mniejsze od zmiennej e. Kod wygląda tak:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
int main()
{
double p = 0;
double wynik;
double n;
double q;
double e;
double wynik_silnia;
double silnia;
cout << "Podaj n: ";
cin >> n;
cout << "Podaj q: ";
cin >> q;
cout << "Podaj e: ";
cin >> e;
cout << setprecision(2000);
while (wynik < e)
{
p++;
silnia = 1;
for (int i=p; i>=1; i--)
{
silnia*=i;
wynik_silnia = silnia;
}
wynik = 1 / wynik_silnia * (pow(n-q,p-1)) * (pow(M_E,n*q));
cout << "Dla p: " << p << " wynik wynosi: " << wynik << endl;
Sleep(1000);
}
cout << "Minimalna wartosc p spelniajaca nierownosc to: " << p << endl;
return 0;
}
Gdy zmienię typy zmienny na:
long double p = 0;
long double wynik;
long double n;
long double q;
long double e;
long double wynik_silnia;
long double silnia;
To program nie działa. Wszystko robione dla liczb n=3, q=2, e=500. W pierwszym przypadku wychodzi 403,42...... i pętla leci sobie dalej. A w drugim przypadku pojawia się 0. Jaka tu jest różnica między tymi dwoma programami? Jak dla mnie ten drugi powinien po prostu wyświetlić większe liczby.