Voici l'implémentation VB.NET de l'algorithme permettant de calculer pi grâce à la série d'Euler suivante :
http://scalion.free.fr/formpi.gif
Source / Exemple :
Sub Main()
' Algorithme basé sur une série d'Euler
Console.Out.WriteLine("Approximation de pi basée sur une série d'Euler")
Dim cApproximation As Decimal, cPrecision As UShort, cProduits() As Decimal
Console.Out.WriteLine("Précision requise ?") : cPrecision = Console.In.ReadLine
ReDim cProduits(0 To cPrecision) ' Tableau de produits
For i As UInteger = 1 To cPrecision ' Balayage des produits
Dim cA As Decimal = 1, cB As Decimal = 1 ' Initialisation des facteurs du produit courrant
For a As UInteger = 1 To i
cA *= a ' Calcul du premier facteur (numérateur)
Next a
For b As UInteger = 3 To (i * 2) + 1 Step 2
cB *= b ' Calcul du second factuer (dénominateur)
Next b
cProduits(i) = cA / cB ' Calcul du produit (division des facteurs)
Next i
For j As UInteger = 1 To cPrecision
cApproximation += cProduits(j) ' Somme cumulée de tous les produits
Next
cApproximation *= 2 ' Facteur commun (constant : 2)
Dim cChaine As String = cApproximation.ToString
cChaine = "3" & Mid(cChaine, 2, cChaine.Length - 1) ' Transformation du premier digit (constant : 3)
Console.Out.WriteLine("Approximation de pi sur " & cPrecision & " facteurs : " & cChaine)
Console.In.ReadLine()
End Sub
Conclusion :
Le code est commenté mais voici une courte explication :
1) On déclare les variables et on demande à l'utilisateur la précision qu'il souhaite (le nombre de produits).
2) La boucle i balaye les produits un à un.
3) Les boucles a et b calculent respectivement le numérateur et le dénominateur de chaque produit (les facteurs).
4) La boucle j additionne le tout.
5) On multiplie par le facteur commun constant (2).
6) On remplace le premier digit par le 3 entier.
Remarque : Entrez une précision d'environ 15 pour obtenir une valeur "reconnaissable" de pi. Notons également que cet algorithme n'est pas du tout optimisé pour le calcul de pi et que je le poste à simple titre de curiosité mathématique !
En espérant vous intéresser,
Cordialement, Léo.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.