1 说明:

=====

1.1 学习python求π值的方法探讨。

1.2 资料来自网络,大多注明,仅供学习。

python求平均值最简单方法(6种方法用python求π值)(1)

求π

2 π:

===

2.1 π就是圆周率。

2.2 阿基米德(公元前287–212 年) ,古希腊大数学家,开创了人类历史上通过理论计算圆周率π近似值的先河。

2.3 祖冲之,南北朝时代著名数学家,进一步得出精确到小数点后7位的π值。

python求平均值最简单方法(6种方法用python求π值)(2)

3 python求π值:

===========

3.1 直接调用法:

import math val = math.pi print(val)

3.2 马青公式简洁法:π=16arctan1/5-4arctan1/239

import math π=4*(4*math.atan(1/5)-math.atan(1/239)) print(π) #3.1415926535897936

3.3 math法代码:

import math def main(): a=1.0 b=1.0/math.sqrt(2) t=1.0/4.0 p=1.0 for i in range(1000): 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) print("Pi is approximately: " str(my_pi)) if __name__== "__main__": main()

3.4 公式法代码:

''' #代码来源: #https://blog.csdn.net/weixin_39525744/article/details/80778163 通过公式计算圆周率 当k正无穷 π=[1/16^k*(4/(8*k 1)-2/(8*k 4)- 1/(8*k 5)-1/(8*k 6))] ''' pi = 0 N = 100 for k in range(N): pi = 1/pow(16,k)*(\ 4/(8*k 1)-2/(8*k 4)-\ 1/(8*k 5)-1/(8*k 6)) print("圆周率的值是:{}".format(pi)) #圆周率的值是: 3.141592653589793

3.5 马青公式复杂代码:

#第1步:说明 # -*- coding: utf-8 -*- #代码来源: #https://blog.csdn.net/lnotime/article/details/82319973?utm_medium=distribute.pc_relevant.none-task-blog-title-5&spm=1001.2101.3001.4242 #计算准确圆周率的马青公式:π=16arctan1/5-4arctan1/239 #这个公式由英国天文学教授约翰·马青于1706年发现。 #马青公式 #第 2步:函数定义:n一般为100 def pi(n): p = 10 ** (n 10) # 准备初始整数,先多乘 k 个 0,以增加精度,最后再去掉,这里我取 k=10 a = p * 16 // 5 # 第一项的前半部分 b = p * 4 // -239 # 第一项的后半部分 f = a b # 第一项的值 p = f # π j = 3 while abs(f): # 当|f|=0后计算π的值就不会再改变了 a //= -25 # 第n项的前半部分 b //= -57121 # 第n项的后半部分 f = (a b) // j p = f j = 2 return p // 10**10 # 去掉 k 位,k=10 #第3步:取值 x=pi(100) #打印 print(x)

3.6 丘德诺夫斯基法:

#第1步:说明:任意位数π # -*- coding: UTF-8 -*- # 丘德诺夫斯基法計算高精度圓周率程序 # Calculating PI with Chudnovsky-Series # Author: Idealguy,2018, Shanghai #参考文章:https://blog.csdn.net/idealguy/article/details/82929032 #第2步:定义函数 def Sqrt10005(): n1=0 c=10002499687 #100.02499687 mc=8; m=mc f1=10**mc f2=f1*f1 a=10005*f2-c*c while mc<n: a*=f2 b=c*2*f1 d=a//b c=c*f1 d a-=d*(b d) mc =m if mc*2>n: m=n-mc else: m=mc f1=10**m f2=f1*f1 n1 =1 return c #第3步:循环 print ("Chudnovsky法計算高精度圓周率程序") while 1: n=int(input('計算位數[1..50000],0:退出:')) if n<=10: break n =2 base=10**n A=13591409*base; B=A c3=13591409 i=1 while abs(A)>5: c1=((108-72*i)*i-46)*i 5 c2=10939058860032000*i**3 c4=c3; c3 =545140134 i =1 A=A*c1*c3//(c2*c4) B =A p=426880*base*Sqrt10005()//B//100 s=input('是否显示结果(Y/N):') if (s=='Y')|(s=="y"): print ("PI=" str(p))

,