一、什么是马青公式 ????????马青公式由英国天文学教授约翰·马青(John Machin ,1686 –1751)于1706年发现,他利用这个公式计算到了100位的圆周率。
????????马青公式每计算一项可以得到位的十进制精度。通过适当地编程,可以使它的计算过程中乘数和除数都不超过整型数据范围,所以可以很容易地在计算机上编程实现。无需计算高精度浮点数乘法、除法或平方根,故无需使用复杂的FFT算法加速。 ????????为了计算更高的十进制位数,不仅需要计算更多的项数,还要使用更长的数组来保留更高的精度。故马青公式的时间复杂度为. 故此,如果要计算极多的位数,如百万位以上,一般不使用马青公式。 ????????还有很多类似于马青公式的反正切公式。在所有这些公式中,马青公式是较为简洁且迅速的。
二、马青公式如下:
三、Python代码如下
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
#首先输入计算圆周率Π后的多少个小数
number = int(input("请输入你要计算多少位的圆周率Π:"))
#多计算十位,防止位数出现取舍的影响(多算10为小数)
number1 = number + 10
#定义计算小数的位数
b = 10**number1
#求首项的小数【4/5】
x1 = b*4//5
#求1/239的小数
x2 = b*1//-239
#进行求和
num_sum = x1 + x2
#循环终止条件
number *=2
for i in range(3,number,2):
x1 //= -25
x2 //= (-239*239)
x = (x1+x2) // i
num_sum += x
#求出Π
pai = num_sum * 4
#去掉多计算的十位
pai //= 10 ** 10
#转化为字符型
str_pai = str(pai)
#转化为浮点数
result_pai = str_pai[0] + '.' +str_pai[1:len(str_pai)]
print(result_pai)
#写入文件
with open('pai.txt','w') as f: #文件一般存放于python源文件的文件夹里
f.write(result_pai)
|