柯字五行属什么| 吃什么补眼睛| 慢性胰腺炎有什么症状| 监视居住是什么意思| 摸摸唱是什么| 1961属什么生肖| 外强中干什么意思| 2021什么年| 男人下巴有痣代表什么| 强的松是什么药| 做梦梦见狗是什么意思| 三阳开泰是什么意思| 周武王叫什么名字| 四月二十四是什么星座| 肾阴亏虚吃什么药| 健康是什么| 东北方向五行属什么| cbt是什么意思| 煲汤放什么药材补气血| 眉眼是什么意思| 淼读什么字| 吃叶酸有什么好处| 第一次表白送什么花| 痛经喝什么能缓解| 太阳出来我爬山坡是什么歌| 七点到九点是什么时辰| 户口是什么意思| 牛蛙不能和什么一起吃| 让球是什么意思| 董小姐是什么意思| 跑水是什么意思| 神助攻什么意思| 1988年是什么命| 赵本山什么时候去世的| 小狗不能吃什么| 残留是什么意思| 芥子是什么| 柔式按摩是什么| 脚背肿是什么原因| 中国发明了什么| 发光免疫是检查什么的| 祖坟冒青烟是什么意思| 网球ad是什么意思| 孕囊长什么样| 喝醉酒是什么感觉| 3月14日是什么星座| 咽炎吃什么药最管用| 尿道炎用什么药| 夜明珠代表什么生肖| 五行海中金是什么意思| 碱水是什么| 右肩膀疼痛预示什么病| 尿泡沫多吃什么药| 吃什么中药能降血压| 晕车是什么原因引起的| 厚黑学什么意思| 榻榻米床垫什么材质的好| ccf是什么| 做梦梦到牙齿掉了是什么意思| 牛羊成群是什么生肖| foxer是什么牌子| 消化酶是什么| 补气补血吃什么好| 一什么牌子| 榴莲和什么相克| 爱放屁什么原因| 眼睛模糊流泪用什么药| 褐色分泌物是什么原因| 买房要看什么| 6.25是什么星座| 吃什么补脾| art是什么| 睡觉起来眼睛肿是什么原因| 嗜酸性粒细胞偏低是什么原因| 拘留是什么意思| 六娃的能力是什么| 澳门有什么特产| 止语是什么意思| 膝关节积液吃什么药| 乳房长斑点是什么原因| 6代表什么| 阿莫西林和头孢有什么区别| 温字五行属什么| 肝风内动是什么意思| 梦见吃葡萄是什么意思| 熙字五行属什么| 胃痉挛吃什么药好| 手串13颗代表什么意思| 新生儿dha什么时候开始吃| 什么叫做犯太岁| 幽门螺旋杆菌有什么症状| 病毒由什么构成| 划扣是什么意思| 红萝卜什么时候种| mw是什么单位| 狐臭是什么味| 创伤是什么意思| 月桂酰两性基乙酸钠是什么| 关东煮为什么叫关东煮| 般若是什么意思| 卵巢黄体是什么意思| 精疲力尽是什么意思| 横眉冷对是什么意思| 杀了神经的牙为什么还疼| 血压高吃什么菜和水果能降血压| 放养是什么意思| 跑水是什么意思| 蛇配什么生肖最好| 有眼屎是什么原因| 硬不起来吃什么药| 为什么低烧比高烧可怕| 梦见蛇咬别人是什么意思| 玫瑰痤疮是什么原因| 没有什么了不起| 什么是人格| 品名什么意思| 常州有什么特产| 新加坡属于什么气候| 兔肉不能和什么一起吃| 发际线长痘痘是什么原因| 维生素c是什么| 道德制高点什么意思| 脚心发麻是什么原因引起的| 一厢情愿什么意思| 牙黄是什么原因引起的| 为什么指甲会凹凸不平| 性格好的女生是什么样| 世界上最软的东西是什么| 梦见爬山是什么预兆| 玩票是什么意思| 肌病是什么病| 六级什么时候考| 翊什么意思| 蠢是什么意思| 食道疼是什么原因| 羊鞭是什么| 南京有什么美食| 悠是什么意思| 一个既一个旦念什么| 尿液黄绿色是什么原因| 牛皮癣用什么药膏| 醋泡脚有什么好处| 军衔是什么意思| 女红是什么意思| 剖腹产后可以吃什么水果| 高原反应什么症状| 阑尾炎吃什么水果| 肝损伤吃什么药| 鼻衄是什么意思| 逃出生天什么意思| 油菜花像什么| 安全期是什么| 效应什么意思| 看颈椎病挂什么科| 插画师是做什么的| 十一月五号是什么星座| 老是想拉尿是什么原因| 心脏大是什么病严重吗| 染色体异常是什么原因导致的| 作践自己是什么意思| 喝柠檬水有什么作用与功效| 什么炒肉好吃| 脂膜炎是什么病严重吗| 中午12点是什么时辰| 硒酵母胶囊对甲状腺的作用是什么| 左耳朵痒代表什么预兆| 梦到捡菌子是什么意思| 体检吃早餐有什么影响| 杯弓蛇影告诉我们什么道理| 乙肝二四五阳性什么意思| mickey是什么牌子| 吃人参对身体有什么好处| 医生为为什么建议不吃生菜| 雪里红是什么| 左下眼皮跳是什么预兆| 什么叫脂肪肝| 斗破苍穹什么时候出的| 胃疼的人吃什么最养胃| 屡试不爽是什么意思| 强阳下降到什么程度开始排卵| 蚂蚁喜欢吃什么| 10月17是什么星座| 溶肌症的症状是什么| 梦见棺材是什么意思| 红烧肉炖什么菜最好吃| 苔菜是什么菜图片| 黑色车牌是什么车| 孕酮低会有什么影响| ug是什么单位| 乳腺增生是什么意思| 尔字五行属什么| 脑萎缩挂什么科| 肉沫炒什么好吃| 左侧卵巢囊肿是什么原因引起的| 恶心是什么原因| 心律不齐是什么原因引起的| 年终奖一般什么时候发| 人血白蛋白适合什么人| 眉目的比喻义是什么| 糖化血红蛋白高是什么意思| 猫癣用什么药| 嗓子疼咳嗽吃什么药| 肝郁脾虚是什么意思| 尿不尽是什么症状| 反骨是什么意思| 梦见和婆婆吵架是什么意思| 尿道尿血是什么原因| 阴间是什么意思| 油是什么意思| 小孩肚脐眼上面疼是什么原因| siri是什么| 老佛爷是什么意思| 油面筋是什么做的| 为什么乳头会痛| 排黑便是什么原因| ufo是什么意思| 身上长红色痣是什么原因| 5月14日是什么星座| 办出国护照需要什么手续| 大便干燥用什么药| 膝关节疼痛用什么药效果最好| 活碱是什么| 口水臭是什么原因引起的| 面试是什么意思| 蛋白质变性的本质是什么| 蜘蛛痣是什么样的| 披萨用什么面粉| amber是什么意思| 市长属于什么级别| 胃糜烂吃什么药最好| 南京立秋吃什么| 白带豆腐渣状用什么药| 乙肝核心抗体高是什么意思| cpr什么意思| 女人左眼跳是什么意思| 霉菌阴性是什么意思| 专车是什么意思| 逸五行属性是什么| 低烧是什么症状和感觉| 春天是什么颜色的| 吃藕是什么意思| 什么杀精子最厉害| 高血压用什么药最好| 眼睛肿了用什么药| 切记是什么意思| 高丽参和红参有什么区别| 绿皮鸡蛋是什么品种鸡| 仙贝是什么意思| 猫鼬是什么动物| 梦见蛇是什么预兆| 肾的作用和功能是什么| 出品是什么意思| 康五行属什么| 受凉肚子疼吃什么药| 牛犇是什么意思| 热射病是什么病| 心率高有什么危害| 1比1是什么意思| 什么是孽缘| 手表五行属什么| 贵人相助是什么意思| 圣贤是什么意思| 后羿射日是什么意思| 一念之间什么意思| 百度Jump to content

