我在javascript上使用lazy.js。
我想知道是否有一种很酷的方法来定义(不是真正的计算)由惰性求值授权的PI。
我知道延迟求值是按需调用,但是如何在延迟求值代码中定义PI ?
例如,我们可以在lazy.js中定义自然数无穷序列:var _ = Lazy;
var natural = function(n)
{
return n;
};
var _natural = _.generate(natural);
当然,由于它是按需调用的,因此您只能获得部分自然数,如
var n100 = _natural.take(100).toArray();
有办法把PI定义成自然数吗?
谢谢!
有一种很酷的方法可以通过展开无限的连续逼近流来惰性地计算pi。这些就是所谓的"无界水龙头"算法(无界是因为它们利用懒惰来产生无限的更好的答案流)。
参见Jeremy Gibbon的论文,其中给出了一个(故意模糊的)例子:
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)