本网站由以下捐款支持:OEIS基金会.

模块:数学

来自OeisWiki
跳转到:航行,搜索
请参见https://en.wikipedia.org/wiki/模块:数学

本模块(请参阅模块:数学/文档用于文档第页,共页模块:数学)提供(如果和何时扩展名:Scribunto对于安装的MediaWiki,即)许多数学函数。这些功能可以从#调用或来自其他路易斯安那州模块。

注释:这个<source></源>标记扩展需要扩展名:SyntaxHighlighter当前未安装在OEIS Wiki服务器上。

从其他Lua模块使用

要使用普通wiki页面中的模块,无需进行特殊准备。如果您正在使用另一个Lua模块中的模块,首先需要加载它,如下所示:

<source lang=“lua”>local mm=要求(“模块:数学”)</source>

毫米变量代表M(M)模块M(M)路径;如果您愿意,可以选择更具描述性的内容。)

模块中的大多数函数都有一个Lua版本和一个#调用。可以使用#调用来自其他Lua模块的函数,但使用Lua函数的优点是不需要访问Lua框架对象.Lua函数前面有_,而#调用函数不是。

随机的,随机的

另请参见: 模块:随机
{{调用:数学随机}}{{调用:数学|随机|最大值(_V)}}{{调用:数学|随机|最小值|最大值(_V)}}

<source lang=“lua”>毫米_随机()mm.随机(最大值)mm.随机(最小值,最大值)</source>

生成随机数。

  • 如果未指定参数,则生成的数字大于或等于0,小于1。
  • 如果提供了一个参数,则生成的数字是介于1和该参数之间的整数。参数必须是正整数。
  • 如果提供了两个参数,则生成的数字是第一个参数和第二个参数之间的整数。两个参数都必须是整数,但可以是负数。

对于小于−2的数字,此功能将无法正常工作32且大于232− 1. 如果需要使用超出此范围的数字,建议您使用模块:随机.

秩序

