圆周率的计算

↘锁芯ラ 提交于 2019-11-27 19:18:31

写在前面

前几天在观看B站一位UP主视频时,无意中了解到‘1729’这几位数字在圆周率中首次出现的位置,为了验证此结论,决定采用编程来计算一下比较准确的圆周率,并打印出来!

在python中运用math库中的math.pi进行计算

直接打印

>>> import math
>>> math.pi
# 输出结果,有精度限制
3.141592653589793

准换成整型打印输出

# 计算圆周率
import math
num = 307 #由于精度限制,最高为307
T = pow(10, num)
val = int(math.pi * T)
print(val)

打印结果

31415926535897933178453804144376221908315439785764303742952151621682011959942190545180279952566411409731034352044806109352811966123290977537403352612801619373524233568883796529471055516385616314431338186482800041818035308022134833914884645131986531623916630788964914954076030731869165419827572759855540207616

运用类库直接打印输出精度非常有限,而转化为整型输出,则失去了原本3.1415926.....的直观感受,换种方式再输出试试!

运用公式

高等数学中我们学过泰勒公式,可以运用泰勒展开计算相对精确的圆周率。

由于 tan(π/4)值为1,则其反函数arctan(1)的值为 π/4,因此我们可以对arctan()函数进行泰勒展开得到如下表达式

from decimal import Decimal
from decimal import getcontext

def cal_pi(precision):
    sum = 0
    getcontext().prec=precision
    for i in range(1, 100):
                sum += pow(-1, i+1)*(Decimal(1)/(2*i-1))

    return Decimal(sum)*4
    
print(cal_pi(1000)) # 打印前1000位

# 打印结果
3.151693406071115578377765997070890365649285540185470123751471121727655262367284522657280268921018502369622553574362461586694470507312166190853692538124095603633806268574907681354671154086968848787076970065421160220171612704072602079901601112116065262828034987385908975083783671687791474625570730356479043326841051016714534025984486393215760124744444788885602965380338124423589920822843734074352833447328032790609275235781495610106732480696380754554369250821238301398488617860483936650831002318068830815315485528145593912379635017931979028457257136029602992763148968843960309145356581543974078431876764103865573824611178389987826829190630952039552498840482829710019021630308443282185184995788386692253091381278588715262734980797870853580579489463932116675903261010001837664622250980918744244256311187345610596992256786165695710426614576425579337762645113830751190944032575185987724379227038974140916029080402046532301500814401194594688851513697053535030146781463336833361716507037802348100895239905123

我们发现,打印结果的前几位失去了准确。

误差分析

arctan(1) = π/4

我们在利用泰勒公式运算时会有一定的误差,我们计算的结果再乘4,无意间放大了误差。

网站验证  https://www.1415926pi.com/getIndex.html

结论正确

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!