1.1 --- a/tools/dividers.py Sat Nov 18 16:23:00 2023 +0100
1.2 +++ b/tools/dividers.py Thu Dec 14 18:44:34 2023 +0100
1.3 @@ -3,11 +3,6 @@
1.4 from math import ceil, floor
1.5 import sys
1.6
1.7 -def method2(f, s):
1.8 - r = f / s
1.9 - scale = getscale(r)
1.10 - return scale * r, scale
1.11 -
1.12 def is_integer(x):
1.13 target = round(x) * 1000
1.14 #print x, target - 100, floor(x * 1000), target + 100
1.15 @@ -28,7 +23,12 @@
1.16 else:
1.17 return 1 / part
1.18
1.19 -def reduce(m, n, m_limit, n_limit):
1.20 +def get_divider_operands(frequency, source_frequency):
1.21 + ratio = float(frequency) / source_frequency
1.22 + scale = getscale(ratio)
1.23 + return scale * ratio, scale
1.24 +
1.25 +def reduce_divider_operands(m, n, m_limit, n_limit):
1.26 while m > m_limit and n > n_limit and m > 1 and n > 1:
1.27 m /= 2
1.28 n /= 2
1.29 @@ -42,8 +42,8 @@
1.30
1.31 if len(sys.argv) < 4:
1.32 f, s = map(float, sys.argv[1:3])
1.33 - m, n = method2(f, s)
1.34 - m, n = reduce(m, n, 0x200, 0x100000)
1.35 + m, n = get_divider_operands(f, s)
1.36 + m, n = reduce_divider_operands(m, n, 0x200, 0x100000)
1.37 show(s, m, n)
1.38
1.39 else:
1.40 @@ -80,8 +80,8 @@
1.41 do1 = int(do / do0)
1.42 if do0 * do1 == int(do):
1.43 i = do * f
1.44 - m, n = method2(i, s)
1.45 - m, n = reduce(m, n, 0x3f, 0x3f)
1.46 + m, n = get_divider_operands(i, s)
1.47 + m, n = reduce_divider_operands(m, n, 0x3f, 0x3f)
1.48 if m <= 0x3f and n <= 0x3f:
1.49 show(i, m, n, "i")
1.50 print "do =", do