{{#调用:数学|顺序|n个}}

<source lang=“lua”>mm顺序(n)</source>

确定数量级一个数字。

精度

{{调用:数学|精度|n个}}{{#invoke:math|precision|x}=n个}}

<source lang=“lua”>毫米精度(字符串编号)</source>

确定数字的精度。例如,对于“4”,它将返回“0”,对于“4.567”,它会返回“3”,而对于“100”,它则返回“-2”。

该函数尝试解析数字的字符串表示形式,并检测数字是否使用E表示法因此,当从Lua调用时,应直接将非常大的数字或非常精确的数字作为字符串输入,以获得准确的结果。如果它们作为数字输入,Lua解释器会将它们更改为E表示法,此函数将返回E表示法的精度,而不是原始数字的精度。当从#invoke调用数字时,这不是问题,因为#invoket的所有输入都是字符串格式的。

最大值

{{#调用:数学|最大|第1版|第2版|第3版|...}}

<source lang=“lua”>最大毫米(v1、v2、v3…)</source>

返回指定值中的最大值。无法转换为数字的值将被忽略。

最小值

{{#调用:数学|分钟|第1版|第2版|第3版|...}}

<source lang=“lua”>毫米_分钟(v1,v2,v3,…)</source>

返回指定值中的最小值。无法转换为数字的值将被忽略。

平均的

{{调用:数学|平均|第1版|第2版|第3版|...}}

<source lang=“lua”>mm._平均值(v1、v2、v3…)</source>

返回指定值的平均值。(更准确地说,返回的值是算术平均值.)忽略无法转换为数字的值。

{{#invoke:math|round|价值|精度}}{{#invoke:math|round|value=价值|精确度=精度}}

<source lang=“lua”>mm._round(值,精度)</source>

轮次指定精度的数字。

国防部

{{调用:数学|模块|x个|}}

<source lang=“lua”>毫米_模数(x,y)</source>

得到x个 ,或后面的余数x个被除以。这对于2^53以下的整数是准确的;对于较大的整数,Lua的模运算符可能会返回错误的值。此函数通过返回0如果Lua的模运算符给出的模小于0或大于.

gcd公司

{{调用:数学| gcd|第1版|第2版|...}}

<source lang=“lua”>mm._gcd(v1、v2…)</source>

查找最大公约数指定值的。无法转换为数字的值将被忽略。

精度_格式

{{#调用:数学|精度格式|value_string值字符串|精度}}

<source lang=“lua”>毫米_精度_格式(值_字符串,精度)</source>

根据最初用于的规则将数字舍入到指定的精度和格式{{雷诺}}。输出是一个字符串。

清洁编号

<source lang=“lua”>本地编号,number_string=mm._cleanNumber(number_string)</source>

可以从其他Lua模块调用的助手函数,但不能从#调用。这将以字符串或数值作为输入,如果该值可以转换为数字,清洁编号返回数字和数字字符串。如果值无法转换为数字,清洁编号收益零,零.
--[[这个Lua模块提供了一些基本的数学运算。]]local yesno,getArgs——延迟初始化local p={}——保存从#invoke返回的函数,以及用于其他Lua模块的函数。local-wrap={}——保存处理#invoke参数的包装器函数。这些函数在表示#invoke的函数和表示Lua的函数之间起中介作用。--[[用于避免冗余代码的帮助器函数。]]本地函数err(msg)--生成wikitext错误消息。return mw.ustring.format('<strong class=“error”>格式错误:%s,msg)结束局部函数unpackNumberArgs(args)--返回用数字键指定的未打包参数列表。局部ret={}对于k,v成对(args)do如果类型(k)==“数字”,则表格插入(ret,v)结束结束返回拆包(ret)结束本地函数makeArgArray(…)--从可能包含nil的参数列表中生成参数数组。local args={…}--参数表。它可能包含nils或非数值,因此我们不能使用ipairs。local nums={}——存储有效数字参数的数量。局部ret={}对于k,v成对(args)dov=p._clean编号(v)如果v那么nums[#nums+1]=k参数[k]=v结束结束table.sort(数字)对于i,ipairs中的num(nums)doret[#ret+1]=参数[num]结束返回ret结束局部函数折叠(func,…)--对所有提供的参数使用函数,并返回结果。函数必须接受两个数字作为参数,--并且必须返回一个数字作为输出。然后将此数字作为输入提供给下一个函数调用。local vals=makeArgArray(…)local count=#vals--有效参数的数量如果计数==0,则返回--如果没有有效的参数,请退出,否则删除第一个参数将导致错误。零,0结束local ret=表格删除(vals,1)对于_,在ipairs(vals)do中为valret=功能(ret,val)结束返回ret,计数结束--[[通过有选择地选择值来折叠参数(func应返回选择当前“主导”值的时间)。]]局部函数binary_fold(func,…)局部值=fold((函数(a,b)如果函数(a、b),则返回a,否则返回b end),…)返回值结束--[[随机的,随机的生成随机数用法:{{#invoke:Math|random}}{{#调用:数学|随机|最大值}}{{#invoke:Math|random|最小值|最大值}}]]函数wrap.random(args)local first=p._cleanNumber(args[1])本地秒=p._cleanNumber(args[2])返回p._random(第一个,第二个)结束函数p._random(第一、第二)math.randomseed(mw.site.stats.edits+mw.site.stats.pages+os.time()+math.floor(os.clock()*1000000000))--如果给定显式nil参数,math.random将抛出错误,因此我们需要使用if语句检查参数。如果是第一和第二,那么如果第一个<=第二个,那么--math.random不允许第一个数字大于第二个数字。返回math.random(第一,第二)结束那么先是埃尔塞夫return math.random(第一个)其他的return math.random()结束结束--[[秩序确定数字的数量级用法:{{#调用:数学|顺序|值}}]]函数包装顺序(args)本地输入字符串=(args[1]或args.x或“0”);本地input_number=p._cleanNumber(input_string);如果input_number==nil,则return err('输入的数量级显示为非数字')其他的返回订单(input_number)结束函数p._order(x)如果x==0,则返回0结束return math.floor(math.log10(math.abs(x))结束--[[精度使用字符串表示确定数字的精度用法:{{#invoke:Math|precision|value}}]]函数包装精度(args)本地输入字符串=(args[1]或args.x或“0”);本地trap_fraction=args.check_fraction;本地输入编号;如果不是,那么yesno=需要(“模块:yesno”)结束如果yesno(trap_fraction,true),那么--对除nil、false、“no”、“n”、“0”和其他一些输入之外的所有输入返回true。请参阅[[模块:Yesno]]。local pos=string.find(input_string,'/',1,true);如果pos~=nil,则如果string.find(inputstring,'/',pos+1,true)==nil,则局部分母=string.sub(input_string,pos+1,-1);局部分母值=t编号(分母);如果denom_value~=nil,则返回math.log10(denom_value);结束结束结束结束input_number,input_string=p._cleanNumber(输入字符串);如果input_string==nil,则return err('精度输入显示为非数字')其他的返回p._precision(input_string)结束结束函数p.精度(x)如果类型(x)==“数字”,则x=管柱(x)结束x=字符串上部(x)local decimal=x:查找(“%.”)局部exponent_pos=x:查找('E')局部结果=0;如果exponentpos~=nil,则局部指数=string.sub(x,exponent_pos+1)x=字符串.sub(x,1,exponent_pos-1)result=结果-吨数(指数)结束如果十进制~=零,则结果=结果+字符串.len(x)-十进制返回结果结束local pos=字符串.len(x);而x:byte(pos)==string.byte('0')do位置=位置-1result=结果-1如果位置<=0,则返回0结束结束返回结果结束--[[最大值查找最大参数用法:{{#invoke:Math|max|value1|value2|…}}请注意,任何未计算为数字的值都将被忽略。]]函数wrap.max(args)返回p._max(unpackNumberArgs(args))结束函数p._max(…)局部max_value=二进制_fold((函数(a,b)返回a>b end),…)如果max_value,则返回最大值结束结束--[[最小值查找最小参数用法:{{#invoke:Math|min|value1|value2|…}}{{#调用:数学|min}}当不带参数使用时,它从父级获取输入框架。请注意,任何未计算为数字的值都将被忽略。]]函数wrap.min(args)返回p._min(unpackNumberArgs(args))结束函数p._min(…)local min_value=binary_fold((函数(a,b)返回a<b end),…)如果min_value,则返回min_value结束结束--[[平均值查找平均值用法:{{#invoke:Math|average|value1|value2|…}}{{#invoke:Math|average}}请注意,任何未计算为数字的值都将被忽略。]]函数包装平均值(args)返回p._average(unpackNumberArgs(args))结束函数p._average(…)局部和,计数=折叠((函数(a,b)返回a+b结束),…)如果不是总和,那么返回0其他的返回总和/计数结束结束--[[将数字舍入到指定的精度用法:{{#invoke:Math|round|value|precision}}--]]函数wrap.round(args)局部值=p._cleanNumber(args[1]或args.value或0)本地精度=p._cleanNumber(args[2]或args.precision或0)如果值==零或精度==零,则return err('圆形输入显示为非数字')其他的返回p._round(值,精度)结束结束函数p._round(值,精度)局部重缩放=math.pow(10,精度或0);返回数学底线(值*重新缩放+0.5)/重新缩放;结束--[[国防部实现模运算符用法:{{#调用:数学|mod|x|y}}--]]函数wrap.mod(args)本地x=p._cleanNumber(args[1])本地y=p._cleanNumber(args[2])如果不是x,那么return err('mod的第一个参数显示为非数字')否则就不是了return err('mod的第二个参数显示为非数字')其他的返回p._mod(x,y)结束结束函数p._mod(x,y)局部ret=x%y如果不是(0<=ret和ret<y),则ret=0结束返回ret结束--[[gcd公司计算多个数字的最大公约数用法:{{#invoke:Math|gcd|value1|value2|value3|…}}--]]函数wrap.gcd(args)return p._gcd(取消packNumberArgs(args))结束函数p._gcd(…)局部函数findGcd(a,b)局部r=b局部oldr=a而r~=0 do局部商=math.floor(oldr/r)oldr,r=r,oldr-商*r结束如果oldr<0,则oldr=oldr*-1结束返回旧的结束局部结果,count=fold(findGcd,…)返回结果结束--[[精度_格式根据规则将数字舍入到指定的精度和格式最初用于{{template:Rnd}}。输出是一个字符串。用法:{{#invoke:Math|precision_format|number|precision}}]]函数wrap.precision_format(args)本地值字符串=参数[1]或0本地精度=args[2]或0返回p._precision_format(值字符串,精度)结束函数p.精度格式(值字符串,精度)--访问Mediawiki内置格式化程序。local lang=mw.getContentLanguage();局部值value,value_string=p._cleanNumber(value_string)精度=p._cleanNumber(精度)--检查非数字输入如果值==零或精度==零,则return err(“舍入时输入无效”)结束本地current_precision=p._precison(值)本地订单=订单(值)--由于四舍五入的影响,有必要将返回的精度限制在--在某些情况下,由于终端数字的报告不准确。如果订单+精度>=14,则原始_精度=p._精度(value_string)如果订单+orig_precision>=14,则精度=13阶;结束结束--如果舍入,则截断多余的数字如果精度<当前精度,则value=p._round(值,精度)current_precision=p._precision(值)结束local formatted_num=lang:formatNum(math.abs(value))本地标志--使用正确的一元减号而不是ASCII默认值如果值<0,则符号=“−”其他的符号=“”结束--处理需要科学记数法的案件如果string.find(formatted_num,'E',1,true)~=nil或math.abs(order)>=9,则value=value*math.pow(10,-order)current_precision=当前精度+订单精度=精度+顺序formatted_num=lang:formatNum(math.abs(value))其他的顺序=0;结束formatted_num=符号。。格式化_编号--如果需要,用零填充如果current_precision<精度,则局部填充如果current_precision<=0,则如果精度>0,则local zero_sep=lang:formatNum(1.1)formatted_num=格式化_编号。。零步长:sub(2,2)padding=精度如果填充>20,则填充=20结束formatted_num=格式化_编号。。string.rep(“0”,填充)其他padding=精度-当前精度如果填充>20,则填充=20结束formatted_num=格式化_num。。string.rep(“0”,填充)结束结束--如有必要,添加指数表示法。如果顺序~=0,则--使用正确的一元减号而不是ASCII默认值如果订单<0,则order=“−”。。lang:formatNum(math.abs(order))其他的order=lang:formatNum(订单)结束formatted_num=格式化_编号..'<span style=“margin:0.15em 0.25em”>×</span>10<sup>'。。订单…'</sup>'结束返回formatted_num结束--[[以数字方式解释输入的辅助函数。如果输入似乎不是数字,尝试将其求值为解析器函数表达式。]]函数p._cleanNumber(number_string)如果type(number_string)==“number”,则--我们收到了一个数字,所以我们不需要做任何处理。返回number_string,返回字符串(number_string)elseif类型(number_string)~=“string”或不是number_string:查找(“%S”),然后--我们收到了非字符串或空白字符串,所以退出。返回nil,nil;结束--尝试基本转换本地编号=tonumber(number_string)--如果失败,请尝试将输入作为表达式求值如果数字==零,则本地成功,结果=pcall(mw.ext.ParserFunctions.expr,number_string)如果成功,那么number=t编号(结果)number_string=字符串(数字)其他的数字=零number_string=无结束其他的number_string=number_string:match(“^%s*(.-)%s*$”)--字符串有效,但可能包含填充,请清除它。number_string=number_string:match(“^%+(.*)$”)或number_string--去掉所有前导的+号。如果number_string:查找(“^%-?0[xX]”),则--数字使用0xnnn表示法表示基数16;使用Lua检测到的数字。number_string=字符串(数字)结束结束返回编号,number_string结束--[[执行基本参数处理的包装器函数。这确保#invoke中的所有函数都可以使用当前框架或父框架,它还为所有参数修剪空白并删除空白参数。]]局部mt={__index=函数(t,k)返回函数(帧)如果没有getArgs,那么getArgs=require(“模块:参数”).getArgs结束return-wrap[k](getArgs(frame))——参数处理留给Module:Arguments。删除空白,删除空白参数。结束结束}返回setmetatable(p,mt)