Staram się napisac program, który policzy liczbe e ze wzoru z silniami podanego na tej stronie http://www.math.edu.pl/liczba-e . Ma on liczyć ową liczbe z podaną dokładnością, oraz posiadać testy. Pierwsze moje pytanie czy program działa ok, jak nie to co jest źle? A drugie, dlaczego testy nie działaja i jak je napisać. Bardzo prosze o pewien wzór.
Programuję 2 miesiące dopiero
Oto mój program:
#include <cassert>
#include <iostream>
#include <limits>
#include <math.h>
using namespace std;
enum Error {
NO_ERROR,
WRONG_ARGUMENT
};
double silnia(double x) {
double silnia=1;
if (x<1) return 1;
else if(x==1){
return silnia; }
else {
double k;
for (k=1;k<x+1;k++){
silnia = silnia *k;
}
}
return silnia;
}
double count_e(double acc, Error* err) {
double e=2.7182818;
double wynik = 1;
double poprz_wynik;
long double c = 0;
do {
double x=8; // Błąd bezwzględny tego przybliżenia nie przekracza liczby 3/n!.
//Na przykład aby obliczyć e z dokładnością do 0,0001 musimy wziąć n = 8
//(jest to najmniejsza liczba naturalna n, dla której 3/n! < 0.0001)
c = c + 1.0 / silnia(x);
wynik= 2 + c;
poprz_wynik = wynik;
} while (wynik < e - acc);
return wynik;
}
int main()
{
double result;
Error error;
/*result = count_e(0.01, &error);
assert(error == NO_ERROR);
assert(2.718281 - result) < 0.01);
result = count_e(0.001, &error);
assert(error == NO_ERROR);
assert(2.7182818 - result) < 0.001);
cout << "OK\n"; */
double z;
double acc=0.0001;
z = count_e(acc, &error);
cout<<z;
getchar();
return 0;
}