红宝石挖掘工

Dig ruby with Pickaxe

[回忆]用概率算pi

xavier posted @ 2009年8月15日 21:28 in Ruby成就 with tags ruby PI 概率 , 1767 阅读

这个也是06年的。当时物理老师讲到了,下课我就去做了出来

原理如下:

有一个半径为r的圆外接一个边长为2r的正方形。
S圆 = r**2*pi
S方 = 2r**2
现在往正方形里撒点,撒到圆里的点的个数比撒到圆外的点的个数的比就是一个与pi有关的式子,就能估算出近似的pi来,撒的点越多值越精确。

代码:

 

def estimate_pi(a)
  k = 0
  srand()
  a.times do 
    x = rand() - 0.5
    y = rand() - 0.5
    x2 = x.abs*x.abs
    y2 = y.abs*y.abs
    if (x2 + y2) ** 0.5 <= 0.5
      k += 1
    end
  end
  pi = 4.0 * k / a         #必须有一个浮点数,不然结果只有整数3
  return pi
end

 

 

算10万个点能出3.14

最高纪录是13亿个点出3.14159

 

显然是不能真的用这个来算pi的。

目前见到的最快最准算pi的方法就在ruby自带的sample/pi.rb里。但是看不明白,哪位能来解释一下?


 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter