在看Fraction的时候,看到了limit_denominator的方法,很感兴趣!
按照概念写一个代码是很简单的,暴力的从头到尾,但是应该还有优化的空间!
全文还不完善,可以当作抛砖引玉,毕竟如果深度的优化,会涉及高数的知识,玩不起~
日后会陆续完善!
2021/3/17 第二次
import random,math,fractions
l1=[]
l2=[]
s=set()
for i in range(1000):
x=random.randint(1,10000)/10000
if x<0.001:continue
if 0.999<x:continue
m=float('inf')
p=math.ceil(1000*x)
if p/x>1000:p-=1
n=1000
nn=n%1
if nn<=0.5:
n=math.floor(n)
elif nn>=0.5:
n=math.ceil(n)
else:continue
if n>1000:continue
s.add(n)
if (tt:=(math.ceil(x*n)/n-x))<=m:
m=tt
t=n
if (tt:=(x-math.floor(x*n)/n))<=m:
m=tt
t=n
n=p/x
nn=n%1
if nn<=0.5:
n=math.floor(n)
elif nn>=0.5:
n=math.ceil(n)
else:continue
if n>1000:continue
s.add(n)
if (tt:=(math.ceil(x*n)/n-x))<=m:
m=tt
t=n
if (tt:=(x-math.floor(x*n)/n))<=m:
m=tt
t=n
for i