这个也是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里。但是看不明白,哪位能来解释一下?