1 说明:
=====
1.1 马青公式(梅钦公式、Machin)计算圆周率:π=16arctan1/5-4arctan1/239
1.2 这个公式由英国天文学教授约翰·马青于1706年发现。
1.3 约翰·马青(John Machin ,1686 –1751),他利用这个公式计算到了100位的圆周率。
2 python的马青公式代码:
# -*- 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.4242def 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=10x=pi(100)print(x)#31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
3 加工:
=======
3.1 获得x值:
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
3.2 把数字变成字符串,加入列表中:
#把数字变成列表y=str(x)print(y)#字符串切片z=[]for i in range(len(y)): #加入列表中 z.append(y[i])print(z)
3.3 z列表变成:z1列表
['3', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6', '2', '6', '4', '3', '3', '8', '3', '2', '7', '9', '5', '0', '2', '8', '8', '4', '1', '9', '7', '1', '6', '9', '3', '9', '9', '3', '7', '5', '1', '0', '5', '8', '2', '0', '9', '7', '4', '9', '4', '4', '5', '9', '2', '3', '0', '7', '8', '1', '6', '4', '0', '6', '2', '8', '6', '2', '0', '8', '9', '9', '8', '6', '2', '8', '0', '3', '4', '8', '2', '5', '3', '4', '2', '1', '1', '7', '0', '6', '7', '9']
4 网上查询π值,进行加工和与马青公式获得的π值进行比较:
=============================================
4.1 查询地址:
http://pai.babihu.com/pi/100.html
4.2 查询值:
π = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 70679#去除小数点和中间的空格#然后添加到列表z2中
4.3 加工:z2列表
['3', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6', '2', '6', '4', '3', '3', '8', '3', '2', '7', '9', '5', '0', '2', '8', '8', '4', '1', '9', '7', '1', '6', '9', '3', '9', '9', '3', '7', '5', '1', '0', '5', '8', '2', '0', '9', '7', '4', '9', '4', '4', '5', '9', '2', '3', '0', '7', '8', '1', '6', '4', '0', '6', '2', '8', '6', '2', '0', '8', '9', '9', '8', '6', '2', '8', '0', '3', '4', '8', '2', '5', '3', '4', '2', '1', '1', '7', '0', '6', '7', '9']
4.4 z1列表和z2列表进行比较:已验证为正确的。
#马青公式获得的结果z1=['3', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6', '2', '6', '4', '3', '3', '8', '3', '2', '7', '9', '5', '0', '2', '8', '8', '4', '1', '9', '7', '1', '6', '9', '3', '9', '9', '3', '7', '5', '1', '0', '5', '8', '2', '0', '9', '7', '4', '9', '4', '4', '5', '9', '2', '3', '0', '7', '8', '1', '6', '4', '0', '6', '2', '8', '6', '2', '0', '8', '9', '9', '8', '6', '2', '8', '0', '3', '4', '8', '2', '5', '3', '4', '2', '1', '1', '7', '0', '6', '7', '9']#网上查询获得的结果z2=['3', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6', '2', '6', '4', '3', '3', '8', '3', '2', '7', '9', '5', '0', '2', '8', '8', '4', '1', '9', '7', '1', '6', '9', '3', '9', '9', '3', '7', '5', '1', '0', '5', '8', '2', '0', '9', '7', '4', '9', '4', '4', '5', '9', '2', '3', '0', '7', '8', '1', '6', '4', '0', '6', '2', '8', '6', '2', '0', '8', '9', '9', '8', '6', '2', '8', '0', '3', '4', '8', '2', '5', '3', '4', '2', '1', '1', '7', '0', '6', '7', '9']print(z1==z2)#结果为真,就是对的#True
5 matplotlib统计100位π的阿拉伯数字:
============================
5.1 代码:
#!-*-coding:utf-8 -*-#第1步:导入模块import matplotlib.pyplot as plt#第2步:数据统计和预处理#马青公式获得π的100位pi_100=['3', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6', '2', '6', '4', '3', '3', '8', '3', '2', '7', '9', '5', '0', '2', '8', '8', '4', '1', '9', '7', '1', '6', '9', '3', '9', '9', '3', '7', '5', '1', '0', '5', '8', '2', '0', '9', '7', '4', '9', '4', '4', '5', '9', '2', '3', '0', '7', '8', '1', '6', '4', '0', '6', '2', '8', '6', '2', '0', '8', '9', '9', '8', '6', '2', '8', '0', '3', '4', '8', '2', '5', '3', '4', '2', '1', '1', '7', '0', '6', '7', '9']#统计后存入字典data_pi = {}for item in pi_100: data_pi.update({item:pi_100.count(item)})#print(data_pi)#第3步:数据统计百分比b=[]for key in data_pi: b.append(data_pi[key])size=[]#计算每种类型所占的比例for u in b: i=u/sum(b) #统计总的发表篇幅 size.append(i)#第4步:作图plt.pie(size,labels=data_pi,autopct='%1.lf%%')plt.title('100位π的阿拉伯数字统计') plt.show()
5.2 效果图: