我在python中使用蒙特卡罗方法编写了一个近似pi值的程序:
import random
import math
N_tot = 0
N_hits = 0
centerX = 0.5
centerY = 0.5
# precision = input('input number of decimals for approximation: ')
def inside_circle(randomX,randomY):
if(math.sqrt((centerX-randomX)**2+(centerY-randomY)**2)<=0.5):
return True
else:
return False
def estimate_pi():
N_tot = 0
N_hits = 0
for i in range(0,100000):
if(inside_circle(random.random(),random.random())==True):
N_hits = N_hits+1
N_tot = N_tot+1
else:
N_tot = N_tot+1
result = N_hits/N_tot
return result
print(estimate_pi())
当我运行它时,控制台打印0.0,我不明白为什么?请帮帮我,谢谢!
答案 0 :(得分:0)
如果你在Python 2中运行它,N_hits/N_tot
被视为整数除法。使用float(N_hits)/N_tot
,它应该有效。
顺便说一句,你在这里接近的东西不是pi而是pi / 4,因为你位于圆圈的右上角。乘以4得到正确的结果。