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


772

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 de la série Taylor , mais elle s'est avérée converger extrêmement lentement (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.

Donc, en écrivant le programme, je suis resté coincé sur un problème, comme avec tous les algorithmes: comment savoir que les nchiffres que j'ai calculés sont exacts?


20
plus d'un problème mathématique. de bons algorithmes donnent également une estimation de l'erreur.
exemple

35
Comparer avec pi?
Dave Newton

55
@chris: "Littéralement partout"?
Courses de légèreté en orbite le

32
Je peux vérifier pour vous jusqu'à 3,141592653589793238462643383279502, au-delà, pourquoi avez-vous besoin d'un si grand nombre de chiffres? (C'est quelque chose comme la précision du niveau atomique avec un cercle de la taille de l'univers.)
AJ Henderson

65
Pourquoi ne divisez-vous pas simplement par pi et vérifiez si le résultat est 1? (je plaisante)
user541686

Réponses:


1629

Puisque je suis le détenteur du record du monde actuel pour le plus de chiffres de pi, j'ajouterai mes deux cents :

Sauf si vous établissez réellement un nouveau record du monde, la pratique courante consiste simplement à vérifier les chiffres calculés par rapport aux valeurs connues. C'est donc assez simple.

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


Mais lorsque vous entrez sur un territoire record, 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 des calculs tourne mal, les chiffres à la fin ne correspondront pas.

Cela fait généralement plus du double du temps nécessaire (car le deuxième algorithme est généralement plus lent). Mais c'est le seul moyen de vérifier les chiffres calculés une fois que vous avez erré dans le territoire inexploré de chiffres jamais calculés auparavant et d'un nouveau record du monde.


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

Ce sont à la fois O(N log(N)^2) algorithmes assez faciles à implémenter.

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 en utilisant la formule connue la plus rapide (formule de Chudnovsky ):

Entrez la description de l'image ici

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 les formules BBP pour l'extraction des chiffres .

Entrez la description de l'image ici

Cette formule vous permet de calculer des chiffres binaires arbitraires sans calculer tous les chiffres précédents. Il est donc utilisé pour vérifier les derniers chiffres binaires calculés. Il est donc 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 mise en œuvre de la formule Bailey – Borwein – Plouffe (BBP) est nécessaire.
  2. Une étape supplémentaire est nécessaire pour vérifier la conversion radix de binaire en décimal.

J'ai passé sous silence 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 propagera jusqu'aux derniers chiffres.


Maintenant, cette dernière étape (vérification de la conversion) est en fait assez importante. L'un des précédents détenteurs du record du monde nous a en fait appelés à ce sujet car, au départ, je n'avais pas suffisamment décrit comment cela fonctionnait.

J'ai donc extrait cet extrait de mon blog:

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

Entrez la description de l'image ici

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

Entrez la description de l'image ici

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


Pour plus de lecture, consultez mon article de blog Pi - 5 milliards de chiffres .


15
Et pour répondre à l'autre question sur la façon de savoir quand un algorithme spécifique a convergé vers N chiffres: cela nécessite que vous connaissiez le comportement de convergence de l'algorithme. La série Taylor de ArcTan(1)converge logarithmiquement. Vous auriez donc besoin d'un nombre exponentiellement élevé de termes pour converger - bref, ne l'utilisez pas.
Mysticial

21
Oui, la formule de Chudnovsky converge à 14,18 chiffres par terme. Vous pouvez donc diviser le nombre total de chiffres par cela pour obtenir le nombre de termes dont vous avez besoin. ( La valeur exacte est: Log(151931373056000)/Log(10) = 14.181647462725477655...)
Mysticial

7
@ erikb85 Kinda. La formule BBP (dans une certaine mesure) compte comme un deuxième algorithme. Mais en soi, cela ne suffit pas car il ne vérifie pas la conversion en base 10. L'idée d'utiliser le contrôle de conversion BBP + pour éliminer le besoin d'un deuxième calcul n'était pas la mienne. Il a d'abord été réalisé par Fabrice Bellard lors de son record du monde 2009. C'était une si bonne idée que nous avons fait la même chose et l'avons améliorée.
Mysticial

83
@FunsukWangadu Je ne peux parler que pour moi, mais voilà: je ne me suis jamais vraiment soucié de Pi lui-même. Pour moi, c'est juste un autre chiffre. La valeur n'est pas dans le nombre lui-même ou dans les 10 téraoctets de chiffres inutiles, ce sont les méthodes qui sont utilisées pour y parvenir. Les siècles de mathématiques et les décennies de recherche en informatique / programmation qui ont contribué à cet exploit sont applicables à de nombreux autres domaines et sont donc BEAUCOUP plus précieux qu'un disque dur de chiffres. Pour le dire simplement: le calcul des chiffres de Pi est plus un sport.
Mysticial

