这篇文章主要为大家详细介绍了Python 计算 π 值的简单示例,具有一定的参考价值,可以用来参考一下。

对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!

π是一个无数人追随的真正的神奇数字。我不是很清楚一个永远重复的无理数的迷人之处。在我看来,我乐于计算π,也就是计算π的值。因为π是一个无理数,它是无限的。这就意味着任何对π的计算都仅仅是个近似值。如果你计算100位,我可以计算101位并且更精确。迄今为止,有些人已经选拔出超级计算机来试图计算最精确的π。一些极值包括 计算π的5亿位。你甚至能从网上找到包含 π的一百亿位的文本文件(注意啦!下载这个文件可能得花一会儿时间,并且没法用你平时使用的记事本应用程序打开。)。对于我而言,如何用几行简单的Python来计算π才是我的兴趣所在。

你总是可以 使用 math.pi 变量的 。它被 包含在 标准库中, 在你试图自己 计算它之前,你应该去使用它 。 事实上 , 我们将 用它来计算 精度 。作为 开始, 让我们看 一个 非常直截了当的 计算Pi的 方法 。像往常一样,我将使用Python 2.7,同样的想法和代码可能应用于不同的版本。我们将要使用的大部分算法来自 Pi WikiPedia page并加以实现。让我们看看下面的代码:

# @param 使用 Python 计算 π 值

# @author 512笔记|512PiC.com

importsys

importmath

defmain(argv):

iflen(argv) !=1:

sys.exit('Usage: calc_pi.py ')

print'\nComputing Pi v.01\n'

a=1.0

b=1.0/math.sqrt(2)

t=1.0/4.0

p=1.0

foriinrange(int(sys.argv[1])):

at=(a+b)/2

bt=math.sqrt(a*b)

tt=t-p*(a-at)**2

pt=2*p

a=at;b=bt;t=tt;p=pt

my_pi=(a+b)**2/(4*t)

accuracy=100*(math.pi-my_pi)/my_pi

print"Pi is approximately: "+str(my_pi)

print"Accuracy with math.pi: "+str(accuracy)

if__name__=="__main__":

main(sys.argv[1:])

# End www_512pic_com

这是个非常简单的脚本,你可以下载,运行,修改,和随意分享给别人。你能够看到类似下面的输出结果:

你会发现,尽管 n 大于4 ,我们逼近 Pi 精度却没有多大的提升。 我们可以猜到即使 n的值更大,同样的事情(pi的逼近精度没有提升)依旧会发生。幸运的是,有不止一种方法来揭开这个谜。使用 Python Decimal (十进制)库,我们可以就可以得到更高精度的值来逼近Pi。让我们来看看库函数是如何使用的。这个简化的版本,可以得到多于11位的数字 通常情况小Python 浮点数给出的精度。下面是Python Decimal 库中的一个例子 :

看到这些数字。不对! 我们输入的仅是 3.14,为什么我们得到了一些垃圾(junk)? 这是内存垃圾(memory junk)。 在坚果壳,Python给你你想要的十进制数,再加上一点点额外的值。 只要精度小于垃圾号码开始时,它不会影响任何计算只要精度小于前面的垃圾号码(junk number)开始时。 您可以指定你想要多少位数的通过设置getcontext().prec 。我们试试。

很好。 现在让我们 试着用这个 来 看看我们是否能 与我们以前的 代码 有更好的 逼近 。 现在, 我通常 是反对 使用“ from library import * ” , 但在这种情况下, 它会 使代码 看起来更漂亮 。

# @param 使用 Python 计算 π 值

# @author 512笔记|512PiC.com

importsys

importmath

fromdecimalimport*

defmain(argv):

iflen(argv) !=1:

sys.exit('Usage: calc_pi.py ')

print'\nComputing Pi v.01\n'

a=Decimal(1.0)

b=Decimal(1.0/math.sqrt(2))

t=Decimal(1.0)/Decimal(4.0)

p=Decimal(1.0)

foriinrange(int(sys.argv[1])):

at=Decimal((a+b)/2)

bt=Decimal(math.sqrt(a*b))

tt=Decimal(t-p*(a-at)**2)

pt=Decimal(2*p)

a=at;b=bt;t=tt;p=pt

my_pi=(a+b)**2/(4*t)

accuracy=100*(Decimal(math.pi)-my_pi)/my_pi

