题
到目前为止,它看起来像法布里斯·贝拉的基地2方程是要走的路。
讽刺的是,这将需要一个BigReal类型;做我们这对于.NET? .NET 4.0具有的BigInteger。
任何人都有一个Haskell版本?
解决方案
既然你问了一个Haskell版本,这里是一纸由耶Karczmarczuk,被称为“最不可靠的技术在世界各地以计算π”:
此纸是一种非典型exercice在 懒惰的功能编码,书面 乐趣和指令。它可以读取 和任何人了解谁 理解编程语言 哈斯克尔。我们展示如何实现 贝利-Borwein-Ploue公式π 在共同递归的,渐进的方式 其产生的数字3,1,4,1, 5,9。 。直到内存 疲惫。这不是办法 继续,如果有人需要很多 数字!我们的编码策略是 乖张和危险的,它 可证明分解。它是基于 在算术上的域 数字无穷序列 较适当的分数扩大 在一个整数碱。我们展示如何 操作:加,乘用 整数等。从这样的序列 从左到右循环往复, 这显然不能工作在所有 因为含糊不清的情况。一些 深层次的哲学后果 在结论中讨论的。
它并不真正解决以有效或非常实用的方法的问题,但是娱乐性和示出了一些与懒惰无限精度算术的问题。
然后有也本文由Jeremy长臂猿
其他提示
这是迄今为止我最喜欢的Haskell插口对于PI来自杰里米·吉本斯:
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)
这证明该实施的数学背景中可以找到:
插口算法裨的位数
维基百科详细介绍了很多办法来这里得到PI 的数值逼近。他们还给出一些示例的伪代码
编辑:如果您有没有任何相关的实际问题来解决(这绝对是一个良好的心态有,恕我直言)有兴趣在这样的数学题,你可以访问的欧拉项目页
有这样的存在的可能性来处理大有理数在 DLR 基于动态语言(如 IronPython的)。或者你可以使用任何便携式C / C ++实现大的实数通过的P / Invoke 。