一、要求:

1.计算到圆周率后面越多位越好。

2.用进度条显示计算的进度。

3.要求给出圆周率Π的具体计算方法和解释。

二、算法:

1.拉马努金公式:

2.高斯-勒让德公式

设置初始值:
反复执行以下步骤直到

  

 

之间的误差到达所需精度:

则π的近似值为:
下面给出前三个迭代结果(近似值精确到第一个错误的位数):
3.140...
3.14159264...
3.1415926535897932382...
该算法具有二阶收敛性,本质上说就是算法每执行一步正确位数就会加倍。

3.波尔文四次迭代式

这个公式由乔纳森·波尔文和彼得·波尔文于1985年发表的。

bailey-borwein-plouffe算法

这个公式简称BBP公式,由David Bailey, Peter Borwein和Simon Plouffe于1995年共同发表。它打破了传统的圆周率的算法,可以计算圆周率的任意第n位,而不用计算前面的n-1位。这为圆周率的分布式计算提供了可行性。

4.丘德诺夫斯基公式

这是由丘德诺夫斯基兄弟发现的,十分适合计算机编程,是目前计算机使用较快的一个公式。

5.莱布尼茨公式

π/4=1-1/3+1/5-1/7+1/9-1/11+……

6.蒙特卡罗法(打鸟法)

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

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

三、算法实现

以下采用蒙特卡罗法(打鸟法),代码及图片如下。 

import math
import time
scale=10
print("执行开始")
t=time.process_time()
for i in range(scale+1):
a,b='**'*i,'..'*(scale-i)
c=(i/scale)*100
π=4*(4*math.atan(1/5)-math.atan(1/239))
print("[{}{}->%{}]".format(a,b,c))
time.sleep(0.1)
print(π)
print("程序用时:{:.2f}s".format(t))
print("执行结束")

运行结果:

Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
================= RESTART: C:/Users/Benny/Desktop/打鸟法求圆周率.py =================执行开始
[....................->%0.0]
[**..................->%10.0]
[****................->%20.0]
[******..............->%30.0]
[********............->%40.0]
[**********..........->%50.0]
[************........->%60.0]
[**************......->%70.0]
[****************....->%80.0]
[******************..->%90.0]
[********************->%100.0]
3.1415926535897936
程序用时:0.11s
执行结束
>>>

另外,进度条还可以用python的pip库来实现:

import mathimport timescale=10print("执行开始")t=time.process_time()for i in range(scale+1):    a,b='**'*i,'..'*(scale-i)    c=(i/scale)*100    π=4*(4*math.atan(1/5)-math.atan(1/239))    print("%{:3}[{}->{}]".format(a,b,c))    time.sleep(0.1)print(π)print("{:.2f}s".format(t))print("执行结束")

用python计算圆周率Π的更多相关文章

  1. 用python计算圆周率PI

    1.蒙特卡洛求圆周率 向区域内随即撒点 当点的数目足够多时,落在圆的点数目与在正方形点数目成正比 即圆的面积和正方形的面积成正比 可以得出计算圆周率的算法 DARTS=100000000   hits ...

  2. 用python计算圆周率

    from random import randomfrom time import perf_counterDARTS = 1000 * 1000hits = 0.0start = perf_coun ...

  3. python模拟蒙特·卡罗法计算圆周率

    蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题. 假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, ...

  4. Python实现计算圆周率π的值到任意位的方法示例

    Python实现计算圆周率π的值到任意位的方法示例 本文实例讲述了Python实现计算圆周率π的值到任意位的方法.分享给大家供大家参考,具体如下: 一.需求分析 输入想要计算到小数点后的位数,计算圆周 ...

  5. python中圆周率的计算

    蒙特卡罗方法计算圆周率 蒙特卡罗方法是一个撒点方法,取一个正圆的四分之一,和一个正方形的四分之一 形成一个单位方形,单位四分之一圆和四分之一正方形之比,就构成了圆周率 向这个区域撒点,如果点落在圆内部 ...

  6. python之圆周率

    #!/usr/bin/env python #-*- coding:utf-8 -*- ############################ #File Name: pi.py #Author: ...

  7. python-蒙特·卡罗法计算圆周率

    [题目描述]蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题.假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点 ...

  8. [转载] python 计算字符串长度

    本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...

  9. Python计算斗牛游戏的概率

    Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...

随机推荐

  1. Troubleshooting 10g and 11.1 Clusterware Reboots (文档 ID 265769.1)

    Troubleshooting 10g and 11.1 Clusterware Reboots (文档 ID 265769.1) This document is intended for DBA' ...

  2. hive 一次更新多个分区的数据

    类似订单数据之类的表,因为有状态要更新,比如订单状态,物流状态之类的, 这样就需要同步很久之前的数据,目前我的订单表是更新前面100天的数据. hive中操作是先删除前面100个分区的数据,然后重新动 ...

  3. Spring3.2.0 之后各个版本完整包下载地址

    留作工作学习使用 现在Spring官网已经很难找到完整包的下载地址,都已经迁移到Maven上,这给不能用Maven或者不愿用Maven的各位带来了不小的麻烦. 经过挖掘,找到了下载3.2之后各个版本完 ...

  4. 71.纯 CSS 创作一个跳 8 字型舞的 loader

    原文地址:https://segmentfault.com/a/1190000015534639#articleHeader0 感想:rotateX() 和rotateZ()一起使用好懵呀. HTML ...

  5. (23/24) webpack实战技巧:如何在webpack环境中使用Json

    在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loader的loader进来的.但是在webpack3.x版本中,则不需要在另外引入 ...

  6. C# ADO.NET中设置Like模糊查询的参数

    ADO.NET进行参数化时会自动将参数值包含在单引号中,除了特殊需求,最好不要自己手动添加单引号.ADO.NET中识别参数标识是使用符号@,如果在SQL语句中将参数标识放在单引号中,单引号中的参数标识 ...

  7. 操作 实例 / dom

    响应式:数据改变时会触发其他联动.例如:模板中的数据绑定:计算属性的重新计算: ---------------------------------------------------- vm.$par ...

  8. DO,DTO和VO的使用

    DO,DTO和VO的使用 DO:对应数据库表结构 VO:一般用于前端展示使用 DTO:用于数据传递.(接口入参和接口返回值都可以) 以ssm框架为例: controller层: public List ...

  9. Python module ---- getopt

    optlist, argv = getopt.getopt(argv, 'cdsarRvn:e:E:f:F:w:O:m:M:o:g:') 模块getopt用于分割了main函数的参数,参数args一般 ...

  10. xcode打包命令

    xcodebuild clean -workspace Myproject.xcworkspace -scheme myProject xcodebuild archive -workspace My ...