[[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\).