El cálculo de π a la precisión binaria “infinito” en C #
Pregunta
Hasta ahora parece que la ecuación de base 2 de Fabrice Bellard es el camino a seguir
Irónicamente esto requerirá un tipo BigReal; tenemos esto para .Net? .Net 4.0 tiene BigInteger.
Alguien tiene una versión Haskell?
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:
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 .