出于纯粹的兴趣,我很好奇如何按顺序创建 PI,以便在生成过程本身时显示数字,而不是在过程结果之后生成数字。如果是这种情况,那么数字可以自己产生,我可以对以前看到的数字实施垃圾收集,从而创建一个无限系列。结果只是在 Pi 系列之后每秒生成一个数字。
这是我通过互联网筛选的结果:
这是流行的计算机友好算法,类似机器的算法:
def arccot(x, unity)
xpow = unity / x
n = 1
sign = 1
sum = 0
loop do
term = xpow / n
break if term == 0
sum += sign * (xpow/n)
xpow /= x*x
n += 2
sign = -sign
end
sum
end
def calc_pi(digits = 10000)
fudge = 10
unity = 10**(digits+fudge)
pi = 4*(4*arccot(5, unity) - arccot(239, unity))
pi / (10**fudge)
end
digits = (ARGV[0] || 10000).to_i
p calc_pi(digits)