Pregunta

Hasta ahora parece que la ecuación de base 2 de Fabrice Bellard es el camino a seguir

text alt

Irónicamente esto requerirá un tipo BigReal; tenemos esto para .Net? .Net 4.0 tiene BigInteger.

Alguien tiene una versión Haskell?

¿Fue útil?

Solución

Desde que está pidiendo una versión Haskell, aquí es un documento Jerzy Karczmarczuk, llamado "la técnica más fiable en el mundo para calcular π":

  

Este documento es un exercice atípico en   codificación funcional perezoso, escrito para   la diversión y la instrucción. Se puede leer   y entendido por cualquier persona que   entiende el lenguaje de programación   Haskell. Mostramos cómo implementar el   fórmula Bailey-Borwein-Ploué para π   en un co-recursivo, de manera incremental   que produce los dígitos 3, 1, 4, 1,   5, 9.. . hasta que la memoria   agotamiento. Esto no es una forma de   proceder si alguien necesita muchos   los dígitos! Nuestra estrategia de codificación es   perverso y peligroso, y   demostrablemente se descompone. Está basado en   la aritmética sobre el dominio de   secuencias infinitas de dígitos   representando fracciones propias expandido   en una base de número entero. Mostramos cómo   manipular: sumar, multiplicar por una   número entero, etc. tales secuencias de la   izquierda a la derecha hasta el infinito,   que obviamente no puede trabajar en todo   casos debido a ambigüedades. Algunos   profundas consecuencias filosóficas son   discutido en las conclusiones.

En realidad, no resuelve el problema de una manera eficiente o muy práctico, pero es entretenido y muestra algunos de los problemas con perezosa aritmética de precisión infinita.

Luego está también este documento por Jeremy Gibbons .

Otros consejos

Con mucho, mi favorito de la espita Haskell para PI viene 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)

La formación matemática que justifica que la aplicación se puede encontrar en:

una espiga Algoritmo para los dígitos de pi

Wikipedia detalla un montón de maneras de conseguir aproximaciones numéricas de pi aquí . También dan algunos ejemplos de pseudo-código

Edit: Si usted está interesado en este tipo de problemas matemáticos sin tener ningún problema real que corresponde a resolver (que es sin duda una buena actitud para tener, en mi humilde opinión), se puede visitar la página del proyecto Euler

No existe tal posibilidad de procesar grandes números racionales en DLR basado en lenguajes dinámicos (por ejemplo, IronPython ). O puede utilizar cualquier aplicación portátil de C / C ++ de los números reales a través de grandes P / Invoke .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top