用python计算圆周率Π
一、要求:
1.计算到圆周率后面越多位越好。
2.用进度条显示计算的进度。
3.要求给出圆周率Π的具体计算方法和解释。
二、算法:
1.拉马努金公式:
2.高斯-勒让德公式:

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


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计算圆周率Π的更多相关文章
- 用python计算圆周率PI
1.蒙特卡洛求圆周率 向区域内随即撒点 当点的数目足够多时,落在圆的点数目与在正方形点数目成正比 即圆的面积和正方形的面积成正比 可以得出计算圆周率的算法 DARTS=100000000 hits ...
- 用python计算圆周率
from random import randomfrom time import perf_counterDARTS = 1000 * 1000hits = 0.0start = perf_coun ...
- python模拟蒙特·卡罗法计算圆周率
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题. 假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, ...
- Python实现计算圆周率π的值到任意位的方法示例
Python实现计算圆周率π的值到任意位的方法示例 本文实例讲述了Python实现计算圆周率π的值到任意位的方法.分享给大家供大家参考,具体如下: 一.需求分析 输入想要计算到小数点后的位数,计算圆周 ...
- python中圆周率的计算
蒙特卡罗方法计算圆周率 蒙特卡罗方法是一个撒点方法,取一个正圆的四分之一,和一个正方形的四分之一 形成一个单位方形,单位四分之一圆和四分之一正方形之比,就构成了圆周率 向这个区域撒点,如果点落在圆内部 ...
- python之圆周率
#!/usr/bin/env python #-*- coding:utf-8 -*- ############################ #File Name: pi.py #Author: ...
- python-蒙特·卡罗法计算圆周率
[题目描述]蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题.假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点 ...
- [转载] python 计算字符串长度
本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...
- Python计算斗牛游戏的概率
Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...
随机推荐
- kafka性能调优(转)
原文 https://blog.csdn.net/weixin_39478115/article/details/79155287 Broker参数配置 1.网络和io操作线程配置优化 # brok ...
- 基于STM8的IIC协议---STM8-第五章
1. 综述 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备. 它是由数据线SDA和时钟SCL构成的串行总线,可 ...
- 为什么PPIO要设计支付代理节点?
PPIO是我和姚欣发起的去中心化存储项目(https://pp.io),这是为开发者提供的存储和分发网络平台,使得比云存储更廉价,更高速,更隐私. 我在设计PPIO的时候,设计了一个商业角色——支 ...
- 易酷 cms2.5 本地文件包含漏洞 getshell
易酷 cms2.5 本地文件包含漏洞 getshell 首先下载源码安装(http://127.0.0.1/test/ekucms2.5/install.php) 安装成功直接进行复现吧 本地包含一 ...
- C++primer第一章(部分)
1.4.2 for 语句 for (init-statement; condition; expression) statement; step1:初始化 step2:判断条件,为真则执行循体:为假则 ...
- navicat 导入execl失败
在使用navicat导入execl是遇到了如下图的错误 在更换多个版本的navicat后问题依然如故. 解决办法; 1.打开需要导入的execl 2.安装一个AccessDatabaseEngine_ ...
- [WebService].net中WebService的使用实例
.net中WebService的使用实例 一.创建一个Webwebservice 1.新建一个项目WebserverDemo 2.在项目处添加新建项,添加一个web服务 3.编辑TestServer. ...
- WordPress版微信小程序3.2版发布
WordPress版微信小程序(下称开源版)距离上次更新已经过去大半年了,在此期间,我开发新的专业版本-微慕小程序(下称微慕版),同时开源版的用户越来越多,截止到2018年11月26日,在github ...
- Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等
#include "resource_minitor.h" #include "sys/statfs.h" resource_minitor::resource ...
- [论文阅读]MobileNetV2: Inverted Residuals and Linear Bottlenecks
0. 本文贡献点 本文的主要贡献点是一个构造了一个结构,称为the inverted residual with linear bottleneck.该结构与传统的residual bloc ...