def calculatePI1():                                              #模拟统计法:蒙特卡罗方法计算圆周率import random as r                                           #导入random模块命名为rimport math as m                                             #导入math模块命名为mimport time as t                                             #导入time模块命名为tdarts = int(input("Please input darts numbers:"))            #选择投掷次数,控制计算精度,darts越大越精确hits = 0                                                     #初始记投掷在圆内次数为0#t.clock()                                                   #调用time模块中的clock()函数,计时开始star_time = t.time()                                         #开始时间for i in range(darts):                                       #若要取1/4圆简化计算通过下行random()实现,取全圆计算则通过下下行uniform()实现#x,y=r.random(),r.random()                               #random()产生[0,1)之间的随机小数,则规定边长为1的正方形,内切圆圆心为(0.5,0.5)半径为0.5,坐标大小范围为(0,1)x, y = r.uniform(-1, 1), r.uniform(-1, 1)                #uniform(a,b)产生[a,b]之间的随机小数,则规定边长为2的正方形,则内切圆圆心为(0,0),半径为1,坐标大小范围为(-1,1)distance = m.sqrt((x**2+y**2))                           #坐标(x,y)到原点距离distanceif distance <= 1:                                        #如果distance<=1(半径),hits+=1                                              #则此坐标在1/4圆内,hits+1;else:                                                    #否则坐标在1/4圆外,continue                                             #循环继续end_time=t.time()                                            #结束时间running_time=end_time-star_time                              #计算时间=结束时间-开始时间#print("The running time is {}.".format(t.clock()))          #计时结束print("The running time is {}.".format(running_time))        #打印计算时间PI=4*(hits/darts)                                            #注:此处乘以4是因为(圆内点数/总点数)的值为Π/4,与是否取1/4圆无关return PIdef calculatePI2():                                              #统计法(穷举法)计算圆周率,其原理与蒙特卡罗法基本一致,区别在于点数获取方式#import math as mfrom time import timeN = int(input("Please input N{(x,y)|x,Y∈N}:"))               #输入N(N**2为所有点个数,也是坐标(x,y)取值范围),N值越大越精确step = input("Please input the step(int) between two points:")    #输入均分整数步数,step越小越精确#上两行及下面for循环双重循环中可通过导入numpy模块实现通过小数计算r = N / 2                                                    #正方形内切圆半径#print("({0},{0})".format(r))                                #打印输出圆心坐标counts = 0                                                   #圆内点数计次c = int(step)star_time = time()                                         #开始时间for x in range(0,N+1,c):                                     #x坐标for y in range(0,N+1,c):                                 #y坐标#print(x,y)                                          #打印每个坐标distance2 = (x - r) ** 2 + (y - r) ** 2              #坐标(x,y)到圆心的距离的平方distance2if distance2<=r*r:                                   #如果distance2<=r*r,#print(x,y)                                              #打印在圆内点坐标counts+= 1                                       #则此坐标在圆内,counts+1;else:                                                #否则坐标在圆外,continue                                         #循环继续end_time = time()                                            #结束时间running_time = end_time - star_time                          #计算时间=结束时间-开始时间print("The running time is {}.".format(running_time))        #打印计算时间#print(counts)                                               #在圈内坐标个数PI=4*(counts/N**2)                                           #(圆内坐标个数counts/总点数N**2)值为Π/4,所以乘以4return PIdef calculatePI3():                                              #BBP公式求圆周率from time import time                                            #导入time模块PI=0N=int(input("Please input N:"))star_time = time()                                               # 开始时间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))   #BBP公式end_time = time()                                               # 结束时间running_time = end_time - star_time                             # 计算时间=结束时间-开始时间print("The running time is {}.".format(running_time))           # 打印计算时间return PI

附上BBP公式简介:
贝利-波尔温-普劳夫公式 ( BBP 公式) 提供了一个计算圆周率π的第n位二进制数的spigot算法(spigot algorithm)。 这个求和公式是在1995年由西蒙·普劳夫提出的,并以公布这个公式的论文作者大卫·贝利(DavidH. Bailey)、皮特·波尔温(PeterBorwein)和普劳夫的名字命名。 在论文发表之前,普劳夫已将此公式在他的网站上公布。

