web-dev-qa-db-fra.com

Comment déterminer si mon calcul de pi est précis?

J'essayais différentes méthodes pour implémenter un programme qui donne les chiffres de pi séquentiellement. J'ai essayé la méthode série de Taylor , mais elle s'est avérée extrêmement convergente (lorsque j'ai comparé mon résultat avec les valeurs en ligne après un certain temps). Quoi qu'il en soit, j'essaie de meilleurs algorithmes.

Ainsi, en écrivant le programme, je suis resté bloqué sur un problème, comme pour tous les algorithmes: comment savoir si les chiffres n que j'ai calculés sont exacts?

755
Ishan Sharma

Puisque je suis le détenteur du record du monde pour le plus grand nombre de chiffres de pi, je vais ajouter mon deux centimes :

À moins que vous n’établissiez un nouveau record du monde, la pratique courante consiste simplement à vérifier les chiffres calculés par rapport aux valeurs connues. Donc c'est assez simple.

En fait, j'ai une page Web qui répertorie des extraits de chiffres dans le but de vérifier les calculs les concernant: http://www.numberworld.org/digits/Pi/


Mais lorsque vous arrivez sur le territoire du record du monde, il n'y a rien à comparer.

Historiquement, l'approche standard pour vérifier que les chiffres calculés sont corrects consiste à recalculer les chiffres à l'aide d'un deuxième algorithme. Donc, si l'un ou l'autre calcul échoue, les chiffres à la fin ne seront pas identiques.

Cela double généralement le temps nécessaire (le second algorithme étant généralement plus lent). Mais c’est le seul moyen de vérifier les chiffres calculés une fois que vous vous êtes aventuré dans le territoire non cartographié de chiffres jamais calculés auparavant et d’un nouveau record du monde.


À l'époque où les superordinateurs établissaient les enregistrements, deux différents algorithmes AGM étaient couramment utilisés:

Ce sont à la fois O(N log(N)^2) algorithmes assez faciles à mettre en oeuvre.

Cependant, de nos jours, les choses sont un peu différentes. Dans les trois derniers records du monde, au lieu d’effectuer deux calculs, nous n’avons effectué qu’un seul calcul à l’aide de la formule la plus rapide connue ( Chudnovsky Formula ):

Enter image description here

Cet algorithme est beaucoup plus difficile à implémenter, mais il est beaucoup plus rapide que les algorithmes AGM.

Ensuite, nous vérifions les chiffres binaires en utilisant = formules BBP pour l'extraction de chiffres .

Enter image description here

Cette formule vous permet de calculer des chiffres binaires arbitraires sans calculer tous les chiffres précédents. Donc, il est utilisé pour vérifier les derniers chiffres binaires calculés. Par conséquent, il est beaucoup plus rapide qu'un calcul complet.

L'avantage de ceci est:

  1. Un seul calcul coûteux est nécessaire.

L'inconvénient est:

  1. Une implémentation de la formule Bailey – Borwein – Plouffe (BBP) est nécessaire.
  2. Une étape supplémentaire est nécessaire pour vérifier la conversion de la base binaire en décimale.

J'ai passé en revue certains détails expliquant pourquoi la vérification des derniers chiffres implique que tous les chiffres sont corrects. Mais il est facile de voir cela car toute erreur de calcul se propage aux derniers chiffres.


Maintenant, cette dernière étape (vérification de la conversion) est en fait assez importante. L'un des détenteurs du record du monde précédent nous a en fait appelé à ce sujet car, au début, je n'ai t donner une description suffisante de la façon dont cela a fonctionné.

J'ai donc extrait cet extrait de mon blog:

N = # of decimal digits desired
p = 64-bit prime number

Enter image description here

Calculez A en utilisant l'arithmétique en base 10 et B en utilisant l'arithmétique binaire.

Enter image description here

Si A = B, avec une "probabilité extrêmement élevée", la conversion est correcte.


Pour en savoir plus, consultez mon article de blog Pi - 5 trillions de chiffres.

1613
Mysticial

Sans aucun doute, pour vos besoins (ce qui, je suppose, n’est qu’un exercice de programmation), la meilleure chose à faire est de vérifier vos résultats par rapport à l’une des listes des chiffres de pi sur le Web.

Et comment savons-nous que ces valeurs sont correctes? Eh bien, je pourrais dire qu’il existe des moyens informatiques de prouver qu’une implémentation d’un algorithme est correcte.

De manière plus pragmatique, si différentes personnes utilisent différents algorithmes et si elles acceptent toutes (choisir un nombre) un millier (un million, quelle que soit) décimales, cela devrait vous donner un sentiment flou et chaleureux qu'elles ont bien fonctionné.

Historiquement, William Shanks a publié pi en 707 décimales en 1873. Pauvre garçon, il a commis une erreur en partant de la 528 e décimale.

Très intéressant, en 1995 n algorithme a été publié qui avait la propriété qui calculerait directement le nième chiffre (base 16) de pi sans avoir à calculer tous les chiffres précédents !

Enfin, j'espère que votre algorithme initial n'était pas pi/4 = 1 - 1/3 + 1/5 - 1/7 + ... C'est peut-être le plus simple à programmer, mais c'est aussi l'une des manières les plus lentes de le faire. Découvrez l'article de pi sur Wikipedia pour des approches plus rapides.

48
Larry Smith

Vous pouvez utiliser plusieurs approches et voir si elles convergent vers la même réponse. Ou prenez-en sur le net. L'algorithme de Chudnovsky est généralement utilisé comme une méthode très rapide de calcul de pi. http://www.craig-wood.com/nick/articles/pi-chudnovsky/

21
argentage

La série de Taylor est un moyen d'approximer pi. Comme indiqué, il converge lentement.

On peut montrer que les sommes partielles de la série de Taylor se situent dans une limite du multiplicateur du terme suivant, loin de la valeur réelle de pi.

D'autres moyens d'approximation de pi utilisent des méthodes similaires pour calculer l'erreur maximale.

Nous le savons parce que nous pouvons le prouver mathématiquement.

15

Vous pouvez essayer de calculer sin(pi/2) (ou cos(pi/2) d'ailleurs) en utilisant la série de puissances (assez) rapidement convergentes pour sin et cos. (Encore mieux: utilisez différentes formules de doublage pour calculer plus près x=0 pour une convergence plus rapide.)

BTW, mieux que d’utiliser des séries pour tan(x) est, avec l’informatique disons cos(x) comme une boîte noire (par exemple, vous pouvez utiliser une série Taylor comme ci-dessus) consiste à rechercher les racines via Newton. Il existe certainement de meilleurs algorithmes, mais si vous ne voulez pas vérifier des tonnes de chiffres, cela devrait suffire (et ce n'est pas si compliqué à mettre en œuvre, et vous n'avez besoin que d'un peu de calcul pour comprendre pourquoi cela fonctionne.)

5
user1974703