zoukankan      html  css  js  c++  java
  • 用python计算圆周率π

    用python计算圆周率π

    一、要求

    1.要起义能计算到圆周率后面越多位越好。

    2.用进度条显示计算的进度,能给出越多种进度条越好。

    3.要求给出圆周率π的具体公式或者算法说明。

    二、算法

    1、马青公式:马青公式每计算一项可以得到1.4位的十进制精度。

    2、蒙特卡罗法(我们使用这种方法)

    一个正方形内部相切一个圆,圆和正方形的面积之比是π/4。 


    在这个正方形内部,随机产生n个点(这些点服从均匀分布),计算它们与中心点的距离是否大于圆的半径,以此判断是否落在圆的内部。

    统计圆内的点数,与n的比值乘以4,就是π的值。理论上,n越大,计算的π值越准

    三、进度条

    1、time库:

    (1)perf_counter( )函数,用于测量时间,返回一个CPU级别的精确时间计数值,单位为妙,由于这个计数值起点不确定,连续调用使用差值才有意义。

    (2)sleep(s)函数,产生 s妙的休眠时间,可以是浮点数,如time.sleep(3.5)。

    (3)time.clock()函数,统计cpu时间 的工具,这在统计某一程序或函数的执行速度最为合适。两次调用time.clock()函数的插值即为程序运行的cpu时间。

    2、tqdm库:Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。

    步骤如下:

    (1)安装tqdm

    pip install tqd
    

    (2)导入tqdm库

    from tqdm import tqdm
    

    (3)tqdm示例

    for i in tqdm(range(1000000)):
        pass

    四、算法实现

    1、time库

    from random import random
    from time import clock
    DARTS=100000
    hits = 0.0
    a=1 
    
    clock()
    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
    
        if i== DARTS*0.01*a :      
            print("
    %{} [{}->{}]".format(a,'*'*a,'-'*(10-a)),end="")
            a+=3
    pi = 4* (hits/DARTS)
    print("
    Pi=={:.7f}".format(pi))
    print("运行时间为:{:.4f}s".format(clock()))

      效果如下:

    2、tqdm库

    from math import *
    from tqdm import tqdm
    from time import *
    total,s,n,t=0.0,1,1.0,1.0
    clock()
    while(fabs(t)>=1e-6):
        total+=t
        n+=2
        s=-s
        t=s/n
    k=total*4
    print("π值是{:.10f}  运行时间为{:.4f}秒".format(k,clock()))
    for i in tqdm(range(101)):
        print("
    {:3}%".format(i),end="")
    sleep((clock())/100)    #用执行程序的总时间来算出进度条间隔的时间
    

     

     

     

     

     

     

     

  • 相关阅读:
    struts2之OGNL和struts2标签库和ValueStack对象
    struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化
    struts2的文件上传和文件下载
    jsp+servlet实现文件的上传和下载
    Ajax和JSON完成二级菜单联动的功能
    jxl的使用总结(java操作excel)
    Ajax异步验证登陆或者注册
    mydate97时间控件的使用
    Ckeditor一种很方便的文本编辑器
    搬家通知博文地址(将博客搬到CSDN)
  • 原文地址:https://www.cnblogs.com/deng11/p/12528088.html
Copyright © 2011-2022 走看看