猫史档案馆


【Python计算圆周率】算1万位用5秒

用户:SunshineCodeSunshineCode查看:7 回复:9 评论:7 创建时间:2019-06-19T13:53:29


话不多说,直接上代码:

n = int(input('请键入想要计算到小数点后的位数:')) #先键入字符串,再转化为整数
w = n+10 #多计算10位,防止尾数取舍的影响
b = 10**w #算到小数点后w位
x1 = b*4//5 #求含4/5的首项
x2 = b// -239 #求含1/239的首项
he = x1+x2 #求第一大项
n *= 2 #设置下面循环的终点,即共计算n项
for i in range(3,n,2): #循环初值=3,末值n,步长=2
    x1 //= -25 #求每个含1/5的项及符号
    x2 //= -57121 #求每个含1/239的项及符号
    x = (x1+x2) // i #求两项之和
    he += x #求总和
pai = he*4 #求出π
pai //= 10**10 #舍掉后十位
print(pai)#输出圆周率π的值

这段代码不知道是哪个牛人写的,反正不是我。

计算速度太快了!

更神奇的是,这段代码用的是马青公式计算圆周率。要知道用Python正常速度,马青公式算1万位是要半分多钟的!

亲测:

100位,按下回车直接输出

1000位,约0.2秒

3000位,不到1秒

5000位,1秒左右

8000位,3秒左右

1w位,5~6秒

1.5w位,约11秒

2w位,约23秒

速度真快,至少是在用马青公式计算圆周率的程序中


回复

上一页1 页 / 共 1下一页
无段双云无段双云

emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞

点赞0


评论


MM疯MM疯

emotion_编程猫_点赞

点赞0


评论


浪日子的鲸浪日子的鲸

不明觉厉

点赞0


评论


三九工作室588三九工作室588

666*666

点赞0


评论


user12user12

输入一亿位了话我算了一下,大概要13个小时左右。。。

点赞0


评论


天马神坑_真天马神坑_真

666

点赞0


评论


积极的飞电鼠123积极的飞电鼠123

python超过9000位就不行了

 

点赞0


评论


真牛真牛

AGM公式:   fromdecimalimport* getcontext().prec=10000#位数 a=x=Decimal(1)b=Decimal(1)/Decimal(2).sqrt()c=Decimal(1)/Decimal(4) foriinrange(0,20):y=aa=(a+b)/喵=(b*y).sqrt()c-=x*((a-y)**2)x*=2 withopen("派.txt","w")aspi:#数量大,输入到文件里pi.write(str((a+b)**2/(4*c)))   _______________________________分割线___________________________________ 参考论文:EugeneSalamin于喵发表于 MathematicsofComputation 上的论文 ComputationofpiUsingArithmetic-GeometricMean   1w位0.9963607788085938秒

点赞0


评论


真牛真牛

from decimal import *
import time

time_start = time.time()

getcontext().prec = 10000

a=x=Decimal(1)
b=Decimal(1)/Decimal(2).sqrt()
c=Decimal(1)/Decimal(4)

for i in range(0,20):
y=a
a=(a+b)/2
b=(b*y).sqrt()
c-=x*((a-y)**2)
x*=2

time_end=time.time()
print('totally cost',time_end-time_start)

点赞1


评论