Domanda

Finora sembra che l'equazione di Fabrice Bellard base 2 è la strada da percorrere

alt text

Per ironia della sorte ciò richiederà un tipo BigReal; dobbiamo questo per Net? NET 4.0 ha BigInteger.

Qualcuno ha una versione Haskell?

È stato utile?

Soluzione

Dal momento che stai chiedendo una versione Haskell, qui è un documento di Jerzy Karczmarczuk, chiamato "la tecnica più inaffidabile nel mondo per calcolare π":

  

Questo documento è un exercice atipico   codifica funzionali pigro, scritto per   divertimento e l'istruzione. Può essere letto   e compreso da chiunque   capisce il linguaggio di programmazione   Haskell. Mostriamo come implementare il   Formula Bailey-Borwein-Ploué per π   in un co-ricorsivo, modo incrementale   che produce i numeri 3, 1, 4, 1,   5, 9.. . finché la memoria   esaurimento. Questo non è un modo per   procedere se qualcuno ha bisogno di molti   cifre! La nostra strategia di codifica è   perversa e pericolosa, ed è   provably rompe. È basato su   l'aritmetica per il dominio di   infinite sequenze di cifre   rappresentano frazioni proprie espansa   in una base intero. Mostriamo come   manipolare: aggiungere, moltiplicare per un   intero, ecc tali sequenze dal   da sinistra a destra all'infinito,   che ovviamente non può funzionare in tutti   casi a causa di ambiguità. Alcuni   profonde conseguenze filosofiche sono   discusso nelle conclusioni.

E 'in realtà non risolve il problema in modo efficace o molto pratico, ma è divertente e mostra alcuni dei problemi con l'aritmetica pigri precisione infinita.

Poi c'è anche questo scritto da Jeremy Gibbons .

Altri suggerimenti

Di gran lunga il mio preferito rubinetto Haskell per pi greco viene da 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)

Lo sfondo matematico che giustifica che l'attuazione può essere trovato in:

un algoritmo zipolo per le cifre di Pi

Wikipedia dettagli un sacco di modi per ottenere approssimazioni numeriche di pi qui . Essi hanno inoltre dare qualche esempio di pseudo-codice

Edit: Se siete interessati a questo tipo di problemi matematici senza avere alcun problema correlato del mondo reale per risolvere (che è sicuramente un buon atteggiamento da avere, secondo me), si può visitare il pagina Euler Progetto

Esiste questa possibilità di elaborare grandi numeri razionali in DLR basata su linguaggi dinamici (ad esempio, IronPython ). In alternativa è possibile utilizzare qualsiasi C portatile implementazione / C ++ di grandi numeri reali attraverso P / Invoke .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top