利用Python计算圆周率π的实例代码
作者:明月十四桥 发布时间:2021-01-08 23:26:43
前言
A货:什么!你不会背圆周率(鄙夷的眼神) 3.1415926535 8979323846 26433...
桥哥:我会算呀 !!!
一、圆周率的历史
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年前,可不得了
附:python输出指定精度的圆周率pi的值
首先像所有人都会的一样,本能地敲出
import math
val = math.pi
print(val)
这样就得到了pi的近似值3.141592653589793,要得到后面的小数,
不是直接可以简单粗暴的乘以10的指数
import math
val = math.pi * 100000000000000000
print(val)
但是当val的小数部分都变成整数141592653589793的时候,并不会如我们所想的那样露出后几位整数,而是直接变成科学计数法3.141592653589793e+24,所以在小数点移位之后为了看到整数部分,我们必须把float转换成int
import math
def get_pi_value(x):
if(x>0):
num = math.pow(10,x)
val = int(math.pi * num)
print(val)
else:
print('输入有误')
for i in range(10):
get_pi_value(i * 10)
运行结果:
输入有误
31415926535
314159265358979334144
3141592653589793216413703340032
31415926535897931797658451191693855162368
314159265358979323748068948991981337089580185157632
3141592653589793042280431964658831312838665295201939643957248
31415926535897934343019391492015828684494553443559665723073458675384320
314159265358979299628295535813807516164434328768456060679773689288809487458631680
3141592653589793231804887682686061504016619085797532053907788745336000826072569315489480704
总结
来源:https://blog.csdn.net/weixin_39032019/article/details/117149962


猜你喜欢
- 前言numpy支持对矩阵和数组进行运算,因此很多numpy的很多运算都需要指定操作的维数参数axis(当然这些axis都有带默认值的),本博
- 前言最近由于换工作,开始交接工作。整理以前的工作内容,由于组内就我一个在做go和大数据。 所以开发没有规划,当时是怎么快怎么来。go也是使用
- 引言在经历过一些尝试之后,觉得在当下的项目中运用链路压测的能力,不等着其他人了。链路这个词其实不如路径通俗易懂,跟产品沟通这个比较有效率。具
- 问题:开发中常使用Navicat查询数据库,并修改数据库中的值。今天发现查询结果为只读,不能修改。一般连表查不能修改我是知道的,但是单表查居
- 本文实例为大家分享了python机器学习实现决策树的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-&quo
- JavaScript组件打包模式js组件通常带着css image ,但这样使用起来可能会有些小麻烦,为了让组件足够的solo,有了把css
- 当我们想更新一张动态表的时候(即:表中的数据不断的添加),也许我们会用数据库代理,通过写作业,然后让他定时查询动态表中最新添加的数据,然后更
- 实际数据分析中遇到需求,把某个Excel表格按照某一列分为多个sheet,并且要求如果某个key对应的行数较少应该合并到一个sheet中。i
- 问题描述初步使用PyTorch进行平方根计算,通过range()创建一个张量,然后对其求平方根。a = torch.tensor(list(
- 一、请求扩展1.before_request作用: 类比django中间件中的process_request,在请求到来执行路由函数之前先执
- 1、python-pptx模块简介使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍。这里
- 一般现今ASP木马常通过以下四点来操作服务器,所以我们只要将一下四处设置好就能从一 前使用IIS服务器的站长很多,特别是对于ASP网站来说,
- uuid str int 之间的转换import uudi#str 转 uuiduuid.UUID('123456781234567
- 本文实例讲述了JS实现动态移动层及拖动浮层关闭的方法。分享给大家供大家参考。具体实现方法如下:<html><head>
- 以下是个人在学习beautifulSoup过程中的一些总结,目前我在使用爬虫数据时使用的方法的是:先用find_all()找出需要内容所在的
- 1. js的数据类型1.1 js引入方式<!DOCTYPE html><html lang="en"&
- 一、如何新建独立帐号并设置权限这里我使用Navicat作为我的数据库管理工具,打开Navicat。选择“用户”--“新建用户”输入用户名、主
- 如何读取PDF文档(或TXT)字符串在Python内部的表示是Unicode编码,首先我们来认识Python中encode()和decode
- 关于 WARNING: Ignoring invalid distribution -pencv-python … 警
- 使用说明:需要引入插件calendar.js/calendar.min.js须要引入calendar.css 样式表,可以自定义自己想要的皮