Module:GemBreakeven
Jump to navigation
Jump to search
Module documentation
This documentation is transcluded from Template:No documentation/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:GemBreakeven/doc. [edit]
Module:GemBreakeven's function breakeven_level is invoked by Template:GemBreakeven.
-- <pre>
-- Implements {{GemBreakeven}}
-- Based on https://oldschool.runescape.wiki/w/Module:Coins
local p = {}
--- Use this to create a formatted string with %
-- local function breakeven_probability(uncut_,cut_)
-- local math = math
-- uncut = tonumber(uncut_)
-- cut = tonumber( cut_)
-- p0 = uncut/cut
-- breakeven_prob = math.floor(10000 * p0)/100
-- return breakeven_prob
-- end
local function breakeven_level(uncut_,cut_,r_,beta_,gamma_)
local math = math
local uncut = tonumber(uncut_)
local cut = tonumber( cut_)
local r = tonumber( r_)
local beta = tonumber( beta_)
local gamma = tonumber(gamma_)
-- Probability P of cut is
--
-- P = ( (level - 1)*r + beta ) / gamma
--
-- Breakeven Probability is given by (cut and uncut in g.p.)
--
-- p0*cut - uncut = 0
-- -> p0 = uncut / cut
--
-- Define breakeven grand exchange ratios of cut and uncut alpha:
--
-- alpha = cut / uncut = 1 / p0
--
-- Solve for breakeven level:
--
-- level_0 = 1 + ( gamma - beta * alpha ) / ( alpha * r)
--------------
local alpha = cut/uncut -- Ratio of cut price to uncut price
local breakeven_level = 'beyond 99 (breakeven not possible)'
if alpha > 1 then
local ell0 = 1 + ( gamma - beta * alpha ) / ( alpha * r )
breakeven_level = math.ceil(ell0)
end
return breakeven_level
end
--
-- {{GemBreakeven}} Access point
--
function p.breakeven_level(frame)
local args = frame:getParent().args
local uncut = args[1] or args['uncut'] or args.uncut or '1'
local cut = args[2] or args['cut'] or args.cut or '1'
local r = args[3] or args['r'] or args.r or '1'
local beta = args[4] or args['beta'] or args.beta or '0'
local gamma = args[5] or args['gamma'] or args.gamma or '1'
return breakeven_level(uncut,cut,r,beta,gamma)
end
--
-- Module access point
--
function p._breakeven_level(uncut_,cut_,r_,beta_,gamma_)
_uncut_ = tostring(uncut_)
_cut_ = tostring( cut_)
_r_ = tostring( r_)
_beta_ = tostring( beta_)
_gamma_ = tostring(gamma_)
return breakeven_level(_uncut_,_cut_,_r_,_beta_,_gamma_)
end
return p