以前平台多数基本函数(比如sin)都不支持数组的输入,升级之后的函数不仅支持了数组,还加入了对于异常值的处理。func(In1,In2...InN[,Out1,...OutN]),In参数除支持数组外,还增加了两个可选参数func(In1,In2...InN[,Out1,...OutN][,Opt1,Opt2])
Opt1:异常值处理,为0表示不做处理(默认情况);为1表示计算跳过nil值;为2表示跳过所有的异常值;
Opt2: 报错填充值,当某单元报错的时候,使用该参数填充。
单参数输入,以SIN函数为例,多个参数输入,以LogN为例:
正常的二维数组的处理
a := rand(10,array("a","b","c"));
return sin(a);
当出现nil值的时候,计算跳过:
a := rand(10,10);
a[0,1] := nil;
return sin(a,1); //得到的结果nil位置的值还是nil
当出现nil值,字符串的时候,计算跳过:
a := rand(10,10);
a[0,1] := nil;
a[0,2] := "a";
return sin(a,2); //得到的结果nil位置的值还是nil,”a”位置还是”a”
当出现nil值,字符串的时候,结果填入替换值:
a := rand(10,10);
a[0,1] := nil;
a[0,2] := "a";
return sin(a,0,"替换值");
只当出现nil值的时候跳过,出现字符串的时候替换为设置值:
a := rand(10,10);
a[0,1] := nil;
a[0,2] := "a";
return sin(a,1,"替换值");
多个参数(不包括输出变参)输入,以LogN为例:
LogN(Base,X:Real Or Array of Real;[varOpt1: Integer;[Opt2:Any]]:Real Or Array of Real;
这类函数需要注意X,Y在维度不一致的时候,比如X是一个二维数组,Y是一个一维数组:
X := 2*ones(10,10);
Base := 2->11;
return LogN(Base,X);
这里最直观的的理解是把二维数组看成一维数据(其每一个元素是一维数组),所以,这个问题也就简化为两个等大小的一维数组在做计算了。超过两个以上主要参数的操作是类似的
支持这项操作的函数包括:
单参数输入:
常用数学函数:Odd,Abs,Sqr,Sqrt
三角函数:Sin,Cos,Tan,Cot,CoTan,Sec,Csc,Secant,Cosecant,ArcSin,ArcCos,ArcTan,ArcCot,ArcSec,ArcCsc,SinCos
角度转换函数,双曲线函数
指数对数函数:Ln,LnXP1,Log10,Log2,Exp
精度设置及取整函数:Int,Ceil,Ceil32,Ceil64,Floor,Floor32,Floor64,Trunc,Trunc32,Trunc64,Frac,Round,Round32,Round64,SimpleRound,SimpleRound32,SimpleRound64
比较判断函数:IsNan,IsInfinite,Sign
多个参数输入:
DivMod,Frexp,Ldexp,Poly,ArcTan2,Hypot,LogN,IntPower,Power,RoundTo,SimpleRoundTo,IsZero,Min,Max,CompareValue,SameValue,RandomRange,InRange,EnsureRange,RandG,财务函数等