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