libusrp/host/lib/gen-ratios

49 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python
# -*- python -*-
def how_good (x):
pof2 = [1,2,4,8,16]
if x in pof2:
return 0
if x in map (lambda x: x+1, pof2):
return -10
if x in map (lambda x: x-1, pof2):
return -5
return -2
def better (v1, v2):
return abs ((v1 & 0xf) - ((v1 >> 4) & 0xf)) < abs ((v2 & 0xf) - ((v2 >> 4) & 0xf))
def foo ():
result = {}
for i in range (1,17):
for j in range (1,17):
i_goodness = how_good (i)
j_goodness = how_good (j)
goodness = i_goodness + j_goodness
v = ((i - 1) << 4) | (j - 1)
key = i * j
prev = result.get (key, None)
# print "i=%3d j=%3d key=%3d good=%3d v=0x%02x prev=%s" % (i, j, key, goodness, v, prev)
if not prev:
result[key] = (goodness, v)
elif goodness > prev[0]:
result[key] = (goodness, v)
elif goodness == prev[0] and better(v, prev[1]):
result[key] = (goodness, v)
r = result.items ()
r.sort ()
for k, d in r:
print "(%3d, 0x%02x)" % (k, d[1])
foo ()