Module:Q-odd-limit intervals: Difference between revisions

ArrowHead294 (talk | contribs)
No edit summary
ArrowHead294 (talk | contribs)
Try adding in direct approximation
Line 102: Line 102:
true_size = monzo2cent(monzo_list[i], subgroup)
true_size = monzo2cent(monzo_list[i], subgroup)
approx_size = step_size * inner_product(val, monzo_list[i])
approx_size = step_size * inner_product(val, monzo_list[i])
error_abs = math.abs(approx_size - true_size)
error_abs_pval = math.abs(approx_size - true_size)
error_rel = 100 * error_abs / step_size
error_rel_direct = 100 * approx_size / step_size
error_rel_pval = 100 * error_abs_pval / step_size
error_list[i] =  
error_list[i] =  
{
{
ratio = ratio,  
ratio = ratio,  
comp = comp,  
comp = comp,  
error_abs = error_abs,  
error_abs_direct = approx_size,
error_rel = error_rel
error_abs_pval = error_abs_pval,
error_rel_direct = error_rel_direct,
error_rel_pval = error_rel_pval
}
}
end
end
table.sort(error_list, function(a, b) return a.error_abs < b.error_abs end)
table.sort(error_list, function(a, b) return a.error_abs_pval < b.error_abs_pval end)
return error_list
return error_list
end
end
Line 125: Line 128:
for i = 1, #error_list do
for i = 1, #error_list do
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_list[i].ratio.num, error_list[i].ratio.den, 2 * error_list[i].ratio.den, error_list[i].ratio.num)
error_abs = string.format("%.3f", error_list[i].error_abs)
error_abs_pval = string.format("%.3f", error_list[i].error_abs_pval)
error_rel = string.format("%.1f", error_list[i].error_rel)
error_rel_pval = string.format("%.1f", error_list[i].error_rel_pval)
error_abs_direct = string.format("%.3f", error_list[i].error_abs_direct)
error_rel_direct = string.format("%.1f", error_list[i].error_rel_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
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
ratiocomp = "'''" .. ratiocomp .. "'''"
ratiocomp = "'''" .. ratiocomp .. "'''"
error_abs = "'''" .. error_abs .. "'''"
error_abs_pval = "'''" .. error_abs_pval .. "'''"
error_rel = "'''" .. error_rel .. "'''"
error_rel_pval = "'''" .. error_rel_pval .. "'''"
error_abs_direct = "'''" .. error_abs_direct .. "'''"
error_rel_direct = "'''" .. error_rel_direct .. "'''"
end
end
if error_list[i].error_rel > 50 then
if error_list[i].error_rel_pval > 50 then
ratiocomp = "''" .. ratiocomp .. "''"
ratiocomp = "''" .. ratiocomp .. "''"
error_abs = "''" .. error_abs .. "''"
error_abs_pval = "''" .. error_abs_pval .. "''"
error_rel = "''" .. error_rel .. "''"
error_rel_pval = "''" .. error_rel_pval .. "''"
error_abs_direct = "''" .. error_abs_direct .. "''"
error_rel_direct = "''" .. error_rel_direct .. "''"
end
end
t_body[i] = string.format("|-\n| %s\n| %s\n| %s", ratiocomp, error_abs, error_rel)
t_body[i] = string.format("|-\n| %s\n| %s\n| %s\n| %s\n| %s", ratiocomp, error_abs_direct, error_rel_direct, error_abs_pval, error_rel_pval)
end
end


return "{| class=\"wikitable center-all mw-collapsible mw-collapsed\"\n" ..
return "{| class=\"wikitable center-all mw-collapsible mw-collapsed\"\n" ..
"|+ style=\"white-space: nowrap; font-size: 110%;\" | " .. t_title .. "\n" ..
"|+ style=\"white-space: nowrap;\" | " .. t_title .. "\n" ..
"|-\n" ..
"|-\n" ..
"! Interval, complement\n" ..
"! rowspan=\"2\" | Interval and complement\n" ..
"! colspan=\"2\" | Direct approximation\n" ..
"! colspan=\"2\" | Patent val mapping\n" ..
"|-\n" ..
"! Error (abs, [[Cent|¢]])\n" ..
"! Error (rel, [[Relative cent|%]])\n" ..
"! Error (abs, [[Cent|¢]])\n" ..
"! Error (abs, [[Cent|¢]])\n" ..
"! Error (rel, [[Relative cent|%]])\n" ..
"! Error (rel, [[Relative cent|%]])\n" ..