实现用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))

【结果展示】

实现用python算法计算圆周率的小诀窍

震惊: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

标签:python,圆周率,算法
0
投稿

猜你喜欢

  • python练习程序批量修改文件名

    2022-01-29 06:53:12
  • go语言中的return语句

    2024-05-28 15:22:09
  • pycharm 2020 1.1的安装流程

    2022-01-01 22:21:41
  • Python语法学习之进程间的通信方式

    2023-04-03 11:30:28
  • Windows下Python的Django框架环境部署及应用编写入门

    2021-10-08 00:58:40
  • Python数据结构之翻转链表

    2023-05-27 20:09:11
  • 解决Python下json.loads()中文字符出错的问题

    2022-06-17 21:16:52
  • php 编写安全的代码时容易犯的错误小结

    2024-06-05 09:35:34
  • JavaScript导出Excel实例详解

    2023-09-06 15:51:27
  • Python运算符重载的简单实例代码

    2021-02-13 11:21:22
  • 如何获取numpy array前N个最大值

    2022-02-08 18:48:28
  • Python Web编程之WSGI协议简介

    2022-08-30 10:39:03
  • css被遮挡的绝对定位

    2008-02-29 12:00:00
  • Python_查看sqlite3表结构,查询语句的示例代码

    2021-01-24 22:35:06
  • python 包实现 time 时间管理操作

    2023-03-13 21:37:52
  • javascript中css的float特殊写法

    2007-12-24 20:24:00
  • vue中的mixins混入使用方法

    2023-07-02 17:01:47
  • python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例

    2021-04-26 09:11:26
  • 11个案例讲透Python函数参数小结

    2023-08-01 13:38:10
  • MySQL如何快速修改表的表结构

    2024-01-15 13:51:36
  • asp之家 网络编程 m.aspxhome.com