码迷,mamicode.com
首页 > 其他好文 > 详细

第十二章 圆周率的计算问题分析

时间:2018-08-10 13:12:30      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:技术分享   start   int   大小   image   http   分享   form   for   

我们学习编程的最终目的就是解决问题:那我们试试看能不能用我们已学的知识解决圆周率的计算问题

方案一:公式法

技术分享图片

方案二:蒙特卡罗方法(撒点法)

技术分享图片

首先我们用方案一的方法进行尝试解决,代码如下:

1 #CalPiV1.py
2 pi = 0
3 N = 100
4 for k in range(N):
5     pi += 1/pow(16,k)*( 6               4/(8*k+1) - 2/(8*k+4) - 7               1/(8*k+5) - 1/(8*k+6) ) 
8 print("圆周率值是: {}".format(pi))

运行结果如下图所示:

技术分享图片

下面我们使用蒙特卡罗方法计算圆周率大小

中心思想就是我们在一块如图的区域撒点,由面积比很容易得出,π是4倍的(在四分之一园内的点数除以总点数)

 1 #CalPiV2.py
 2 from random import random
 3 from time import perf_counter
 4 DARTS = 1000*1000 #一共的点数
 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))

当然点数越多,结果越准确

运行结果如下

技术分享图片

 

第十二章 圆周率的计算问题分析

标签:技术分享   start   int   大小   image   http   分享   form   for   

原文地址:https://www.cnblogs.com/chy8/p/9454351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!