Godtone (talk | contribs)
m default attribute for show is inconvenient for calculations
Godtone (talk | contribs)
 
Line 1,577: Line 1,577:


# the following definitions are equivalent in the set of commas considered 7-limit dieses:
# the following definitions are equivalent in the set of commas considered 7-limit dieses:
# dieses(4,odd_lim(9),odd_lim(9)) == dieses(4,odd_lim(9),odd_lim(7)) == dieses(5,odd_lim(9),odd_lim(9)) == dieses(5,odd_lim(9),odd_lim(7))
# dieses(4,odd_lim(9),odd_lim(9)) == dieses(4,odd_lim(9),odd_lim(7)) == dieses(5,odd_lim(9),odd_lim(7))
def dieses( max_n=4, gs=odd_lim(9), targets=None, show=False, minsizeexcl=1/1, maxsizeincl=250/243, minerr=steps(20000/19683,1)/4 ):
def dieses( max_n=4, gs=odd_lim(9), targets=None, show=False, minerr=steps(20000/19683,1)/4 ):
if not targets:
if not targets:
targets = gs
targets = gs
dieses_found = []
dieses_found = dict()
for g in gs:
for g in gs:
if steps(g,1)<1/2:
for target in targets+[(2,1)]:
for target in targets+[(2,1)]:
for n in range(2,max_n+1):
for n in range(2,max_n+1):
candidate = reduce(div_iv( target, mul_iv(*[g]*n) ))
c = div_iv(target,mul_iv( *([g]*n) ))
if steps(candidate,1)>1/2:
swap = steps(c,1)<0
candidate = div_iv((2,1),(candidate))
if swap:
if steps(candidate,1)/n >= steps(20000/19683,1)/4 and steps(250/243,1) >= steps(candidate,1):
c = div_iv((1,1),c)
if candidate not in dieses_found:
c = reduce(c) # condition 2 and 3 in line below
dieses_found[candidate] = []
if steps(minsizeexcl,1) < steps(c,1) <= steps(maxsizeincl,1) and steps(c,1)/n >= minerr:
dieses_found[candidate].append(( n, g, target, steps(candidate,ed(1200))/n ))
lhs, rhs = '('+striv(target)+')', '('+striv(g)+')^'+str(n)
if show:
if c not in dieses_found:
for diesis in dieses_found:
if show:
mindamage = min([ dieses_found[diesis][k][3] for k in range(len( dieses_found[diesis] )) ])
print( striv(c), '=', rhs if swap else lhs, '/', lhs if swap else rhs )
if mindamage >= minerr:
dieses_found.append(c)
def equiv(d):
else:
return ', '.join([ '('+striv(eq[1])+')^'+str(eq[0])+' ~ '+striv(eq[2])+' (~'+
if show:
str( int(eq[3]*100+.5)/100 )[:5]+'c)' for eq in dieses_found[d] ])
print( '(', striv(c), '=', rhs if swap else lhs, '/', lhs if swap else rhs, ')' )
print(
dieses_found.sort(key=lambda x: steps(x,1))
pad( striv(diesis), 12 ),
return dieses_found
pad( str( int(mindamage*100+.5)/100 )[:6]+'c', 7, '.' ),
equiv(diesis)
)
results = [diesis for diesis in dieses_found]
results.sort(key=lambda x: as_float(x))
return results
</syntaxhighlight>
</syntaxhighlight>