python计算圆周率(蒙特卡洛法/模拟法、统计法/穷举法、BBP公式)相关推荐

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

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

  2. Python:三种方法计算最大公约数和最小公倍数(欧几里德法、穷举法、stein算法)

    Python:三种方法计算最大公约数和最小公倍数 1.穷举法 2.欧几里德法 3.Stein算法 题目:求取任意两个非负数(至多一个数为0)的最大公约数和最小公倍数: 参考资料:Python解决求最大 ...

  3. 鬼才!用Python计算圆周率 π

    目录 一.圆周率的历史发展 1.中国 2.印度 3.欧洲 二.用python计算圆周率 A货:什么!你不会背圆周率(鄙夷的眼神) 3.1415926535 8979323846 26433... 桥哥 ...

  4. python里的π怎么调用_用python计算圆周率π

    用python计算圆周率π 一.要求 1.要起义能计算到圆周率后面越多位越好. 2.用进度条显示计算的进度,能给出越多种进度条越好. 3.要求给出圆周率π的具体公式或者算法说明. 二.算法 1.马青公 ...

  5. python计算圆周率近似值_python计算圆周率pi的方法

    本文实例讲述了python计算圆周率pi的方法.分享给大家供大家参考.具体如下: from sys import stdout scale = 10000 maxarr = 2800 arrinit ...

  6. python穷举法_python 穷举指定长度的密码例子

    本程序可根据给定的字符字典,穷举指定长度的所有字符串: def get_pwd(str, num): if(num == 1): for x in str: yield x else: for x i ...

  7. python算24点穷举法_24点游戏7节课–第1节-游戏介绍与基本算法 | 学步园

    这仅仅是一个控制台(DOS窗口下)的小游戏--有人欢喜有人烦了.欢喜的是因为可以专心于游戏逻辑自身过程,就算你只学过C++简单的屏幕输入输出(cin.cout ),乃至换用java,C#也可以写这个小 ...

  8. 如何用python计算圆周率_如何用python计算圆周率?

    如何用python计算圆周率? python计算圆周率的方法: 圆周率没有精确的计算公式,所以只能用近似的方式计算它的近似值. 我们运用蒙特卡罗方法,思路很简单,在下面图形中随机抛置大量的点, 计算落 ...

  9. JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字

         算法题 水仙花数  数学方法 字符串方法   游乐园门票计算  Switch   闰年 <body> <script>var month = Number(promp ...

最新文章

  1. OpenLDAP / Ubuntu 18.04 下 docker 版安装
  2. 私有环网协议MR-ring介绍
  3. spring boot入门小案例
  4. day25 面向对象继承 多态
  5. litepal更好的操作sqlite3,配置与基本操作
  6. python 常微分方程_常微分方程数值解法——python实现
  7. 05JavaScript输出
  8. Java 数学三角函数正弦、余弦、正切以及反正弦、反余弦、反正切函数的使用
  9. 数据湖(十一):Iceberg表数据组织与查询
  10. 第九章 亚瑟龙的召唤
  11. 发现ULC(UltraLightClient)
  12. 《统计学基于R》第一章 数据与R
  13. CoAP协议学习——CoAP基础
  14. c++中数字与字符,字符与其ASCII转换
  15. MySql的一些常见笔试题(1)
  16. MySQL如何查询表中重复的数据
  17. opencv里的Moments成员变量的理解
  18. 高防CDN相比普通CDN的优势有哪些?
  19. 在调试器里看LINUX内核态栈溢出
  20. oracle字段名命名规范,oracle 表字段命名规范

热门文章

  1. SaaS营销网站剖析:SaaS主页,你给用户的第一印象
  2. 真实的90后创业者是怎样的状态?
  3. 智工运维定位器之ublox
  4. 希拉里败选演说和特朗普胜选演说(中英文)
  5. 什么是子网掩码?如何设置子网掩码?
  6. GIT客户端32位安装版Git-2.34.0-32-bit.exe
  7. 计算机win7内容已满,win7c盘满了用了50G了怎么办
  8. win10清理c盘_都说win10运行卡顿,为什么别人电脑快如闪电?原来是它在拖后腿...
  9. 覆盖式理解Android 消息处理机制(带源码解析)
  10. DELL新电脑卡在联网进不去系统,找不到硬盘解决方法