Question

Jusqu'à présent, il semble que l'équation de base 2 de Fabrice Bellard est le chemin à parcourir

text alt

Ironie du sort cela exigera un type BigReal; devons-nous cela pour .Net? NET 4.0 a BigInteger.

Quelqu'un at-il une version Haskell?

Était-ce utile?

La solution

Puisque vous demandez une version Haskell, ici est un document par Jerzy Karczmarczuk, appelé "la technique la plus Unreliable dans le monde pour calculer π":

  

Ce document est atypique dans un exercice   paresseux codage fonctionnel, par écrit   amusement et instruction. Il peut être lu   et compris par tous ceux qui   comprend le langage de programmation   Haskell. Nous montrons comment mettre en œuvre la   Bailey-Borwein-Ploue formule π   d'une manière co-récursive, incrémentale   qui produit les chiffres 3, 1, 4, 1,   5, 9.. . jusqu'à ce que la mémoire   épuisement. Ce n'est pas un moyen de   procéder si quelqu'un a besoin d'un grand nombre   chiffres! Notre stratégie de codage est   pervers et dangereux, et   pauses démontrable vers le bas. C'est basé sur   les plus Arithmétique le domaine de la   séquences infinies de chiffres   représentant les fractions propres élargi   dans une base de nombre entier. Nous montrons comment   manipuler: ajouter, multiplier par un   nombre entier, etc. telles séquences de la   gauche à droite ad infinitum,   qui ne peut évidemment pas fonctionner dans tous   cas en raison des ambiguïtés. Certains   conséquences philosophiques profondes sont   discuté dans les conclusions.

Il ne résout pas vraiment le problème d'une manière efficace ou très pratique, mais il est amusant et montre quelques-uns des problèmes avec précision infinie arithmétique paresseuse.

Ensuite, il y a aussi cet article par Jeremy Gibbons .

Autres conseils

De loin mon robinet Haskell favori pour pi vient de Jeremy Gibbons:

pi = g(1,0,1,1,3,3) where
    g(q,r,t,k,n,l) = 
        if 4*q+r-t<n*t
        then n : g(10*q,10*(r-n*t),t,k,div(10*(3*q+r))t-10*n,l)
        else g(q*k,(2*q+r)*l,t*l,k+1,div(q*(7*k+2)+r*l)(t*l),l+2)

Le contexte mathématique qui justifie que la mise en œuvre se trouve dans:

Un algorithme Tourillon pour les chiffres de pi

Wikipedia détaille beaucoup de façons d'obtenir des approximations numériques de pi . Ils donnent également quelques pseudo-code exemple

Edit: Si vous êtes intéressé par ce genre de problèmes mathématiques sans avoir aucun problème du monde réel lié à résoudre (ce qui est certainement une bonne attitude à avoir, à mon humble avis), vous pouvez visiter le Euler Page projet

Il existe cette possibilité de traiter de grands nombres rationnels DLR à base de langages dynamiques (par exemple IronPython ). Ou vous pouvez utiliser l'implémentation C / C ++ portable de grands nombres réels par P / Invoke .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top