圆周率

用python计算圆周率PI

牧云@^-^@ 提交于 2020-03-22 18:18:04
一、计算圆周率PI的方法 (一)公式法: 1 #CalPiV1.py 2 pi = 0 3 N = 100 4 for k in range(N): 5 pi += 1/pow(16, k) * (4 / (8 * k + 1) - 2 /(8 * k + 4) - 1/(8 * k + 5) - 1 /(8 * k + 6)) 6 print("圆周率值是:{}".format(pi)) (二)蒙特卡罗方法: 1 #CalPiV2.py 2 from random import random 3 from time import perf_counter 4 DARTS = 1000*1000*10 5 hits = 0.0 6 start = perf_counter() 7 for i in range(1, DARTS+1): 8 x, y = random(), random() 9 dist = pow(x**2 + y**2, 0.5) 10 if dist <= 1.0: 11 hits = hits + 1 12 pi = 4 * (hits/DARTS) 13 print("圆周率值是: {}".format(pi)) 14 print("运行时间是: {:.5f}s".format(perf_counter()-start)) 算法说明:增加DARTS的位数

用python计算圆周率π

亡梦爱人 提交于 2020-03-22 16:04:26
用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)。 步骤如下:

圆周率——(竖式除法,保留小数位数)

前提是你 提交于 2020-03-01 22:40:20
文章目录 1 题目 2 解析 2.1 题意 2.2 思路 3 参考代码 1 题目 计算机大牛们都在拼算法,计算圆周率小数点后面的第n位。这涉及到许多除法,现在给你一个被除数和除数,请你计算小数点后n位的值。 输入描述: 输入包含多组数据。每组数据包含三个正整数:被除数a和除数b(1≤a<b≤100),以及精度n(1≤n≤1000)。 输出描述: 对应每组数据,输出a/b的结果,小数后面保留n位(不到n位的补零)。 输入例子: 1 2 5 2 3 3 输出例子: 0.50000 0.666 2 解析 2.1 题意 见题目 2.2 思路 模拟竖式除法或使用高精度除法。 3 参考代码 竖式除法 # include <stdio.h> int main ( ) { int n , a , b ; while ( ~ scanf ( "%d%d%d" , & a , & b , & n ) ) { printf ( "%d." , a / b ) ; //计算整数部分 while ( n -- ) { //计算小数部分 a = ( a - a / b * b ) * 10 ; //重新计算被除数 printf ( "%d" , a / b ) ; } printf ( "\n" ) ; } //上面的极简形式 // for(;~scanf("%d%d%d",&a,&b,&n);printf(

C 圆周率 SDUT

眉间皱痕 提交于 2020-02-08 09:22:23
Description 输入n值,并利用下列格里高里公式计算并输出圆周率: Input** 输入公式中的n值。 Output 输出圆周率,保留5位小数。 Sample Input 1 Output 2.66667 Hint # include <stdio.h> # include <stdlib.h> int main ( ) { double pi = 0 , a , b , x = 1.0 ; //如果是实数最好定义为double型,再OJ平台上可能认为flote型不对; int n , i ; scanf ( "%d" , & n ) ; for ( i = 1 ; i <= n ; i ++ ) { a = 1 / x , b = 1 / ( x + 2 ) ; pi = pi + ( a - b ) * 4 ; x = x + 4.0 ; } printf ( "%.5lf" , pi ) ; return 0 ; } 来源: CSDN 作者: 蓮Mis- 链接: https://blog.csdn.net/zhangzhaolin12/article/details/103964155

【Python】圆周率的计算

人走茶凉 提交于 2020-01-31 16:34:15
1.公式法 代码: #CalPiV1.py pi=0 N=100 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("圆周率的值是:{}".format(pi)) 2.蒙特卡洛方法: 撒点方法 取一个正圆和一个正方形的1/4形成一个单位方形 单位方形中有1/4个圆 圆的面积和单位方形之比即为圆周率的相关数据 然后进行撒点 #CalPiV2.py from random import random#调用random库中的random from time import perf_counter#调用time库中的perf_counter,用来进行程序计时 DARTS=1000*1000#在当前区域中抛洒点的数量(数量越大,精度越高,就看你电脑的性能怎么样了!):100W 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