8
@Mystical, je suis juste tombé sur votre site de calcul Pi à partir d'une autre question de stackoverflow et je n'ai pas pu m'empêcher de gawk et de rire de ce que vous avez fait. J'ai adoré les pannes / tremblements de terre du disque dur dans les journaux :) pur incroyable!
Joe

48

Sans aucun doute, pour vos besoins (ce qui, je suppose, n'est qu'un exercice de programmation), la meilleure chose est de vérifier vos résultats par rapport à l'une des listes de 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.

Plus pragmatique, si différentes personnes utilisent différents algorithmes et acceptent toutes (de choisir un nombre) mille (millions, peu importe) décimales, cela devrait vous donner un sentiment flou et chaleureux qu'elles l'ont bien compris.

Historiquement, William Shanks a publié pi à 707 décimales en 1873. Pauvre gars, il a fait une erreur en commençant à la 528e décimale.

Très intéressant, en 1995, un algorithme a été publié qui avait la propriété de calculer 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'un des moyens les plus lents de le faire. Check-out l'article pi sur Wikipedia pour des approches plus rapides.


7
Cette dernière formule (formule de Leibniz, iirc) alterne en fait addition et soustraction.
Thomas

21

Vous pouvez utiliser plusieurs approches et voir si elles convergent vers la même réponse. Ou prenez-en sur le net. L'algorithme 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/


Réduit les chances mais je ne peux toujours pas être sûr avec une solution d'approche multiple, que se passe-t-il si les deux sont faux. La vérification sur le net n'a pas de validité, alors pourquoi ne pas retirer les valeurs du net lui-même. Je pense à bbp lequel est le plus adapté?
Ishan Sharma

7
@IshanSharma Si les deux algorithmes sont indépendants, les chances que les deux calculs soient erronés avec des résultats identiques sont pratiquement nulles. Si quelque chose se passe mal dans l'un ou l'autre calcul, les résultats finaux ne correspondront pas - vous savez donc qu'au moins l'un d'eux est faux.
Mysticial

15

La série Taylor est une façon d'approcher approximativement pi. Comme indiqué, il converge lentement.

On peut montrer que les sommes partielles de la série de Taylor se situent à l'intérieur d'un certain multiplicateur du terme suivant loin de la vraie valeur de pi.

D'autres moyens d'approximation de pi ont des façons similaires de calculer l'erreur maximale.

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


Appuyé. Je pense que la plupart des réponses ici ne donnent tout simplement pas assez de poids au concept de preuve mathématique . Quel que soit votre programme pour calculer les chiffres de pi, il ne sera jamais plus convaincant que la preuve mathématique la plus convaincante que la méthode de votre programme calcule bien pi. Ce qui suggère une contrainte différente sur les programmes qui pi calculent pi: qu'ils devraient viser autant la compréhensibilité que la performance et l'exactitude.
Luis Casillas

5

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

BTW, mieux que d'utiliser des séries pour l' tan(x)est, avec l'informatique cos(x)comme une boîte noire (par exemple, vous pouvez utiliser la série taylor comme ci-dessus) consiste à rechercher la racine 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 difficile à mettre en œuvre, et vous n'avez besoin que d'un peu de calcul pour comprendre pourquoi cela fonctionne.)


6
Je ne vois pas vraiment comment cela aiderait à repérer que le 1000e chiffre est décalé de 1. Vous auriez besoin de valeurs très précises de sin(pi/2)n'est-ce pas?
Matthieu M.

Je ne sais pas quoi dire de la réponse précédente, à moins que ce soit une blague ou quelque chose. sin (pi / 2) = 1 cos (pi / 2) = 0 Donc, je dirais que ceux qui convergent rapidement.
BentFranklin

15
Je suppose que ce n'est pas évident pour tout le monde que l'évaluation sin(x)et la cos(x)haute précision sont en fait beaucoup plus difficiles que le calcul de Pi lui-même.
Mysticial

2
Pour des raisons évidentes, vous ne devriez pas utiliser le péché (pi / 2) pour cela. Mieux vaut plutôt utiliser sin (pi / 6) et assurez-vous qu'il ressort exactement comme 1/2.
Robert Lozyniak
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.