Quelques fonctions en multi précision

Accueil

Inversion de matrice en multi précision

Calculs numériques en multi précision

4 Application : Pi en multi précision

1 Principe

2 Les 4 opérations en multi précision

3 Quelques fonctions en multi précision

4 Application : Pi en multi précision

5 Application : Inversion de matrice en multi précision


Pi 

  Il ne s'agit pas ici de rivaliser avec les détenteurs des records actuels, mais seulement de montrer qu'avec de modestes moyens et en utilisant un algorithme ancien mais facilement programmable, il est possible d'obtenir plusieurs milliers de décimales en quelques secondes.
  En double précision, on obtient une approximation satisfaisante de Pi avec l'instruction 4*Atn(1#). Malheureusement, le développement de Arctg(x) ne converge rapidement que pour les petites valeurs de x, d'où l'intérêt de la classique formule de J.Machin :

valeurs pour lesquelles le développement de arctg converge rapidement

  Si vous disposez de Visual Basic, sélectionnez le contenu du tableau ci-dessous, copiez-collez sur une nouvelle page de code VB 3 à VB 6. Exécutez directement.

Private Sub Form_Activate()
Form1.Height = 250 * Screen.TwipsPerPixelX
Form1.Width = 460 * Screen.TwipsPerPixelY
IP = 170
ReDim F(10), L(10), S(IP), T(2, IP), U(IP), S2(IP), Sig(2)
DP = 1000000#
T(1, IP) = CDbl(16 * 5)
T(2, IP) = CDbl(4 * 239)
F(1) = 5# ^ 2
F(2) = 239# ^ 2
L(1) = IP
L(2) = IP
Sig(1) = 1
Sig(2) = -1
For I = 1 To 2
  Signe = Sig(I)
  For J = 1 To 10000 Step 2
    D2 = 0#
    For K = L(I) To 1 Step -1
      D1 = (D2 * DP) + T(I, K)
      T(I, K) = Int(D1 / F(I))
      D2 = D1 - F(I) * T(I, K)
    Next K
    D2 = 0#
    For K = L(I) To 1 Step -1
      D1 = (D2 * DP) + T(I, K)
      U(K) = Int(D1 / J)
      D2 = D1 - J * U(K)
    Next K
    D2 = 0#
    SU = 0
    For K = 1 To L(I)
      SU = SU + U(K)
      D1 = D2 + S(K) + Signe * U(K)
      D2 = Int(D1 / DP)
      S(K) = D1 - DP * D2
      If U(K) = 0 Then NZ = NZ + 1 Else NZ = 0
    Next K
    If NZ > 1 Then L(I) = L(I) - 1
    If SU = 0 Then Exit For
    Signe = -Signe
  Next J
Next I
Print " Pi = 3.";
For K = IP - 1 To 10 Step -10
For I = 0 To 9
Print Format(S(K - I), "000000 ");
Next I
Print
Print " ";
Next K
End Sub

  Ces 960 décimales seront calculées en une fraction de seconde.

  Ce qui montre que la haute précision est envisageable sur un micro ordinateur avec des temps de calcul raisonnables.

  Une version permettant de calculer, vérifier et enregistrer jusqu'à 1 024 000 décimales est téléchargeable.
  Elle offre le choix entre 3 formules de calcul :

  Celle de John Machin y est limitée à 512 000 décimales. Elle converge trop lentement pour se contenter de divisions par des entiers, le recours à des diviseurs multi-précision conduirait à des durées de calcul prohibitives.

  En revanche, les deux suivantes permettent, l'une comme l'autre, d'atteindre les 1 024 000 décimales et de vérifier ainsi la concordance de leurs résultats. L'essentiel du programme est semblable au précédent mais la durée du calcul augmentant avec le carré du nombre de décimales, en calculer plus d'un million exigera plusieurs heures.

  La formule comportant 3 arctan conduit à un résultat rigoureusement identique : afficher les 1 024 000 premières décimales ainsi calculée.


Télécharger Pi_MP

  Si ce télé-chargement vous pose quelques problème, consultez d'abord le mode opératoire détaillé.

  Le fichier téléchargé est auto extractible, après chargement dans le dossier de votre choix son exécution ouvrira cette fenêtre.

  En cliquant directement   "Décompresser" vous  l'installerez dans votre dossier "Program Files" (ou dans celui dont vous indiquerez l'adresse).

  Le dossier Pi_MP contiendra :
- l'exécutable Pi.exe et son raccourcis à placer sur le bureau
- 2  dll


Extraire la page pour l'enregistrer ou l'imprimer