马青公式

π/4=4arctan1/5-arctan1/239
这个公式由英国天文学教授约翰·马青于1706年发现。他利用这个公式计算到了100位的圆周率。马青公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数,所以可以很容易地在计算机上编程实现。

  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. ####################导入时间模块
  4. import time
  5. ###############计算当前时间
  6. time1=time.time()
  7. ################算法根据马青公式计算圆周率####################
  8. number = int(input('请输入想要计算到小数点后的位数n:'))
  9. # 多计算10位,防止尾数取舍的影响
  10. number1 = number+10
  11. # 算到小数点后number1位
  12. b = 10**number1
  13. # 求含4/5的首项
  14. x1 = b*4//5
  15. # 求含1/239的首项
  16. x2 = b// -239
  17. # 求第一大项
  18. he = x1+x2
  19. #设置下面循环的终点,即共计算n项
  20. number *= 2
  21. #循环初值=3,末值2n,步长=2
  22. for i in range(3,number,2):
  23. # 求每个含1/5的项及符号
  24. x1 //= -25
  25. # 求每个含1/239的项及符号
  26. x2 //= -57121
  27. # 求两项之和
  28. x = (x1+x2) // i
  29. # 求总和
  30. he += x
  31. # 求出π
  32. pai = he*4
  33. #舍掉后十位
  34. pai //= 10**10
  35. ############ 输出圆周率π的值
  36. paistring=str(pai)
  37. result=paistring[0]+str('.')+paistring[1:len(paistring)]
  38. print (result)
  39. time2=time.time()
  40. print (u'总共耗时:' + str(time2 - time1) + 's')

image.png