实现用python算法计算圆周率的小诀窍
作者:不吃西红柿丶 发布时间:2023-10-16 15:16:27
一、圆周率的历史
1、中国
魏晋时期,刘徽曾用使正多边形的边数逐渐增加去逼近圆周的方法 (即「割圆术」),求得π的近似值3.1416。
汉朝时,张衡得出π的平方除以16等于5/8,即π等于10的开方(约为3.162)。虽然这个值不太准确,但它简单易理解,所以也在亚洲风行了一阵。
王蕃(229-267)发现了另一个圆周率值,这就是3.156, 但没有人知道他是如何求出来的(ps. 没开源呗!)。
公元5世纪,祖冲之和他的儿子以正24576边形,求出圆周率约为355/113,和真正的值相比,误差小于八亿分之一。
这个纪录在一千年后才给打破。(ps. 在大部分人不知股股定理年代,真牛!)
2、印度
约在公元530年,数学大师阿耶波多利用384边形的周长,算出圆周率约为√9.8684。
婆罗门笈多采用另一套方法,推论出圆周率等于10的平方根。(ps. 跟张衡大佬的结果一致,但过程不同)
3、欧洲
斐波那契算出圆周率约为3.1418。
韦达用阿基米德的方法,算出3.1415926535<π<3.1415926537。
他是第一个以无限乘积叙述圆周率的人。
鲁道夫万科伦以边数多过32000000000的多边形算出有35个小数位的圆周率。
华理斯在1655年求出一道公式π/2=2×2×4×4×6×6×8×8...../3×3×5×5×7×7×9×9......
欧拉发现的e的iπ次方加1等于0,成为证明π是超越数的重要依据。
二、用python计算圆周率π
【方法】
蒙特卡洛法
【程序设计思路】
使用python random库随机生成点,落在正方形内,计算正方形内的圆内落点与正方形内落点之比,近似为面积之比,随机数越随机,数量越大越准确。
【软件环境】
python 3.6(本程序可兼容python 2.x)
【代码】
from random import random
from time import perf_counter
def calPI(N = 100):
hits = 0
start = perf_counter()
for i in range(1, N*N+1):
x, y = random(), random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits += 1
pi = (hits * 4) / (N * N)
use_time = perf_counter() - start
return pi, use_time
PI, use_time = calPI(10000)
print('use Monte Carlo method to calculate PI: {}'.format(PI))
print('use time: {} s'.format(use_time))
【结果展示】
震惊:10000次随机数,精确到3.1415了,把桥哥放在1000年前,可不得了
【常见问题答疑】
(每篇文章都有很多粉丝私信我,提前答疑一下!!):
1、运行程序前,先导入顶部的包,怎么导包看这里:https://www.jb51.net/article/221337.htm
2、本文使用的random 和 time库为python自带,无需导入,可直接执行程序。
来源:https://blog.csdn.net/weixin_39032019/article/details/117149962


猜你喜欢
- 一,分析代码运行时间第1式,测算代码运行时间平凡方法快捷方法(jupyter环境)第2式,测算代码多次运行平均时间平凡方法快捷方法(jupy
- 看到这个先思考,自己怎么输出他?为什么它有颜色?特殊符号去哪找?特殊符号在符号大全找 符号大全http://www.fhdq.net/任务1
- 一、在javascript中嵌入php代码javascript若是通过js文件包含进来的,那么js文件中也可以直接写php代码,
- 由于工作关系,只能暂时放弃对mongodb的研究了 .开始研究PHPcms .目前为止我已经基本完成了模块的开发.趁着周末来这里做个总结.我
- 无规矩不成方圆。编写代码也是,如果没有大概的框架,管理代码将会是一件很头疼的事。先看看笔者以前写的python脚本:如果只有一个用例,这样看
- 问题如下python pip安装模块提示错误failed to create process原因:报这个错误的原因,是因为python的目录
- Perl对文件的操作,跟其它的语言类似,无非也就是打开,读与写的操作。1. 打开文件#! c:/perl/bin/perl -w use u
- Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Djang
- 在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。解析的时候,往往是一个字节(
- 均方损失函数:这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标。很多的 loss 函数都有 size_averag
- python3.6使用pymysql连接Mysql数据库及简单的增删改查操作,供大家参考,具体内容如下折腾好半天的数据库连接,由于之前未安装
- 前言使用 Pandas 的between 、cut、qcut 和 value_count离散化数值变量。分箱是一种常见的数据预处理技术有时也
- 问题简述在 Windows 系统上,我使用 Python 3.11 的 pip 工具安装 lxml 等库时会出现以下报错:error: Mi
- 前序1、cookie介绍Cookie是一段不超过4KB的小型文本数据,保存在客户端浏览器中,由一个名称(Name)、一个值(Value)和其
- 学委前面展示dict的概念和增删查改!这次我们把其他函数介绍补充了。dict 的元素定位(键/值定位)和遍历dict这种对象我们可以通过 k
- strConnString = "driver={MySQL ODBC 3.51 
- 看过 Vue 源码的同学可以知道,<keep-alive>、<transition>、<transition-
- 需求手百小程序的toast仅支持在页中展示,不能自定义位置、字体大小、在单个文本中增加icon等需求;因此自定义一个全局可通用的Toast。
- 在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数。例如,定义一个 Pers
- 通过PyQt5实现设置一个小闹钟的功能,到了设置的时间后可以响起一段音乐来提醒。导入UI界面组件相关的模块from PyQt5.QtCore