"""
pi = sum[1/16^k *( 4/(8k+1)- 2/(8k+4) -1/((8k+5) -1/(8k+6)]
k =0 -> oo
求pi近似值
"""
from random import random
from time import perf_counter

# # 普通用公式
pi = 0
N = 100
start = perf_counter()
for k in range(N):
pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / (8 * k + 5) - 1 / (8 * k + 6))
print('公式法:')
print("圆周率值是{}".format(pi)) # 圆周率值是3.141592653589793
print("运行时间是: {:.5f}s".format(perf_counter()-start))


# 蒙特卡罗方法的应用场景

DARTS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, DARTS+1):
x, y = random(), random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTS)
print('蒙特卡罗法:')
print("圆周率值是: {}".format(pi))
print("运行时间是: {:.5f}s".format(perf_counter()-start))