鱼C论坛

 找回密码
 立即注册
查看: 987|回复: 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有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-13 17:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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