METALARISING 发表于 2024-1-21 22:10:39

圆周率(@陶远航)



import time
from math import *
from decimal import *
getcontext().prec=10

def ft(value):
    value=int(value)
    if value==0 or value==1:
      return 1
    total=1
    for i in range(1,value+1):
      total*=i
    return total

def rj(frequency):
    getcontext().prec=frequency*8+2
    k=0
    k=Decimal(k)
    result=0
    num1=2*(Decimal(2)**Decimal(0.5))/9801

    while k!=Decimal(frequency):
      num2=Decimal(ft(4*k))*(Decimal(1103)+Decimal(26390)*k)
      num3=Decimal((ft(k)))**Decimal(4)*(Decimal(396)**(Decimal(4)*k))
      num4=num2/num3
      result+=num4
      k+=Decimal(1)

    ending=Decimal(1)/(Decimal(result)*num1)
    return ending

def improvement(frequency):
    t1=time.time()
    getcontext().prec=frequency*15+2
    q=str(time.time()-t1)
    print(q)
    time.sleep(0.5)
    k=0
    k=Decimal(k)
    result=0
    t2=time.time()
    kf=Decimal(10005)**Decimal(0.5)
    w=str(time.time()-t2)
    print(w)
    time.sleep(0.5)
    t3=time.time()
    num1=Decimal(426880)*kf
    e=str(time.time()-t3)
    print(e)
    time.sleep(0.2)
    t=time.time()
    while k!=Decimal(frequency):
      lt=time.time()
      num2=Decimal(ft(6*k))*(Decimal(13591409)+Decimal(545140134)*k)
      num3=Decimal(ft(3*k))*Decimal(ft(k)**3)*(Decimal(-640320)**(3*k))
      result+=num2/num3
      print('次数:'+str(k+1)+'位数:'+str((k+1)*15))
      k+=1
    ending=num1/Decimal(result)
    return ending

x=input('1:限定位数,2:自动增加')
if x=='1':
    c=input('1, 2')
    if c !='1' and c !='2':
      c='3'

    while True:
      print('-'*80)
      if c=='1':
            print('1')
      elif c=='2':
            print('2')
      else:
            print('3')

      d=int(input('小数点后几位'))

      while True:
            if d>5:
                break
            elif d<=0:
                print('??')
            elif d<=5:
                print('这都不会?')

            d=int(input('重写!'))

      result=0
      old_time=time.time()
      if c=='1' or c=='3':
            result=rj(floor(d/8))
            print('1ended:'+str(result))
            print('1time:'+str(time.time()-old_time)+'\n')
            old_time=time.time()
      if c=='2' or c=='3':
            result=improvement(floor(d/15))
            print('2end:'+str(result))
            print('2time:'+str(time.time()-old_time)+'\n')

FishC 发表于 2024-1-21 22:11:37

这段代码实现了计算圆周率的功能,主要使用了泰勒级数和阶乘的概念。可以分为两个部分:rj函数和improvement函数。

rj函数用来计算圆周率的近似值,输入参数为要计算的位数frequency。在函数内部,首先通过getcontext()函数设置计算精度,然后使用循环计算出近似值的部分,并累加到result变量中。最后通过一些数学运算得到最终的结果。

improvement函数也是用来计算圆周率的近似值,与rj函数不同的是,improvement函数不需要输入位数,它会自动增加计算位数直到达到指定的精度。同样,该函数也是通过循环计算出近似值的部分,并累加到result变量中。最后通过一些数学运算得到最终的结果。

可以根据需要选择调用rj函数或improvement函数来计算圆周率的近似值。

以下是一个示例代码:

import time
from math import *
from decimal import *
getcontext().prec=10

def ft(value):
    value=int(value)
    if value==0 or value==1:
      return 1
    total=1
    for i in range(1,value+1):
      total*=i
    return total

def rj(frequency):
    getcontext().prec=frequency*8+2
    k=0
    k=Decimal(k)
    result=0
    num1=2*(Decimal(2)**Decimal(0.5))/9801

    while k!=Decimal(frequency):
      num2=Decimal(ft(4*k))*(Decimal(1103)+Decimal(26390)*k)
      num3=Decimal((ft(k)))**Decimal(4)*(Decimal(396)**(Decimal(4)*k))
      num4=num2/num3
      result+=num4
      k+=Decimal(1)

    ending=Decimal(1)/(Decimal(result)*num1)
    return ending

def improvement(frequency):
    t1=time.time()
    getcontext().prec=frequency*15+2
    q=str(time.time()-t1)
    print(q)
    time.sleep(0.5)
    k=0
    k=Decimal(k)
    result=0
    t2=time.time()
    kf=Decimal(10005)**Decimal(0.5)
    w=str(time.time()-t2)
    print(w)
    time.sleep(0.5)
    t3=time.time()
    num1=Decimal(426880)*kf
    e=str(time.time()-t3)
    print(e)
    time.sleep(0.2)
    t=time.time()
    while k!=Decimal(frequency):
      lt=time.time()
      num2=Decimal(ft(6*k))*(Decimal(13591409)+Decimal(545140134)*k)
      num3=Decimal(ft(3*k))*Decimal(ft(k)**3)*(Decimal(-640320)**(3*k))
      result+=num2/num3
      print('次数:'+str(k+1)+'位数:'+str((k+1)*15))
      k+=1
    ending=num1/Decimal(result)
    return ending

x=input('1:限定位数,2:自动增加')
if x=='1':
    c=input('1, 2')
    if c !='1' and c !='2':
      c='3'

    while True:
      print('-'*80)
      if c=='1':
            print('1')
      elif c=='2':
            print('2')
      else:
            print('3')

      d=int(input('小数点后几位'))

      while True:
            if d>5:
                break
            elif d<=0:
                break
            elif d>0 and d<=5:
                if c=='1':
                  print(rj(int(d)))
                  break
                elif c=='2':
                  print(improvement(int(d)))
                  break
                else:
                  print("输入错误,请重新输入")
                  break

这样,用户可以选择是限定位数计算还是自动增加计算,并可以输入要计算的位数。最后,根据用户的选择,调用不同的函数来计算圆周率的近似值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 圆周率(@陶远航)