[[Algoritmo] Numero di nepero]
Ciao a tutti, ho un problema di questo tipo:
- La costante matematica $ e $ è definita dall'espressione:
$ e = 1/(0!) + 1/(1!) + 1/(2!) + 1/(3!) + 1/(4!) + ... $
Escogitare un algoritmo che calcoli $ e $ con $ n $ termini.
Allora ho pensato di risolvere l'algoritmo in questo modo: (Il linguaggio utilizzato per descriverlo è il C)
Però, in fase di esecuzione, il risultato che ottengo è sempre $ 1 $, per ogni valore $ n $ in input. Mi aiutate a capire dov'è l'errore? Grazie mille.
- La costante matematica $ e $ è definita dall'espressione:
$ e = 1/(0!) + 1/(1!) + 1/(2!) + 1/(3!) + 1/(4!) + ... $
Escogitare un algoritmo che calcoli $ e $ con $ n $ termini.
Allora ho pensato di risolvere l'algoritmo in questo modo: (Il linguaggio utilizzato per descriverlo è il C)
main () { float Somma = 0, Fattoriale = 1; int i, N; printf ("A quale termine vuoi fermare la disposizione della costante di Nepero 'e'? \n"); scanf ("%d", &N); for (i=1; i<=N; i=i+1) { Fattoriale = Fattoriale * (1/i); Somma = Somma + Fattoriale; } printf ("Il risultato e': %f \n", Somma); return; }
Però, in fase di esecuzione, il risultato che ottengo è sempre $ 1 $, per ogni valore $ n $ in input. Mi aiutate a capire dov'è l'errore? Grazie mille.
Risposte
Ciao
è sbagliato il modo in cui calcoli il fattoriale
prova così
il fattoriale si calcola:
$n! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot ... \cdot (n-1) \cdot n = (n-1)! \cdot n$
è sbagliato il modo in cui calcoli il fattoriale
prova così
il fattoriale si calcola:
$n! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot ... \cdot (n-1) \cdot n = (n-1)! \cdot n$
main () { float somma; float fattoriale; int i; int n; printf ("A quale termine vuoi fermare la disposizione della costante di Nepero 'e'? \n"); scanf ("%d", &n); somma = 0; fattoriale = 1.0; for (i=1; i<=n; i++) { fattoriale *= i; somma += 1/fattoriale; } printf ("Il risultato e': %f \n", somma); return; }
Giusto, grazie per la correzione.
Sinceramente non penso che il metodo descritto sia un buon metodo per calcolare $e$.
Detto questo, il vero problema del codice iniziale è che "i" era un int e quindi 1/i era uguale a 0. Sono cose a cui bisogna fare attenzione. Di fatto lavorare con l'inverso del fattoriale o con il fattoriale cambia poco le cose.
Inoltre \(\displaystyle\frac{1}{0!} = 1\) quindi avresti dovuto far partire somma da \(1\).
Detto questo, il vero problema del codice iniziale è che "i" era un int e quindi 1/i era uguale a 0. Sono cose a cui bisogna fare attenzione. Di fatto lavorare con l'inverso del fattoriale o con il fattoriale cambia poco le cose.
Inoltre \(\displaystyle\frac{1}{0!} = 1\) quindi avresti dovuto far partire somma da \(1\).