Proszę o sprawdzenie programu

0

Witam, proszę o sprawdzenie programu. Generalnie problem polega na tym, że nie widzę błędu w kodzie a mimo wszystko program zwraca złe wyniki. Poniżej polecenie i kod.

user image

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
	int n, p, i, sil;
	float q, e, l;
	printf("Podaj n, q, e:\n");
	scanf("%d %f %f", &n, &q, &e);
	for(p=0;;p++){
		l=0;
		sil=1;
		if(p>0){
			for(i=1;i<=p;i++){
				sil*=i;
			}
		}
		l=(1.0/(float)sil)*pow(n-q,p-1)*exp(n*q);
		if(l<e){
			break;
		}
	}
	printf("Min wartosc p spelniajaca nierownosc to: %d\n",p);
	system("pause");
	return 0;
}
2
  1. Zamień float na double
  2. Silnie też licz w zmiennej double
  3. Do obliczenia silni wywal warunek if(p>0) wystarczy warunek ;i<=p;
  4. Do obliczenia silni możesz zacząć od i=2 bo nie ma sensu mnożyć przez jedynkę
  5. Na kroku nr 100 przemnożyłeś wartości 1..100 zaś na 101 kroku zaczynasz od nowa?
  6. Policz tą f(0) po czym ten wynik mnóż przez (n-q)/p - już algorytm będzie o wiele lepszy.
0

W zasadzie wystarczyła zmiana typu silni na double i działa prawidłowo, aczkolwiek dziękuję za wszystkie uwagi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1