打印

[问题求助] 有人能解释一下sample里面pi.rb是怎么回事么

有人能解释一下sample里面pi.rb是怎么回事么

这段算pi的代码太强了.....自己运行看看就知道
ruby\samples\php?name=Ruby" onclick="tagshow(event)" class="t_tag">RubySrc-1.8.6-p111\sample\pi.rb

算法很诡异,查了很多资料也不知道是怎么回事

k, a, b, a1, b1 = 2, 4, 1, 12, 4
loop do
  # Next approximation
  p, q, k = k*k, 2*k+1, k+1
  a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
  # Print common digits
  d = a / b
  d1 = a1 / b1
  while d == d1
    print d
    $stdout.flush
    a, a1 = 10*(a%b), 10*(a1%b1)
    d, d1 = a/b, a1/b1
  end
end


希望有牛人来解释一下.
Digging ruby with Pickaxe,
Running agilely on rails

TOP

解释不了,下面这个网页可能对你有用.

http://www.cs.utsa.edu/~wagner/pi/pi_cont.html

TOP

看代码貌似是一个无限循环,做什么用的呢?]
看了楼上的我知道是算pi

TOP

引用:
原帖由 5swords 于 2008-4-25 16:28 发表
解释不了,下面这个网页可能对你有用.

http://www.cs.utsa.edu/~wagner/pi/pi_cont.html
那个公式我知道,可没看出这段程序和那个公式有什么关系
Digging ruby with Pickaxe,
Running agilely on rails

TOP

化简
1. k = 2

4/PI = 1 + 1/(3+k**2/(2*k+1))
=>
PI = (12*(2*k+1) + 4*k**2) / (4*(2*k+1) + 1*k**2)
=>
四个系数: a1 = 12, a = 4, b1 = 4, b = 1

2. k2 = 3
在1式的基础上设 x = (k2**2 / (2*k2+1))
PI = (a1*(2*k+1+x) + a*k**2) / (b1*(2*k+1+x) + b*k**2)
=>
PI = ((a1*(2*k+1)+a*k**2)*(2*k2+1) + a1*k2**2)) / ((b1*(2*k+1)+b*k**2)*(2*k2+1) + b1*k2**2))
=>
四个系数: a2 = (a1*(2*k+1)+a*k**2), a = a1, b2 = (b1*(2*k+1)+b*k**2), b = b1

[ 本帖最后由 5swords 于 2008-4-25 21:18 编辑 ]

TOP

2008-11-22 19:47 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61