当前位置 博文首页 > 广大菜鸟的博客:python求圆周率的2种方法(公式法和蒙特卡罗法

    广大菜鸟的博客:python求圆周率的2种方法(公式法和蒙特卡罗法

    作者:[db:作者] 时间:2021-09-16 22:24

    """
     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))
    
    
    
    
    
    cs