Alors ton float ne peut contenir une valeur suffisamment grande/petite :s
Le problème c'est que tu tente de diviser 1 par un factoriel 1000 >.> (voir même plus).
Imagine qu'aucun TYPE de variable en C ne soit capable de contenir une précision aussi jolie que cela !
Il te faudrait donc pouvoir utiliser une bibliothèque de très grande précision ou faire tout toi même :p
Dans tout les cas :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <stdio.h>
#include <stdlib.h>
#include <time.h>
double e;
int factorielle(int i)
{
if (i>1) return(i*factorielle(i-1));
else return(1);
}
double prog (int i){//on retourne un DOUBLE
if(i<1000){
i=i+1;
e=(1/(double)(factorielle(i)))+prog(i+1);
}
else ;
return e;
}
int main (){
int i;
i=1;
printf("Approximation de e: %lf\n", prog(i));//pas la peine de passer E en param puisqu'elle est globale
return 0;
} |
Depuis tout à l'heure on dit un FLOAT :p ici j'ai testé avec un double mais de toute façon une fois 30 ou 40 dépassé pour i tu ne peut plus afficher...
Ce que tu peut ESSAYER de faire en revanche, c'est de te pencher sur la question du :
Pourquoi ne pas laisser le "1/" de coté pour le moment et essayer deja de faire simplement retourner par ta fonction l'élément suivant :
(double)(factorielle(i))+prog(i+1);
Pour te donner une idée de par combien tu vas devoir diviser 1 !
Partager