java.lang.Math.PI : 3.141592653589793.
Voir aussi : cet exercice sert de base à un autre exercice : Utilisation de Strategy pour calculer pi
Formule d'Euler
Leonhard Euler a démontré en 1735 (cf wikipedia) la formule :
Autrement dit, si on appelle somme la somme (1 / 1 2) + (1 / 2 2) + (1 / 3 2) + ...
on a : pi = racine carrée de (6 * somme)
ou en java :
pi = Math.sqrt(6.0 * somme)
Ecrire une classe
Pi1 qui contient :
-
Une fonction
public static double calculePi(int N), oùNest le nombre de termes utilisés dans la somme.calculePi()contient l'implémentation de la formule (effectue le calcul de la somme et renvoie la valeur). -
Une fonction
public static void main(String[] args)qui prend en paramètre le nombre de termes à additionner.main()appellecalculePi()et affiche le résultat.
int à partir de l'argument passé en paramètre (de type String), vous pouvez utiliser Integer.parseInt(args[0]).
Vous aurez éventuellement besoin de la fonction
java.lang.Math.pow(double a, double b).
Formule de Madhava, Gregory et Leibniz
De la même manière, écrire une classePi2 implémentant cette formule :
Formule de Nilakantha
De la même manière, écrire une classePi3 implémentant cette formule :
Comparaison
Quelle est la formule qui converge le plus vite ?Pour le savoir, écrivez une classe
Comparaison, avec une fonction main() qui prend toujours en paramètre le nombre d'itérations à effectuer, puis appelez successivement les fonctions calculePi() des 3 classes précédentes.
Comparez chaque résultat avec la valeur de
Math.PI.
Exemple d'affichage :
java Comparaison 10000
Nombre d'itérations : 10000 Math.PI = 3.141592653589793 pi1 = 3.1414971543976273 - différence = 9.549919216578218E-5 pi2 = 3.1414926535900345 - différence = 9.99999997586265E-5 pi3 = 3.141592653590042 - différence = 2.4868995751603507E-13Notez au passage qu'on a un exemple de programme ayant plusieurs fonctions
main().