clear
local total = 0
forvalues k = 1/1000 {
local v1 = 2 * runiform() - 1
local v2 = 2 * runiform() - 1
if `v1'^2 + `v2'^2 < = 1 {
local I = 1
}
else {
local I = 0
}
local total = `total' + `I'
}
local pai = 4 * `total'/1000
dis "`pai'"
*可简化作:
loc N=1000
loc n=0
forv i=1/`N'{
loc n=`n'+(runiform()^2+runiform()^2<=1)
}
di "pi="4*`n'/`N'
*不指定种子,每次运行的结果一般不同。
另一种试验(Buffon's needle problem)
loc L=10
loc l=8
loc N=1000
loc n=0
forv i=1/`N'{
loc n=`n'+(`L'*runiform()<=`l'*sin(_pi*runiform()))
}
di "pi="2*`l'*`N'/(`L'*`n')