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;
}