در حال ویرایش پودمان:Math

هشدار: شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر وارد شوید یا یک حساب کاربری بسازید، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.

این ویرایش را می‌توان خنثی کرد. لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.

نسخهٔ فعلی متن شما
خط ۵: خط ۵:
]]
]]


local yesno, getArgs -- lazily initialized
local yesno = require('Module:Yesno')
local getArgs = require('Module:Arguments').getArgs


local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
خط ۱۶: خط ۱۷:
local function err(msg)
local function err(msg)
-- Generates wikitext error messages.
-- Generates wikitext error messages.
return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
return mw.ustring.format('<strong class="error">خطای قالب‌بندی: %s</strong>', msg)
end
end


خط ۴۹: خط ۵۰:
end
end


local function fold(func, ...)
local function applyFuncToArgs(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- 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.
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
local count = #vals -- The number of valid arguments
if count == 0 then return
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
nil, 0
end
end  
local ret = table.remove(vals, 1)
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
for _, val in ipairs(vals) do
خط ۶۳: خط ۶۴:
end
end
return ret, count
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
end


خط ۱۱۷: خط ۱۱۰:
local input_number = p._cleanNumber(input_string);
local input_number = p._cleanNumber(input_string);
if input_number == nil then
if input_number == nil then
return err('order of magnitude input appears non-numeric')
return err('ورودی مرتبه بزرگی بنظر می‌آید غیر عددی باشد')
else
else
return p._order(input_number)
return p._order(input_number)
end
end  
end
end


خط ۱۴۲: خط ۱۳۵:
local input_number;
local input_number;


if not yesno then
yesno = require('Module:Yesno')
end
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
local pos = string.find(input_string, '/', 1, true);
local pos = string.find(input_string, '/', 1, true);
خط ۱۵۴: خط ۱۴۴:
return math.log10(denom_value);
return math.log10(denom_value);
end
end
end
end                      
end
end
end
end  


input_number, input_string = p._cleanNumber(input_string);
input_number, input_string = p._cleanNumber(input_string);
if input_string == nil then
if input_string == nil then
return err('precision input appears non-numeric')
return err('ورودی دقت بنظر می‌آید غیر عددی باشد')
else
else
return p._precision(input_string)
return p._precision(input_string)
end
end  
end
end


خط ۱۸۰: خط ۱۷۰:
x = string.sub(x, 1, exponent_pos - 1)
x = string.sub(x, 1, exponent_pos - 1)
result = result - tonumber(exponent)
result = result - tonumber(exponent)
end
end  


if decimal ~= nil then
if decimal ~= nil then
خط ۱۹۸: خط ۱۸۸:
return result
return result
end
end


--[[
--[[
خط ۲۱۶: خط ۲۰۵:


function p._max(...)
function p._max(...)
local max_value = binary_fold((function(a, b) return a > b end), ...)
local function maxOfTwo(a, b)
if a > b then
return a
else
return b
end
end
local max_value = applyFuncToArgs(maxOfTwo, ...)
if max_value then
if max_value then
return max_value
return max_value
خط ۲۲۳: خط ۲۱۹:


--[[
--[[
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
Finds the minimum argument
خط ۲۷۲: خط ۲۳۷:


function p._min(...)
function p._min(...)
local min_value = binary_fold((function(a, b) return a < b end), ...)
local function minOfTwo(a, b)
if a < b then
return a
else
return b
end
end
local min_value = applyFuncToArgs(minOfTwo, ...)
if min_value then
if min_value then
return min_value
return min_value
خط ۲۷۹: خط ۲۵۱:


--[[
--[[
sum
average  
 
Finds the sum
 
Usage:
{{#invoke:Math| sum | value1 | value2 | ... }}
OR
{{#invoke:Math| sum }}
 
Note, any values that do not evaluate to numbers are ignored.
]]
 
function wrap.sum(args)
return p._sum(unpackNumberArgs(args))
end
 
function p._sum(...)
local sums, count = fold((function(a, b) return a + b end), ...)
if not sums then
return 0
else
return sums
end
end
 
--[[
average


Finds the average
Finds the average
خط ۳۲۲: خط ۲۶۸:


function p._average(...)
function p._average(...)
local sum, count = fold((function(a, b) return a + b end), ...)
local function getSum(a, b)
return a + b
end
local sum, count = applyFuncToArgs(getSum, ...)
if not sum then
if not sum then
return 0
return 0
خط ۳۴۴: خط ۲۹۳:
local precision = p._cleanNumber(args[2] or args.precision or 0)
local precision = p._cleanNumber(args[2] or args.precision or 0)
if value == nil or precision == nil then
if value == nil or precision == nil then
return err('round input appears non-numeric')
return err('ورودی گرد بنظر می‌آید غیر عددی باشد')
else
else
return p._round(value, precision)
return p._round(value, precision)
end
end  
end
end


خط ۳۵۳: خط ۳۰۲:
local rescale = math.pow(10, precision or 0);
local rescale = math.pow(10, precision or 0);
return math.floor(value * rescale + 0.5) / rescale;
return math.floor(value * rescale + 0.5) / rescale;
end
--[[
log10
returns the log (base 10) of a number
Usage:
{{#invoke:Math | log10 | x }}
]]
function wrap.log10(args)
return math.log10(args[1])
end
end


خط ۳۸۲: خط ۳۱۸:
local y = p._cleanNumber(args[2])
local y = p._cleanNumber(args[2])
if not x then
if not x then
return err('first argument to mod appears non-numeric')
return err('نخستین آرگومان برای mod بنظر می‌آید غیر عددی باشد')
elseif not y then
elseif not y then
return err('second argument to mod appears non-numeric')
return err('دومین آرگومان برای mod بنظر می‌آید غیر عددی باشد')
else
else
return p._mod(x, y)
return p._mod(x, y)
end
end  
end
end


خط ۴۲۴: خط ۳۶۰:
return oldr
return oldr
end
end
local result, count = fold(findGcd, ...)
local result, count = applyFuncToArgs(findGcd, ...)
return result
return result
end
end
خط ۴۳۱: خط ۳۶۷:
precision_format
precision_format


Rounds a number to the specified precision and formats according to rules
Rounds a number to the specified precision and formats according to rules  
originally used for {{template:Rnd}}.  Output is a string.
originally used for {{template:Rnd}}.  Output is a string.


خط ۴۵۴: خط ۳۹۰:
-- Check for non-numeric input
-- Check for non-numeric input
if value == nil or precision == nil then
if value == nil or precision == nil then
return err('invalid input when rounding')
return err('ورودی نامعتبر هنگام گرد کردن')
end
end


خط ۴۶۳: خط ۳۹۹:
-- some circumstances because the terminal digits will be inaccurately reported.
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
if order + precision >= 14 then
if order + p._precision(value_string) >= 14 then
orig_precision = p._precision(value_string)
precision = 13 - order;
if order + orig_precision >= 14 then
end
precision = 13 - order;      
end      
end
end


خط ۴۷۲: خط ۴۰۹:
value = p._round(value, precision)
value = p._round(value, precision)
current_precision = p._precision(value)
current_precision = p._precision(value)
end
end  


local formatted_num = lang:formatNum(math.abs(value))
local formatted_num = lang:formatNum(math.abs(value))
خط ۴۸۲: خط ۴۱۹:
else
else
sign = ''
sign = ''
end
end  


-- Handle cases requiring scientific notation
-- Handle cases requiring scientific notation
خط ۴۹۱: خط ۴۲۸:
formatted_num = lang:formatNum(math.abs(value))
formatted_num = lang:formatNum(math.abs(value))
else
else
order = 0;
order = 0;      
end
end
formatted_num = sign .. formatted_num
formatted_num = sign .. formatted_num


-- Pad with zeros, if needed
-- Pad with zeros, if needed  
if current_precision < precision then
if current_precision < precision then
local padding
local padding
خط ۵۰۹: خط ۴۴۶:


formatted_num = formatted_num .. string.rep('0', padding)
formatted_num = formatted_num .. string.rep('0', padding)
end
end          
else
else                  
padding = precision - current_precision
padding = precision - current_precision
if padding > 20 then
if padding > 20 then
خط ۵۲۶: خط ۴۶۳:
else
else
order = lang:formatNum(order)
order = lang:formatNum(order)
end
end  


formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
formatted_num = formatted_num .. '<span style="margin:0 .25em 0 .15em">×</span>۱۰<sup>' .. order .. '</sup>'
end
end


خط ۵۳۵: خط ۴۷۲:


--[[
--[[
Helper function that interprets the input numerically.  If the
Helper function that interprets the input numerically.  If the  
input does not appear to be a number, attempts evaluating it as
input does not appear to be a number, attempts evaluating it as
a parser functions expression.
a parser functions expression.
خط ۵۵۴: خط ۴۹۱:
-- If failed, attempt to evaluate input as an expression
-- If failed, attempt to evaluate input as an expression
if number == nil then
if number == nil then
local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
local frame = mw.getCurrentFrame()
if success then
local attempt = frame:callParserFunction('#expr', number_string)
number = tonumber(result)
attempt = tonumber(attempt)
if attempt ~= nil then
number = attempt
number_string = tostring(number)
number_string = tostring(number)
else
else
خط ۵۷۹: خط ۵۱۸:
]]
]]


local mt = { __index = function(t, k)
local function makeWrapper(funcName)
return function(frame)
return function (frame)
if not getArgs then
local args = getArgs(frame) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
getArgs = require('Module:Arguments').getArgs
return wrap[funcName](args)
end
return wrap[k](getArgs(frame)-- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
end
end
end }
end
 
for funcName in pairs(wrap) do
p[funcName] = makeWrapper(funcName)
end


return setmetatable(p, mt)
return p
لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در ویکی حج منتشرشده تحت Creative Commons Attribution-NonCommercial-ShareAlike در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.
شما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!
لغو راهنمای ویرایش‌کردن (در پنجرهٔ تازه باز می‌شود)

الگوی به‌کاررفته در این صفحه: