这个问题有两个解决思路:
一种是利用斐波拉契数列 相邻两个斐波拉契数列的比值就是黄金比例值 数字越靠后精确度越高 测试中到240位便可以将黄金比例计算精确到100位
def fibs(x,a=1,b=1):
if x is 1:
return (a,b)
else:
temp=a;
a+=b
b=temp
return fibs(x-1,a,b)
res=fibs(240)
chushu=res[0]
beichushu=res[1]
print(Decimal(str(beichushu))/Decimal(str(chushu)))
另一种就是2分法开根号
def _sqrt(a):
x1=Decimal(a)
x2=Decimal(a)/2
while abs(x1-x2)>1e-100:
x1=x2
x2=(x1+Decimal(a)/x1)/2
return x1,x2
黄金比例=(√5-1)/2 其中√5精确到100位那么最终的黄金比例也就能精确到100位
最终结果:
0.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748476