print"Pi is approximately: "+str(my_pi)

print"Accuracy with math.pi: "+str(accuracy)

if__name__=="__main__":

main(sys.argv[1:])

# End www_512pic_com

输出结果:

好了。我们更准确了,但看起来似乎有一些舍入。从n = 100和n = 1000,我们有相同的精度。现在怎么办?好吧,现在我们来求助于公式。到目前为止,我们计算Pi的方式是通过对几部分加在一起。我从DAN 的关于 Calculating Pi 的文章中发现一些代码。他建议我们用以下3个公式:

Bailey–Borwein–Plouffe 公式

Bellard的公式

Chudnovsky 算法

让我们从Bailey–Borwein–Plouffe 公式开始。它看起来是这个样子:

在代码中我们可以这样编写它:

# @param 使用 Python 计算 π 值

# @author 512笔记|512PiC.com

import sys

import math

from decimal import *

def bbp(n):

pi=Decimal(0)

k=0

while k < n:

pi+=(Decimal(1)/(16**k))*((Decimal(4)/(8*k+1))-(Decimal(2)/(8*k+4))-(Decimal(1)/(8*k+5))-(Decimal(1)/(8*k+6)))

k+=1

return pi

def main(argv):

if len(argv) !=2:

sys.exit('Usage: BaileyBorweinPlouffe.py ')

getcontext().prec=(int(sys.argv[1]))

my_pi=bbp(int(sys.argv[2]))

accuracy=100*(Decimal(math.pi)-my_pi)/my_pi

print"Pi is approximately "+str(my_pi)

print"Accuracy with math.pi: "+str(accuracy)

if __name__=="__main__":

main(sys.argv[1:])

# End www_512pic_com

抛开“ 包装”的代码,BBP(N)的功能是你真正想要的。你给它越大的N和给 getcontext().prec 设置越大的值,你就会使计算越精确。让我们看看一些代码结果:

这有许多数字位。你可以看出,我们并没有比以前更准确。所以我们需要前进到下一个公式,贝拉公式,希望能获得更好的精度。它看起来像这样:

我们将只改变我们的变换公式,其余的代码将保持不变。让我们看一看bellards(n):

# @param 使用 Python 计算 π 值

# @author 512笔记|512PiC.com

def bellard(n):

pi=Decimal(0)

k=0

while k < n:

pi+=(Decimal(-1)**k/(1024**k))*( Decimal(256)/(10*k+1)+Decimal(1)/(10*k+9)-Decimal(64)/(10*k+3)-Decimal(32)/(4*k+1)-Decimal(4)/(10*k+5)-Decimal(4)/(10*k+7)-Decimal(1)/(4*k+3))

k+=1

pi=pi*1/(2**6)

return pi

# End www_512pic_com

输出结果:

哦,不,我们得到的是同样的精度。好吧,让我们试试第三个公式, Chudnovsky 算法,它看起来是这个样子:

再一次,让我们看一下这个计算公式(假设我们有一个阶乘公式)。

下面是程序和输出结果:

# @param 使用 Python 计算 π 值

# @author 512笔记|512PiC.com

def chudnovsky(n):

pi=Decimal(0)

k=0

while k < n:

pi+=(Decimal(-1)**k)*(Decimal(factorial(6*k))/((factorial(k)**3)*(factorial(3*k)))*(13591409+545140134*k)/(640320**(3*k)))

k+=1

pi=pi*Decimal(10005).sqrt()/4270934400

pi=pi**(-1)

return pi

# End www_512pic_com

所以我们有了什么结论?花哨的算法不会使机器浮点世界达到更高标准。我真的很期待能有一个比我们用求和公式时所能得到的更好的精度。我猜那是过分的要求。如果你真的需要用PI,就只需使用math.pi变量了。然而,作为乐趣和测试你的计算机真的能有多快,你总是可以尝试第一个计算出Pi的百万位或者更多位是几。

注:关于Python 计算 π 值的简单示例的内容就先介绍到这里,更多相关文章的可以留意512笔记的其他信息。

关键词:π值

您可能感兴趣的文章

