Frage

Bisher sieht es aus wie Fabrice Bellard der Basis 2 Gleichung ist der Weg zu gehen

alt text

Ironischer wird dies eine BigReal Art erfordern; haben wir dies für .Net? .NET 4.0 hat BigInteger.

Wer eine Haskell-Version hat?

War es hilfreich?

Lösung

Da Sie eine Haskell-Version sind gefragt, hier ist ein Papier von Jerzy Karczmarczuk: „die meisten Unzuverlässige Technik in der Welt zu berechnen π“ genannt:

  

Dieses Papier ist ein atypisches exercice in   faul funktionale Programmierung, geschrieben für   Spaß und Anleitung. Es kann gelesen werden   und verstand von jedem,   versteht die Programmiersprache   Haskell. Wir zeigen, wie die zur Umsetzung   Bailey-Borwein-Ploue Formel für π   in einer Co-rekursive, inkrementaler Weg   welche erzeugt die Ziffern 3, 1, 4, 1,   5, 9. . bis die Speicher   Erschöpfung. Dies ist keine Art und Weise zu   gehen, wenn jemand viele braucht   Ziffern! Unsere Codierungsstrategie ist   pervers und gefährlich, und es   beweisbar bricht. Es basiert auf   die arithmetics über die Domain von   unendliche Folge von Ziffern   richtige Fraktionen repräsentieren expandierte   in einer ganzzahligen Basis. Wir zeigen, wie man   manipulieren: add, vermehren sich durch eine   integer, etc. Solche Sequenzen aus dem   links nach rechts ad infinitum,   was offensichtlich nicht in alle arbeiten   Fälle wegen Unklarheiten. Etwas   tief philosophische Konsequenzen   in den Schlussfolgerungen diskutiert.

Es ist nicht wirklich löst das Problem in einer effizienten oder sehr praktischen Art und Weise, ist aber unterhaltsam und zeigen einige der Probleme mit fauler unendlicher Genauigkeit Arithmetik.

Dann gibt es auch dieses Papier von Jeremy Gibbons .

Andere Tipps

Mit Abstand mein Lieblings Haskell Zapfen für pi kommt von 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)

Der mathematische Hintergrund, dass es rechtfertigt, dass die Umsetzung gefunden werden kann in:

A Tröpfel-Algorithmus für die Ziffern von Pi

Details Wikipedia eine Vielzahl von Möglichkeiten numerische Approximation von pi hier bekommen . Sie geben auch einige Beispiel-Pseudo-Code

Edit: Wenn Sie in dieser Art von mathematischen Problemen interessieren, ohne dass damit verbundene reales Problem mit zu lösen (das ist definitiv eine gute Haltung zu haben, IMHO), könnten Sie die Euler Projektseite

Es besteht eine solche Möglichkeit zu verarbeiten große rationalen Zahlen in DLR basierten dynamischen Sprachen (zB Ironpython). Oder Sie können jedes beliebige Portable C verwenden / C ++ Implementierung von großen reellen Zahlen durch P / Invoke .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top