Module:Q-odd-limit intervals: Difference between revisions
ArrowHead294 (talk | contribs) No edit summary |
ArrowHead294 (talk | contribs) Restore revision 144934 |
||
| Line 94: | Line 94: | ||
end | end | ||
local function | local function find_error(val, subgroup, monzo_list) | ||
local step_size = 1200/val[1] | local step_size = 1200/val[1] | ||
local true_size | local true_size | ||
local approx_size | local approx_size | ||
local | local error_list = {} | ||
for i = 1, #monzo_list do | for i = 1, #monzo_list do | ||
ratio = monzo2ratio(monzo_list[i], subgroup) | ratio = monzo2ratio(monzo_list[i], subgroup) | ||
comp = {2 * ratio.den, ratio.num} | comp = {2 * ratio.den, ratio.num} | ||
true_size = monzo2cent(monzo_list[i], subgroup) | true_size = monzo2cent(monzo_list[i], subgroup) | ||
approx_size = step_size * inner_product(val, monzo_list[i]) | |||
nearest_size = math.floor(true_size / step_size + 0.5) | nearest_size = math.floor(true_size / step_size + 0.5) | ||
error_abs_direct = math.abs(nearest_size * step_size - true_size) | error_abs_direct = math.abs(nearest_size * step_size - true_size) | ||
error_abs_val = math.abs(approx_size - true_size) | |||
error_rel_direct = 100 * error_abs_direct / step_size | error_rel_direct = 100 * error_abs_direct / step_size | ||
error_rel_val = 100 * error_abs_val / step_size | |||
error_list[i] = | |||
{ | { | ||
ratio = ratio, | ratio = ratio, | ||
comp = comp, | comp = comp, | ||
error_abs_direct = error_abs_direct, | error_abs_direct = error_abs_direct, | ||
error_abs_val = error_abs_val, | |||
error_rel_direct = error_rel_direct, | error_rel_direct = error_rel_direct, | ||
error_rel_val = error_rel_val | error_rel_val = error_rel_val | ||
} | } | ||
end | end | ||
table.sort( | table.sort(error_list, function(a, b) return a.error_abs_val < b.error_abs_val end) | ||
return | return error_list | ||
end | end | ||
| Line 150: | Line 130: | ||
val[i] = utils._round_dec(steps*utils._log(subgroup[i], 2)) | val[i] = utils._round_dec(steps*utils._log(subgroup[i], 2)) | ||
end | end | ||
error_list = find_error(val, subgroup, monzo_list) | |||
for i = 1, #error_list do | |||
for i = 1, # | ratiocomp = string.format("%d/%d, %d/%d", error_list[i].ratio.num, error_list[i].ratio.den, 2 * error_list[i].ratio.den, error_list[i].ratio.num) | ||
ratiocomp = string.format("%d/%d, %d/%d", | error_abs_val = string.format("%.3f", error_list[i].error_abs_val) | ||
error_abs_val = string.format("%.3f", | error_rel_val = string.format("%.1f", error_list[i].error_rel_val) | ||
error_rel_val = string.format("%.1f", | error_abs_direct = string.format("%.3f", error_list[i].error_abs_direct) | ||
error_abs_direct = string.format("%.3f", | error_rel_direct = string.format("%.1f", error_list[i].error_rel_direct) | ||
error_rel_direct = string.format("%.1f", | if bit32.band(error_list[i].ratio.den, error_list[i].ratio.den - 1) == 0 and is_in(error_list[i].ratio.num, subgroup) then -- check power of 2 for den and prime for num | ||
if bit32.band( | |||
ratiocomp = "'''" .. ratiocomp .. "'''" | ratiocomp = "'''" .. ratiocomp .. "'''" | ||
error_abs_val = "'''" .. error_abs_val .. "'''" | error_abs_val = "'''" .. error_abs_val .. "'''" | ||
| Line 165: | Line 144: | ||
error_rel_direct = "'''" .. error_rel_direct .. "'''" | error_rel_direct = "'''" .. error_rel_direct .. "'''" | ||
end | end | ||
if | if error_list[i].error_rel_val > 50 then | ||
ratiocomp = "''" .. ratiocomp .. "''" | ratiocomp = "''" .. ratiocomp .. "''" | ||
error_abs_val = "''" .. error_abs_val .. "''" | error_abs_val = "''" .. error_abs_val .. "''" | ||