Obliczanie stałej Eulera z zadaną dokładnością

0

Witam. Mam pewien problem. Otóż nie potradię dodać funkcji która liczy liczbę e z dokładnościa.

Napisałem program liczacy liczbe e, ale nie potrafię dodać dokładności. Program ma być tej postaci double count_e(double accuracy);

Oto co mam:

 #include <cassert>
#include <iostream>
#include <limits>

using namespace std;

double silnia(double n)

{
       if (n==0)
       return 1;
       else
       return silnia(n-1)*n;
} 



int main()
{
    long double a, c = 0, d;
    double  x, liczba = 10;
    for( x = 2; x < liczba; x++ )
    {
     
        a = 1.0 / silnia( x );
        c = c + a;
     
    }
    d = 2 + c;
    cout << d;
    getchar();
}

Nie umiem tego napisac tak by liczba e była liczoba w funkcji ech, tak jak we wzorze. Może ktoś coś pomóc ??

0

wywal silnię to pogadamy

0

Jak wywalę tutaj silnie to przestanie działać. Ale no załóżmy, że jej nie ma :) to jak to zrobić bez silni? Przecież we wzorze jest silnia.

0

No domyślam się, że źle. Ale pytam jak to obliczyc, bo juz nie wiem po prostu.

Może tak:

{
if (n<0)
return 0;
if (n==0 || n==1)
return 1;
return silnia(n-1)*n;
}

0

po prostu wywal i już.

0

No jak ja wywale to mam samo to int main i co teraz ?

0

następna a "różni" się od poprzedniego....

0

A nie lepiej policzyć e ze wzoru:

e = \lim_{n\to\infty} \left(1 + \frac{1}{n}\right)^n

0

To jest ten sam wzór :D .

// EDYCJA
Oj mój błąd. Nie ten sam!
Ten wzór co podałeś nie bardzo się nadaję do obliczeń numerycznych.

0

Może i, ale ta wersja będzie chyba trochę szybsza, bo potęgowanie jesteśmy w stanie zrobić w \Theta(\log{n}) a suma i iloraz no to wiadomo. I dodatkowo nie widać w niej tej nieszczęsnej potęgi.

Co do silni to podpowiem, że:
\frac{1}{n!} = \frac{1}{(n-1)!} \cdot \frac{1}{n}

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