用概率来估算圆周率

↘锁芯ラ 提交于 2020-01-09 17:29:25
  这是昨日我在CSDN上碰到的一个问题所引发的思考和所得。   有一个人在CSDN BBS上提问一段程序: 1 #include <stdlib.h> 2 #include <stdio.h> 3 #define LOOP 1000 4 void main() 5 { 6 int rgnC=0; 7 for(int i=0;i<LOOP;i++) 8 { 9 int x=rand();10 int y=rand();11 if(x*x+y*y<RAND_MAX*RAND_MAX)12 rgnC++;13 }14 printf("%d\n",rgnC);15 }   他的问题是:这段程序是不是和1/4圆和正方形的大小有关,为什么LOOP越大,rgnC越大,是不是程序错了。   其实LOOP越大,rgnC必然越大,但是rgnC/LOOP确是收敛的。   开始我的回答就是这些,没有去想这段程序的作用和这个收敛值到底是干嘛的。直到后来又有一个人给出了这个程序是用来估算圆周率的,我才发现我的思考是多么的不深刻和不完善。   其实随着LOOP的增大,rgnC/LOOP确实会收敛于一个值 π /4。这是用概率来估算圆周率的一个方法。   圆的面积公式:C = π × r^2 公式1   正方形面积公式:S = k^2 公式2   这里用1/4圆,它的半径r和正方形的边长k相等。  

用python计算圆周率PI

a 夏天 提交于 2020-01-09 17:28:39
1.蒙特卡洛求圆周率 向区域内随即撒点 当点的数目足够多时,落在圆的点数目与在正方形点数目成正比 即圆的面积和正方形的面积成正比 可以得出计算圆周率的算法 DARTS=100000000 hits=0.0 clock() for i in range(1,DARTS+1): x,y=random(),random() dist=sqrt(x**2+y**2) if dist <=1.0: hits=hits+1 pi=4*(hits/DARTS) 2.安装tqdm来表示计算进度 在命令指令符中输入pip install tqdm来安装 3.计算圆周率与tqdm一起编码 from random import random from math import sqrt from time import * from tqdm import tqdm DARTS=100000000 hits=0.0 clock() for i in range(1,DARTS+1): x,y=random(),random() dist=sqrt(x**2+y**2) if dist <=1.0: hits=hits+1 pi=4*(hits/DARTS) for i in tqdm(range(10)): print ( "\r{:3}%\n" .format(i/10*100),end="") #

python中圆周率的计算

让人想犯罪 __ 提交于 2020-01-09 17:27:47
蒙特卡罗方法计算圆周率 蒙特卡罗方法是一个撒点方法,取一个正圆的四分之一,和一个正方形的四分之一 形成一个单位方形,单位四分之一圆和四分之一正方形之比,就构成了圆周率 向这个区域撒点,如果点落在圆内部,就是圆内部的一部分,如果落在正方形中,就是正方形的一部分 代码 调用random函数,并且使用了perf_counter这个函数,是可以用来计时的一部分 定义变量,当作抛洒点的总数量 撒在圆内部点为0 开始计时 循环撒点的过程看成是遍历循环的过程 用for in range对所有点进行抛洒   定义x,y当作两个随机数的坐标值,这个坐标就是圆的抛点    如何判断这个坐标就在圆内呢?判断这个点到圆心的距离是否等于1    如果在圆的内部,就加一    用这个值比上整个区域值 输出圆周率值 计算计算时间 来源: https://www.cnblogs.com/fanglijiao/p/11184661.html

用python计算圆周率Π

心不动则不痛 提交于 2020-01-09 17:27:12
一、要求: 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个点(这些点服从均匀分布)