鱼C论坛

 找回密码
 立即注册
查看: 1476|回复: 1

[作品展示] 圆周率(@陶远航)

[复制链接]
发表于 2024-1-21 22:10:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


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')

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
陶远航 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-21 22:11:37 | 显示全部楼层
这段代码实现了计算圆周率的功能,主要使用了泰勒级数和阶乘的概念。可以分为两个部分:rj函数和improvement函数。

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

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

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

以下是一个示例代码:

  1. import time
  2. from math import *
  3. from decimal import *
  4. getcontext().prec=10

  5. def ft(value):
  6.     value=int(value)
  7.     if value==0 or value==1:
  8.         return 1
  9.     total=1
  10.     for i in range(1,value+1):
  11.         total*=i
  12.     return total

  13. def rj(frequency):
  14.     getcontext().prec=frequency*8+2
  15.     k=0
  16.     k=Decimal(k)
  17.     result=0
  18.     num1=2*(Decimal(2)**Decimal(0.5))/9801

  19.     while k!=Decimal(frequency):
  20.         num2=Decimal(ft(4*k))*(Decimal(1103)+Decimal(26390)*k)
  21.         num3=Decimal((ft(k)))**Decimal(4)*(Decimal(396)**(Decimal(4)*k))
  22.         num4=num2/num3
  23.         result+=num4
  24.         k+=Decimal(1)

  25.     ending=Decimal(1)/(Decimal(result)*num1)
  26.     return ending

  27. def improvement(frequency):
  28.     t1=time.time()
  29.     getcontext().prec=frequency*15+2
  30.     q=str(time.time()-t1)
  31.     print(q)
  32.     time.sleep(0.5)
  33.     k=0
  34.     k=Decimal(k)
  35.     result=0
  36.     t2=time.time()
  37.     kf=Decimal(10005)**Decimal(0.5)
  38.     w=str(time.time()-t2)
  39.     print(w)
  40.     time.sleep(0.5)
  41.     t3=time.time()
  42.     num1=Decimal(426880)*kf
  43.     e=str(time.time()-t3)
  44.     print(e)
  45.     time.sleep(0.2)
  46.     t=time.time()
  47.     while k!=Decimal(frequency):
  48.         lt=time.time()
  49.         num2=Decimal(ft(6*k))*(Decimal(13591409)+Decimal(545140134)*k)
  50.         num3=Decimal(ft(3*k))*Decimal(ft(k)**3)*(Decimal(-640320)**(3*k))
  51.         result+=num2/num3
  52.         print('次数:'+str(k+1)+'位数:'+str((k+1)*15))
  53.         k+=1
  54.     ending=num1/Decimal(result)
  55.     return ending

  56. x=input('1:限定位数,2:自动增加')
  57. if x=='1':
  58.     c=input('1, 2')
  59.     if c !='1' and c !='2':
  60.         c='3'

  61.     while True:
  62.         print('-'*80)
  63.         if c=='1':
  64.             print('1')
  65.         elif c=='2':
  66.             print('2')
  67.         else:
  68.             print('3')

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

  70.         while True:
  71.             if d>5:
  72.                 break
  73.             elif d<=0:
  74.                 break
  75.             elif d>0 and d<=5:
  76.                 if c=='1':
  77.                     print(rj(int(d)))
  78.                     break
  79.                 elif c=='2':
  80.                     print(improvement(int(d)))
  81.                     break
  82.                 else:
  83.                     print("输入错误,请重新输入")
  84.                     break
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 16:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表