python利用以下公式求π的值_Python 计算 π 值的简单示例相关推荐

  1. 怎样用python计算π的值_Python 计算 π 值的简单示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计 ...

  2. python利用以下公式求π的值_使用Python计算 π 值

    π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计算π,也就是计算π的值.因为π是一个无理数,它 是无限的.这就意味着任何对π的计算都仅仅是个近似值.如 ...

  3. python怎么写代码求年华收益率_python计算年收益

    # ------------------------------------------------------------------------------- # 计算年收益 # per_year ...

  4. 利用迭代公式求平方根。

    利用迭代公式求平方根.由用户输入数据a,而后计算其平方根. 算法描述: 设x=sqrt(a), 设初值为x[0],则迭代公式为 x[n+1]=(x[n]+a/x[n])/2 由此公式产生序列x[1], ...

  5. 用格里高利公式求给定精度的PI值 (15分)

    用格里高利公式求给定精度的PI值 (15分) 本题要求编写程序,计算序列部分和 4∗(1−1/3+1/5−1/7+-) ,直到最后一项的绝对值小于给定精度eps. 输入格式: 输入在一行中给出一个正实 ...

  6. C语言——PTA 用格里高利公式求给定精度的PI值

    打赏一点钱,帮我买包辣条,继续创作,谢大家! PTA 用格里高利公式求给定精度的PI值 本题要求编写程序,计算序列部分和 4∗(1−1/3+1/5−1/7+-) ,直到最后一项的绝对值小于给定精度ep ...

  7. 7-18 用格里高利公式求给定精度的PI值

    东软学习小组成员:时雾 用格里高利公式求给定精度的PI值 本题要求编写程序,计算序列部分和 4∗(1−1/3+1/5−1/7+-) ,直到最后一项的绝对值小于给定精度eps. 输入格式: 输入在一行中 ...

  8. python1到1000的质数_python求第1000个质数值的简单示例

    这篇文章主要为大家详细介绍了python求第1000个质数值的简单示例,具有一定的参考价值,可以用来参考一下. 对用python求第1000个质数的值感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌 ...

  9. python输入两个数求差_python差值_python差值法_python求差值 - 云+社区 - 腾讯云

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 环境依赖api 网关提供 python 2.7 和 python 3 两个版 ...

最新文章

  1. 高斯消元法对矩阵LU分解的影响
  2. 买了服务器之后如何操作系统,买了服务器之后如何操作系统
  3. thinkphp3 php jwt,thinkphp框架使用JWTtoken的方法详解
  4. MySQL 多表查询、连接查询(内连接、外连接)
  5. java integer 包_java之学习基本类型包装类的概述及Integer类的概述和构造方法
  6. python 控件类多个实例_Python笔记_第四篇_高阶编程_GUI编程之Tkinter_2.控件类
  7. SharePoint 网站搬迁
  8. “华为云杯”2020深圳开放数据应用创新大赛 ·粤港澳大湾区强降水临近预测赛题相关资料整理
  9. visio图形包解压
  10. 在线PDF保护解除器,完全免费,没有文件数量限制 - PDF在线解锁器
  11. 获取计算机关机时间,查询电脑开关机时间的vbs代码
  12. 武汉科技大学计算机学院生产实习,武汉科技大学实习工作管理办法
  13. 2022-2027年中国民办高校行业市场全景评估及发展战略规划报告
  14. 微信小程序隐藏左上角返回首页按钮
  15. 「杂谈」什么是我心目中深度学习算法工程师的标准
  16. ckeditor富文本编辑器的使用和图片上传,复制粘贴图片上传
  17. 【转】最实用的IT类网站及工具大集合
  18. 详解go中的混合锁 - mutex
  19. 【mysql系列】一键生成mysql文档
  20. 批判和质疑,要坚守自我

热门文章

  1. npm和package是什么
  2. 一个移动端开发者,对未来的思考
  3. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
  4. Easy Connect无法连接的情况,当前IE代理启用了自动配置脚本,不允许使用CS客户端登录
  5. html如何在图片中放入音乐,如何给图片添加音乐
  6. Unity 2.Space Shooter(碰撞器Collider,WebGL,刚体中属性,(定时)实例化、销毁游戏对象,触碰OnTriggerEnter/Exit,爆炸效果,音频,文字,定时调方法)
  7. linux文件强制保存,Vim 强制保存只读文件的方法
  8. 深度学习小白装机-记录一下
  9. 斧劈互联网(一):企业邮箱那点事儿
  10. 常用的设计模式之观察者模式