TP : implanter la fonction exponentielle (2/5)#
Partie 2 : calculer une somme infinie?#
La définition mathématique de l’exponentielle suppose de calculer une somme infinie. Ce n’est pas possible en pratique! On propose donc d’implanter la fonction suivante qui calcule une approximation de la fonction exponentielle obtenue en tronquant la somme à un certain rang \(r\) : \(e^x \approx \sum_{n=0}^r \frac{x^n}{n!}\)
Copier-collez dans les deux cellules suivantes vos fonctions
puissance
et factorielle
de la partie 1,
puis complétez l’implantation de la fonction expRang
et vérifiez
qu’elle passe les tests fournis.
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
/** Exponentielle tronquée à un certain rang r
* @param x un nombre à virgule flottante en double précision
* @param r un nombre entier positif
* @return 1 + x^1/1! + x^2/2! + x^3/3! + ... + x^r/r!
**/
double expRang(double x, int r) {
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
}
expRang(5,1)
CHECK( expRang(6, 0) == 1 ) // 6^0/1
CHECK( expRang(6, 1) == 7 ) // 6^0/1 + 6/1
CHECK( expRang(6, 2) == 25 ) // 6^0/1 + 6/1 + 36/2
CHECK( expRang(6, 3) == 61 );// 6^0/1 + 6/1 + 36/2 + 36*6/6
Plus on augmente le rang, plus on se rapproche de la valeur de \(e^6=403,429\cdots\).
Dans la cellule ci-dessous, calculez une approximation de la valeur de \(e^{6}\) et augmentez le rang jusqu’à ce que la valeur affichée ne change plus (la valeur ajoutée est trop petite pour changer l’affichage).
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
Calculez maintenant une approximation de la valeur de \(e^{10}=22026,46\cdots\) avec le même rang :
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
Que constatez vous?
VOTRE RÉPONSE ICI
Augmentez le rang jusqu’à ce que la valeur affichée ne change plus :
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
Bilan de la partie 2#
Bravo, vous avez implanté une approximation de la fonction exponentielle en tronquant sa formule à un certain rang. Cependant, au vu des exemples ci-dessus, l’utilisateur souhaiterait spécifier non pas le rang, mais la précision qu’il souhaite obtenir. Pour cela il faut d’abord formaliser cette idée de précision. C’est l’objet de la partie 3.