今日头条--福建频道--人民网

Mai Wikipedia
百度 《生命时报》:一年四季都喝茶,不同季节是否有不同的喝茶讲究?什么季节适合喝什么样的茶呢?蔡炳勤:中医认为,天人相应,饮茶也要与季节相应。

Documentation for this module may be created at Module:Math/doc

--[[

This module provides a number of basic mathematical operations.

]]

local yesno, getArgs -- lazily initialized

local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua.

--[[
Helper functions used to avoid redundant code.
]]

local function err(msg)
	-- Generates wikitext error messages.
	return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
end

local function unpackNumberArgs(args)
	-- Returns an unpacked list of arguments specified with numerical keys.
	local ret = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			table.insert(ret, v)
		end
	end
	return unpack(ret)
end

local function makeArgArray(...)
	-- Makes an array of arguments from a list of arguments that might include nils.
	local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs.
	local nums = {} -- Stores the numbers of valid numerical arguments.
	local ret = {}
	for k, v in pairs(args) do
		v = p._cleanNumber(v)
		if v then
			nums[#nums + 1] = k
			args[k] = v
		end
	end
	table.sort(nums)
	for i, num in ipairs(nums) do
		ret[#ret + 1] = args[num]
	end
	return ret
end

local function fold(func, ...)
	-- 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
		ret = func(ret, val)
	end
	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

--[[
random

Generate a random number

Usage:
{{#invoke: Math | random }}
{{#invoke: Math | random | maximum value }}
{{#invoke: Math | random | minimum value | maximum value }}
]]

function wrap.random(args)
	local first = p._cleanNumber(args[1])
	local second = p._cleanNumber(args[2])
	return p._random(first, second)
end

function p._random(first, second)
	math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000))
	-- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params.
	if first and second then
		if first <= second then -- math.random doesn't allow the first number to be greater than the second.
			return math.random(first, second)
		end
	elseif first then
		return math.random(first)
	else
		return math.random()
	end
end

--[[
order

Determine order of magnitude of a number

Usage:
{{#invoke: Math | order | value }}
]]

function wrap.order(args)
	local input_string = (args[1] or args.x or '0');
	local input_number = p._cleanNumber(input_string);
	if input_number == nil then
		return err('order of magnitude input appears non-numeric')
	else
		return p._order(input_number)
	end    
end

function p._order(x)
	if x == 0 then return 0 end
	return math.floor(math.log10(math.abs(x)))
end

--[[
precision

Detemines the precision of a number using the string representation

Usage:
{{ #invoke: Math | precision | value }}
]]

function wrap.precision(args)
	local input_string = (args[1] or args.x or '0');
	local trap_fraction = args.check_fraction;
	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]].
		local pos = string.find(input_string, '/', 1, true);
		if pos ~= nil then
			if string.find(input_string, '/', pos + 1, true) == nil then
				local denominator = string.sub(input_string, pos+1, -1);
				local denom_value = tonumber(denominator);
				if denom_value ~= nil then
					return math.log10(denom_value);
				end
			end                        
		end
	end    

	input_number, input_string = p._cleanNumber(input_string);
	if input_string == nil then
		return err('precision input appears non-numeric')
	else
		return p._precision(input_string)
	end    
end

function p._precision(x)
	if type(x) == 'number' then
		x = tostring(x)
	end
	x = string.upper(x)

	local decimal = x:find('%.')
	local exponent_pos = x:find('E')
	local result = 0;

	if exponent_pos ~= nil then
		local exponent = string.sub(x, exponent_pos + 1)
		x = string.sub(x, 1, exponent_pos - 1)
		result = result - tonumber(exponent)
	end    

	if decimal ~= nil then
		result = result + string.len(x) - decimal
		return result
	end

	local pos = string.len(x);
	while x:byte(pos) == string.byte('0') do
		pos = pos - 1
		result = result - 1
		if pos <= 0 then
			return 0
		end
	end

	return result
end


--[[
max

Finds the maximum argument

Usage:
{{#invoke:Math| max | value1 | value2 | ... }}

Note, any values that do not evaluate to numbers are ignored.
]]

function wrap.max(args)
	return p._max(unpackNumberArgs(args))
end

function p._max(...)
	local max_value = binary_fold((function(a, b) return a > b end), ...)
	if max_value then
		return max_value
	end
end

--[[
median

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

Usage:
{{#invoke:Math| min | value1 | value2 | ... }}
OR
{{#invoke:Math| min }}

When used with no arguments, it takes its input from the parent
frame.  Note, any values that do not evaluate to numbers are ignored.
]]

function wrap.min(args)
	return p._min(unpackNumberArgs(args))
end

function p._min(...)
	local min_value = binary_fold((function(a, b) return a < b end), ...)
	if min_value then
		return min_value
	end
end

--[[
sum 

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

Usage:
{{#invoke:Math| average | value1 | value2 | ... }}
OR
{{#invoke:Math| average }}

Note, any values that do not evaluate to numbers are ignored.
]]

function wrap.average(args)
	return p._average(unpackNumberArgs(args))
end

function p._average(...)
	local sum, count = fold((function(a, b) return a + b end), ...)
	if not sum then
		return 0
	else
		return sum / count
	end
end

--[[
round

Rounds a number to specified precision

Usage:
{{#invoke:Math | round | value | precision }}

--]]

function wrap.round(args)
	local value = p._cleanNumber(args[1] or args.value or 0)
	local precision = p._cleanNumber(args[2] or args.precision or 0)
	if value == nil or precision == nil then
		return err('round input appears non-numeric')
	else
		return p._round(value, precision)
	end    
end

function p._round(value, precision)
	local rescale = math.pow(10, precision or 0);
	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

--[[
mod

Implements the modulo operator

Usage:
{{#invoke:Math | mod | x | y }}

--]]

function wrap.mod(args)
	local x = p._cleanNumber(args[1])
	local y = p._cleanNumber(args[2])
	if not x then
		return err('first argument to mod appears non-numeric')
	elseif not y then
		return err('second argument to mod appears non-numeric')
	else
		return p._mod(x, y)
	end    
end

function p._mod(x, y)
	local ret = x % y
	if not (0 <= ret and ret < y) then
		ret = 0
	end
	return ret
end

--[[
gcd

Calculates the greatest common divisor of multiple numbers

Usage:
{{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }}
--]]

function wrap.gcd(args)
	return p._gcd(unpackNumberArgs(args))
end

function p._gcd(...)
	local function findGcd(a, b)
		local r = b
		local oldr = a
		while r ~= 0 do
			local quotient = math.floor(oldr / r)
			oldr, r = r, oldr - quotient * r
		end
		if oldr < 0 then
			oldr = oldr * -1
		end
		return oldr
	end
	local result, count = fold(findGcd, ...)
	return result
end

--[[
precision_format

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

Usage:
{{#invoke: Math | precision_format | number | precision }}
]]

function wrap.precision_format(args)
	local value_string = args[1] or 0
	local precision = args[2] or 0
	return p._precision_format(value_string, precision)
end

function p._precision_format(value_string, precision)
	-- For access to Mediawiki built-in formatter.
	local lang = mw.getContentLanguage();

	local value
	value, value_string = p._cleanNumber(value_string)
	precision = p._cleanNumber(precision)

	-- Check for non-numeric input
	if value == nil or precision == nil then
		return err('invalid input when rounding')
	end

	local current_precision = p._precision(value)
	local order = p._order(value)

	-- Due to round-off effects it is neccesary to limit the returned precision under
	-- some circumstances because the terminal digits will be inaccurately reported.
	if order + precision >= 14 then
		orig_precision = p._precision(value_string)
		if order + orig_precision >= 14 then
			precision = 13 - order;        
		end        
	end

	-- If rounding off, truncate extra digits
	if precision < current_precision then
		value = p._round(value, precision)
		current_precision = p._precision(value)
	end    

	local formatted_num = lang:formatNum(math.abs(value))
	local sign

	-- Use proper unary minus sign rather than ASCII default
	if value < 0 then
		sign = '?'
	else
		sign = ''
	end    

	-- Handle cases requiring scientific notation
	if string.find(formatted_num, 'E', 1, true) ~= nil or math.abs(order) >= 9 then
		value = value * math.pow(10, -order)
		current_precision = current_precision + order
		precision = precision + order
		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
		if current_precision <= 0 then
			if precision > 0 then
				local zero_sep = lang:formatNum(1.1)
				formatted_num = formatted_num .. zero_sep:sub(2,2)

				padding = precision
				if padding > 20 then
					padding = 20
				end

				formatted_num = formatted_num .. string.rep('0', padding)
			end            
		else                   
			padding = precision - current_precision
			if padding > 20 then
				padding = 20
			end
			formatted_num = formatted_num .. string.rep('0', padding)
		end
	end

	-- Add exponential notation, if necessary.
	if order ~= 0 then
		-- Use proper unary minus sign rather than ASCII default
		if order < 0 then
			order = '?' .. lang:formatNum(math.abs(order))
		else
			order = lang:formatNum(order)
		end    

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

	return formatted_num
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.
]]

function p._cleanNumber(number_string)
	if type(number_string) == 'number' then
		-- We were passed a number, so we don't need to do any processing.
		return number_string, tostring(number_string)
	elseif type(number_string) ~= 'string' or not number_string:find('%S') then
		-- We were passed a non-string or a blank string, so exit.
		return nil, nil;
	end

	-- Attempt basic conversion
	local number = tonumber(number_string)

	-- If failed, attempt to evaluate input as an expression
	if number == nil then
		local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
		if success then
			number = tonumber(result)
			number_string = tostring(number)
		else
			number = nil
			number_string = nil
		end
	else
		number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it.
		number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs.
		if number_string:find('^%-?0[xX]') then
			-- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead.
			number_string = tostring(number)
		end
	end

	return number, number_string
end

--[[
Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current
frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments.
]]

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

return setmetatable(p, mt)
什么情况吃通宣理肺丸 三番四次是什么生肖 晴雨表是什么意思 淋巴结清扫是什么意思 秀女是什么意思
菊花是什么意思 109是什么意思 讲义是什么 退而求其次什么意思 见性成佛是什么意思
la是什么牌子 最高的学历是什么 什么症状吃肝胃气痛片 朱砂有什么功效 思量是什么意思
虾吃什么 木梳子梳头有什么好处 草金鱼吃什么 忌行丧是什么意思 什么叫肛瘘
什么情况打破伤风hcv9jop1ns4r.cn 痔疮有什么症状表现beikeqingting.com 考试前吃巧克力有什么好处hcv8jop7ns5r.cn 什么能力hcv8jop9ns5r.cn 总蛋白偏高有什么危害hcv7jop5ns5r.cn
开门杀是什么意思hcv7jop7ns3r.cn 阳历6月28日是什么星座hcv7jop4ns5r.cn 什么原因导致月经量少hcv9jop5ns1r.cn 手脱皮是缺什么hcv7jop7ns3r.cn 血糖高能吃什么菜hcv8jop9ns2r.cn
向日葵代表什么意思hcv9jop5ns2r.cn 为什么睡觉会突然抖一下hcv8jop6ns7r.cn 114是什么意思hcv8jop4ns8r.cn 粿条是什么做的hcv9jop2ns4r.cn 棕色是什么颜色hcv8jop6ns2r.cn
莫吉托是什么hcv9jop5ns4r.cn 佛龛是什么mmeoe.com 属狗是什么星座96micro.com 妥投是什么意思kuyehao.com 武汉有什么好玩的地方hcv8jop6ns7r.cn
百度