Godtone
Joined 17 December 2020
m default attribute for show is inconvenient for calculations |
→My Python 3 code: fix |
||
| 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(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 | 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: | ||
for target in targets+[(2,1)]: | |||
for n in range(2,max_n+1): | |||
candidate = reduce(div_iv( target, mul_iv(*[g]*n) )) | |||
if steps(candidate,1)>1/2: | |||
candidate = div_iv((2,1),(candidate)) | |||
if steps(candidate,1)/n >= steps(20000/19683,1)/4 and steps(250/243,1) >= steps(candidate,1): | |||
if candidate not in dieses_found: | |||
dieses_found[candidate] = [] | |||
dieses_found[candidate].append(( n, g, target, steps(candidate,ed(1200))/n )) | |||
if show: | |||
for diesis in dieses_found: | |||
mindamage = min([ dieses_found[diesis][k][3] for k in range(len( dieses_found[diesis] )) ]) | |||
if mindamage >= minerr: | |||
def equiv(d): | |||
return ', '.join([ '('+striv(eq[1])+')^'+str(eq[0])+' ~ '+striv(eq[2])+' (~'+ | |||
str( int(eq[3]*100+.5)/100 )[:5]+'c)' for eq in dieses_found[d] ]) | |||
print( | |||
dieses_found.sort(key=lambda x: | pad( striv(diesis), 12 ), | ||
return | 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> | ||