Module:Math: Difference between revisions

m
1 revision imported from wikipedia:Module:Math
en>Primefac
(add "sum" per merge with Module:Sum)
m (1 revision imported from wikipedia:Module:Math)
 
(8 intermediate revisions by 4 users not shown)
Line 52:
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
end
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
Line 120:
else
return p._order(input_number)
end
end
 
Line 154:
return math.log10(denom_value);
end
end
end
end
end
 
input_number, input_string = p._cleanNumber(input_string);
Line 163:
else
return p._precision(input_string)
end
end
 
Line 180:
x = string.sub(x, 1, exponent_pos - 1)
result = result - tonumber(exponent)
end
 
if decimal ~= nil then
Line 223:
 
--[[
median
min
 
Find the median of set of numbers
 
Usage:
{{#invoke:Math | median | number1 | number2 | ...}}
OR
{{#invoke:Math | median }}
]]
 
function wrap.median(args)
return p._median(unpackNumberArgs(args))
end
 
function p._median(...)
local vals = makeArgArray(...)
local count = #vals
table.sort(vals)
 
if count == 0 then
return 0
end
 
if p._mod(count, 2) == 0 then
return (vals[count/2] + vals[count/2+1])/2
else
return vals[math.ceil(count/2)]
end
end
 
--[[
min
 
Finds the minimum argument
Line 248 ⟶ 279:
 
--[[
sum
 
Finds the sum
Line 274 ⟶ 305:
 
--[[
average
 
Finds the average
Line 316 ⟶ 347:
else
return p._round(value, precision)
end
end
 
Line 330 ⟶ 361:
 
Usage:
{{#invoke:Math | loglog10 | x }}
]]
 
Line 356 ⟶ 387:
else
return p._mod(x, y)
end
end
 
Line 400 ⟶ 431:
precision_format
 
Rounds a number to the specified precision and formats according to rules
originally used for {{template:Rnd}}. Output is a string.
 
Line 432 ⟶ 463:
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
orig_precisionif =order + p._precision(value_string) >= 14 then
precision = 13 - order;
if order + orig_precision >= 14 then
end
precision = 13 - order;
end
end
 
Line 442 ⟶ 472:
value = p._round(value, precision)
current_precision = p._precision(value)
end
 
local formatted_num = lang:formatNum(math.abs(value))
Line 452 ⟶ 482:
else
sign = ''
end
 
-- Handle cases requiring scientific notation
Line 461 ⟶ 491:
formatted_num = lang:formatNum(math.abs(value))
else
order = 0;
end
formatted_num = sign .. formatted_num
 
-- Pad with zeros, if needed
if current_precision < precision then
local padding
Line 479 ⟶ 509:
 
formatted_num = formatted_num .. string.rep('0', padding)
end
else
padding = precision - current_precision
if padding > 20 then
Line 496 ⟶ 526:
else
order = lang:formatNum(order)
end
 
formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
Line 505 ⟶ 535:
 
--[[
divide
Helper function that interprets the input numerically. If the
 
Implements the division operator
 
Usage:
{{#invoke:Math | divide | x | y | round= | precision= }}
 
--]]
function wrap.divide(args)
local x = args[1]
local y = args[2]
local round = args.round
local precision = args.precision
if not yesno then
yesno = require('Module:Yesno')
end
return p._divide(x, y, yesno(round), precision)
end
 
function p._divide(x, y, round, precision)
if y == nil or y == "" then
return err("Empty divisor")
elseif not tonumber(y) then
if type(y) == 'string' and string.sub(y, 1, 1) == '<' then
return y
else
return err("Not a number: " .. y)
end
elseif x == nil or x == "" then
return err("Empty dividend")
elseif not tonumber(x) then
if type(x) == 'string' and string.sub(x, 1, 1) == '<' then
return x
else
return err("Not a number: " .. x)
end
else
local z = x / y
if round then
return p._round(z, 0)
elseif precision then
return p._round(z, precision)
else
return z
end
end
end
 
--[[
Helper function that interprets the input numerically. If the
input does not appear to be a number, attempts evaluating it as
a parser functions expression.