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 find_error(val, subgroup, monzo_list)
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_direct = math.abs(nearest_size * step_size - true_size)
error_abs_val = math.abs(approx_size - true_size)
error_abs_val = math.abs(approx_size - true_size)
error_rel_direct = 100 * error_abs_direct / step_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_direct = error_abs_direct,
error_abs_val = error_abs_val,  
error_abs_val = error_abs_val,  
error_rel_direct = error_rel_direct,
error_rel_val = error_rel_val
error_rel_val = error_rel_val
}
}
end
end
table.sort(error_list, function(a, b) return a.error_abs_val < b.error_abs_val end)
table.sort(error_list_val, function(a, b) return a.error_abs_val < b.error_abs_val end)
return error_list
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
error_list = find_error(val, subgroup, monzo_list)
errlist_direct = find_error_direct(val, subgroup, monzo_list)
for i = 1, #error_list do
errlist_val = find_error_val(val, subgroup, monzo_list)
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)
for i = 1, #errlist_direct do
error_abs_val = string.format("%.3f", error_list[i].error_abs_val)
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_list[i].error_rel_val)
error_abs_val = string.format("%.3f", errlist_direct[i].error_abs_val)
error_abs_direct = string.format("%.3f", error_list[i].error_abs_direct)
error_rel_val = string.format("%.1f", errlist_direct[i].error_rel_val)
error_rel_direct = string.format("%.1f", error_list[i].error_rel_direct)
error_abs_direct = string.format("%.3f", errlist_direct[i].error_abs_direct)
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
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 error_list[i].error_rel_val > 50 then
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 .. "''"