DocumentServer/OfficeWeb/sdk/Excel/model/FormulaObjects/statisticalFunctions.js
nikolay ivanov a8be6b9e72 init repo
2014-07-05 18:22:49 +00:00

4000 lines
154 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2014
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
cFormulaFunction.Statistical = {
"groupName": "Statistical",
"AVEDEV": function () {
var r = new cBaseFunction("AVEDEV");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0,
sum = new cNumber(0),
arrX = [];
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue();
if (_argV instanceof cNumber) {
arrX.push(_argV);
count++;
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j];
if (__arg instanceof cNumber) {
arrX.push(__arg);
count++;
}
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
var e = elem.tocNumber();
if (e instanceof cNumber) {
arrX.push(e);
count++;
}
});
} else {
if (_arg instanceof cError) {
continue;
}
arrX.push(_arg);
count++;
}
}
}
}
for (var i = 0; i < arrX.length; i++) {
sum = _func[sum.type][arrX[i].type](sum, arrX[i], "+");
}
sum = new cNumber(sum.getValue() / count);
var a = 0;
for (var i = 0; i < arrX.length; i++) {
a += Math.abs(_func[sum.type][arrX[i].type](sum, arrX[i], "-").getValue());
}
return this.value = new cNumber(a / count);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"AVERAGE": function () {
var r = new cBaseFunction("AVERAGE");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0,
sum = new cNumber(0);
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue();
if (_argV instanceof cString || _argV instanceof cEmpty || _argV instanceof cBool) {
continue;
} else {
if (_argV instanceof cNumber) {
sum = _func[sum.type][_argV.type](sum, _argV, "+");
count++;
} else {
if (_argV instanceof cError) {
return this.value = _argV;
}
}
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j];
if (__arg instanceof cString || __arg instanceof cEmpty || __arg instanceof cBool) {
continue;
} else {
if (__arg instanceof cNumber) {
sum = _func[sum.type][__arg.type](sum, __arg, "+");
count++;
} else {
if (__arg instanceof cError) {
return this.value = __arg;
}
}
}
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
if (elem instanceof cString || elem instanceof cEmpty || elem instanceof cBool) {
return false;
}
var e = elem.tocNumber();
if (e instanceof cNumber) {
sum = _func[sum.type][e.type](sum, e, "+");
count++;
}
});
} else {
_arg = _arg.tocNumber();
if (_arg instanceof cError) {
return this.value = _arg;
}
sum = _func[sum.type][_arg.type](sum, _arg, "+");
count++;
}
}
}
}
return this.value = new cNumber(sum.getValue() / count);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"AVERAGEA": function () {
var r = new cBaseFunction("AVERAGEA");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0,
sum = new cNumber(0);
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue();
if (_argV instanceof cNumber || _argV instanceof cBool) {
sum = _func[sum.type][_argV.type](sum, _argV, "+");
count++;
} else {
if (_argV instanceof cString) {
if (parseNum(_argV.getValue())) {
sum = _func[sum.type][_argV.type](sum, _argV.tocNumber(), "+");
}
count++;
}
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j];
if (__arg instanceof cNumber || __arg instanceof cBool) {
sum = _func[sum.type][__arg.type](sum, __arg, "+");
count++;
} else {
if (__arg instanceof cString) {
if (parseNum(__arg.getValue())) {
sum = _func[sum.type][__arg.type](sum, __arg.tocNumber(), "+");
}
count++;
}
}
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
if (elem instanceof cString || elem instanceof cEmpty) {
return false;
}
var e = elem.tocNumber();
if (e instanceof cNumber) {
sum = _func[sum.type][e.type](sum, e, "+");
count++;
}
});
} else {
_arg = _arg.tocNumber();
if (_arg instanceof cError) {
return this.value = _arg;
}
sum = _func[sum.type][_arg.type](sum, _arg, "+");
count++;
}
}
}
}
return this.value = new cNumber(sum.getValue() / count);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"AVERAGEIF": function () {
var r = new cBaseFunction("AVERAGEIF");
r.setArgumentsMin(2);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2] ? arg[2] : arg[0],
_sum = 0,
_count = 0,
valueForSearching;
if (! (arg0 instanceof cRef || arg0 instanceof cRef3D || arg0 instanceof cArea)) {
return this.value = new cError(cErrorType.wrong_value_type);
}
if (! (arg2 instanceof cRef || arg2 instanceof cRef3D || arg2 instanceof cArea)) {
return this.value = new cError(cErrorType.wrong_value_type);
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElementRowCol(0, 0);
}
}
arg1 = arg1.tocString();
if (! (arg1 instanceof cString)) {
return this.value = new cError(cErrorType.wrong_value_type);
}
function matching(x, y, oper) {
var res = false,
rS;
if (y instanceof cString) {
rS = searchRegExp(y.toString());
switch (oper) {
case "<>":
res = !rS.test(x.value);
break;
case "=":
default:
res = rS.test(x.value);
break;
}
} else {
if (typeof x === typeof y) {
switch (oper) {
case "<>":
res = (x.value != y.value);
break;
case ">":
res = (x.value > y.value);
break;
case "<":
res = (x.value < y.value);
break;
case ">=":
res = (x.value >= y.value);
break;
case "<=":
res = (x.value <= y.value);
break;
case "=":
default:
res = (x.value == y.value);
break;
}
}
}
return res;
}
arg1 = arg1.toString();
var operators = new RegExp("^ *[<=> ]+ *"),
match = arg1.match(operators),
search,
oper,
val;
if (match) {
search = arg1.substr(match[0].length);
oper = match[0].replace(/\s/g, "");
} else {
search = arg1;
}
valueForSearching = parseNum(search) ? new cNumber(search) : new cString(search);
if (arg0 instanceof cArea) {
var r = arg0.getRange().first.getRow0(),
ws = arg0.getWS(),
c1 = arg2.getRange().first.getCol0(),
i = 0;
arg0.foreach2(function (c) {
if (matching(c, valueForSearching, oper)) {
var r1 = r + i,
r2 = new cRef(ws.getRange3(r1, c1, r1, c1).getName(), ws);
if (r2.getValue() instanceof cNumber) {
_sum += r2.getValue().getValue();
_count++;
}
}
i++;
});
} else {
val = arg0.getValue();
if (matching(val, valueForSearching, oper)) {
var r = arg0.getRange(),
ws = arg0.getWS(),
r1 = r.first.getRow0() + 0,
c1 = arg2.getRange().first.getCol0();
r = new cRef(ws.getRange3(r1, c1, r1, c1).getName(), ws);
if (r.getValue() instanceof cNumber) {
_sum += r.getValue().getValue();
_count++;
}
}
}
if (_count == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return this.value = new cNumber(_sum / _count);
}
};
r.getInfo = function () {
return {
name: this.name,
args: "( cell-range, selection-criteria [ , average-range ] )"
};
};
return r;
},
"AVERAGEIFS": function () {
var r = new cBaseFunction("AVERAGEIFS");
return r;
},
"BETADIST": function () {
var r = new cBaseFunction("BETADIST");
return r;
},
"BETAINV": function () {
var r = new cBaseFunction("BETAINV");
return r;
},
"BINOMDIST": function () {
var r = new cBaseFunction("BINOMDIST");
r.setArgumentsMin(4);
r.setArgumentsMax(4);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arg3 = arg[3];
function binomdist(x, n, p) {
x = parseInt(x);
n = parseInt(n);
return Math.binomCoeff(n, x) * Math.pow(p, x) * Math.pow(1 - p, n - x);
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
if (arg3 instanceof cArea || arg3 instanceof cArea3D) {
arg3 = arg3.cross(arguments[1].first);
} else {
if (arg3 instanceof cArray) {
arg3 = arg3.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
arg3 = arg3.tocBool();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
if (arg3 instanceof cError) {
return this.value = arg3;
}
if (arg0.getValue() < 0 || arg0.getValue() > arg1.getValue() || arg2.getValue() < 0 || arg2.getValue() > 1) {
return this.value = new cError(cErrorType.not_numeric);
}
if (arg3.toBool()) {
var x = parseInt(arg0.getValue()),
n = parseInt(arg1.getValue()),
p = arg2.getValue(),
bm = 0;
for (var y = 0; y <= x; y++) {
bm += binomdist(y, n, p);
}
return this.value = new cNumber(bm);
} else {
return this.value = new cNumber(binomdist(arg0.getValue(), arg1.getValue(), arg2.getValue()));
}
};
r.getInfo = function () {
return {
name: this.name,
args: "( number-successes , number-trials , success-probability , cumulative-flag )"
};
};
return r;
},
"CHIDIST": function () {
var r = new cBaseFunction("CHIDIST");
return r;
},
"CHIINV": function () {
var r = new cBaseFunction("CHIINV");
return r;
},
"CHITEST": function () {
var r = new cBaseFunction("CHITEST");
return r;
},
"CONFIDENCE": function () {
var r = new cBaseFunction("CONFIDENCE");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var alpha = arg[0],
stdev_sigma = arg[1],
size = arg[2];
if (alpha instanceof cArea || alpha instanceof cArea3D) {
alpha = alpha.cross(arguments[1].first);
} else {
if (alpha instanceof cArray) {
alpha = alpha.getElement(0);
}
}
if (stdev_sigma instanceof cArea || stdev_sigma instanceof cArea3D) {
stdev_sigma = stdev_sigma.cross(arguments[1].first);
} else {
if (stdev_sigma instanceof cArray) {
stdev_sigma = stdev_sigma.getElement(0);
}
}
if (size instanceof cArea || size instanceof cArea3D) {
size = size.cross(arguments[1].first);
} else {
if (size instanceof cArray) {
size = size.getElement(0);
}
}
alpha = alpha.tocNumber();
stdev_sigma = stdev_sigma.tocNumber();
size = size.tocNumber();
if (alpha instanceof cError) {
return this.value = alpha;
}
if (stdev_sigma instanceof cError) {
return this.value = stdev_sigma;
}
if (size instanceof cError) {
return this.value = size;
}
if (alpha.getValue() <= 0 || alpha.getValue() >= 1 || stdev_sigma.getValue <= 0 || size.getValue() < 1) {
return this.value = new cError(cErrorType.not_numeric);
}
return this.value = new cNumber(gaussinv(1 - alpha.getValue() / 2) * stdev_sigma.getValue() / Math.sqrt(size.getValue()));
};
r.getInfo = function () {
return {
name: this.name,
args: "( alpha , standard-dev , size )"
};
};
return r;
},
"CORREL": function () {
var r = new cBaseFunction("CORREL");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function correl(x, y) {
var s1 = 0,
s2 = 0,
s3 = 0,
_x = 0,
_y = 0,
xLength = 0;
if (x.length != y.length) {
return new cError(cErrorType.not_available);
}
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
s1 += (x[i].getValue() - _x) * (y[i].getValue() - _y);
s2 += (x[i].getValue() - _x) * (x[i].getValue() - _x);
s3 += (y[i].getValue() - _y) * (y[i].getValue() - _y);
}
if (s2 == 0 || s3 == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return new cNumber(s1 / Math.sqrt(s2 * s3));
}
}
var arg0 = arg[0],
arg1 = arg[1],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea) {
arr0 = arg0.getValue();
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea) {
arr1 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = correl(arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array-1 , array-2 )"
};
};
return r;
},
"COUNT": function () {
var r = new cBaseFunction("COUNT");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0;
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue();
if (_argV instanceof cNumber) {
count++;
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
if (_argAreaValue[j] instanceof cNumber) {
count++;
}
}
} else {
if (_arg instanceof cNumber || _arg instanceof cBool || _arg instanceof cEmpty) {
count++;
} else {
if (_arg instanceof cString) {
if (_arg.tocNumber() instanceof cNumber) {
count++;
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
var e = elem.tocNumber();
if (e instanceof cNumber) {
count++;
}
});
}
}
}
}
}
}
return this.value = new cNumber(count);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"COUNTA": function () {
var r = new cBaseFunction("COUNTA");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0;
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue();
if (! (_argV instanceof cEmpty)) {
count++;
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
if (! (_argAreaValue[j] instanceof cEmpty)) {
count++;
}
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
if (! (elem instanceof cEmpty)) {
count++;
}
});
} else {
if (! (_arg instanceof cEmpty)) {
count++;
}
}
}
}
}
return this.value = new cNumber(count);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"COUNTBLANK": function () {
var r = new cBaseFunction("COUNTBLANK");
r.setArgumentsMin(1);
r.setArgumentsMax(1);
r.Calculate = function (arg) {
var arg0 = arg[0];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
return this.value = arg0.countCells();
} else {
if (arg0 instanceof cRef || arg0 instanceof cRef3D) {
return this.value = new cNumber(1);
} else {
return this.value = new cError(cErrorType.bad_reference);
}
}
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"COUNTIF": function () {
var r = new cBaseFunction("COUNTIF");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
_count = 0,
valueForSearching;
if (! (arg0 instanceof cRef || arg0 instanceof cRef3D || arg0 instanceof cArea || arg0 instanceof cArea3D)) {
return this.value = new cError(cErrorType.wrong_value_type);
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElementRowCol(0, 0);
}
}
arg1 = arg1.tocString();
if (! (arg1 instanceof cString)) {
return this.value = new cError(cErrorType.wrong_value_type);
}
function matching(x, y, oper) {
var res = false,
rS;
if (y instanceof cString) {
rS = searchRegExp(y.toString());
switch (oper) {
case "<>":
res = !rS.test(x.value);
break;
case "=":
default:
res = rS.test(x.value);
break;
}
} else {
if (typeof x === typeof y) {
switch (oper) {
case "<>":
res = (x.value != y.value);
break;
case ">":
res = (x.value > y.value);
break;
case "<":
res = (x.value < y.value);
break;
case ">=":
res = (x.value >= y.value);
break;
case "<=":
res = (x.value <= y.value);
break;
case "=":
default:
res = (x.value == y.value);
break;
}
}
}
return res;
}
arg1 = arg1.toString();
var operators = new RegExp("^ *[<=> ]+ *"),
search,
oper,
val,
match = arg1.match(operators);
if (match) {
search = arg1.substr(match[0].length);
oper = match[0].replace(/\s/g, "");
} else {
search = arg1;
}
valueForSearching = parseNum(search) ? new cNumber(search) : new cString(search);
if (arg0 instanceof cArea) {
arg0.foreach2(function (_val) {
_count += matching(_val, valueForSearching, oper);
});
} else {
if (arg0 instanceof cArea3D) {
val = arg0.getValue();
for (var i = 0; i < val.length; i++) {
_count += matching(val[i], valueForSearching, oper);
}
} else {
val = arg0.getValue();
_count += matching(val, valueForSearching, oper);
}
}
return this.value = new cNumber(_count);
};
r.getInfo = function () {
return {
name: this.name,
args: "( cell-range, selection-criteria )"
};
};
return r;
},
"COUNTIFS": function () {
var r = new cBaseFunction("COUNTIFS");
return r;
},
"COVAR": function () {
var r = new cBaseFunction("COVAR");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function covar(x, y) {
var s1 = 0,
_x = 0,
_y = 0,
xLength = 0;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
if (xLength == 0) {
return new cError(cErrorType.division_by_zero);
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
s1 += (x[i].getValue() - _x) * (y[i].getValue() - _y);
}
return new cNumber(s1 / xLength);
}
var arg0 = arg[0],
arg1 = arg[1],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea) {
arr0 = arg0.getValue();
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea) {
arr1 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = covar(arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array-1 , array-2 )"
};
};
return r;
},
"CRITBINOM": function () {
var r = new cBaseFunction("CRITBINOM");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var n = arg[0],
p = arg[1],
alpha = arg[2];
function critbinom(n, p, alpha) {
if (n < 0 || alpha <= 0 || alpha >= 1 || p < 0 || p > 1) {
return new cError(cErrorType.not_numeric);
} else {
var q = 1 - p,
factor = Math.pow(q, n);
if (factor == 0) {
factor = Math.pow(p, n);
if (factor == 0) {
return new cError(cErrorType.wrong_value_type);
} else {
var sum = 1 - factor,
max = n,
i = 0;
for (i = 0; i < max && sum >= alpha; i++) {
factor *= (n - i) / (i + 1) * q / p;
sum -= factor;
}
return new cNumber(n - i);
}
} else {
var sum = factor,
max = n,
i = 0;
for (i = 0; i < max && sum < alpha; i++) {
factor *= (n - i) / (i + 1) * p / q;
sum += factor;
}
return new cNumber(i);
}
}
}
if (alpha instanceof cArea || alpha instanceof cArea3D) {
alpha = alpha.cross(arguments[1].first);
} else {
if (alpha instanceof cArray) {
alpha = alpha.getElement(0);
}
}
if (n instanceof cArea || n instanceof cArea3D) {
n = n.cross(arguments[1].first);
} else {
if (n instanceof cArray) {
n = n.getElement(0);
}
}
if (p instanceof cArea || p instanceof cArea3D) {
p = p.cross(arguments[1].first);
} else {
if (p instanceof cArray) {
p = p.getElement(0);
}
}
alpha = alpha.tocNumber();
n = n.tocNumber();
p = p.tocNumber();
if (alpha instanceof cError) {
return this.value = alpha;
}
if (n instanceof cError) {
return this.value = n;
}
if (p instanceof cError) {
return this.value = p;
}
return this.value = critbinom(n, p, alpha);
};
r.getInfo = function () {
return {
name: this.name,
args: "( number-trials , success-probability , alpha )"
};
};
return r;
},
"DEVSQ": function () {
var r = new cBaseFunction("DEVSQ");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function devsq(x) {
var s1 = 0,
_x = 0,
xLength = 0;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
_x += x[i].getValue();
xLength++;
}
}
_x /= xLength;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
s1 += Math.pow(x[i].getValue() - _x, 2);
}
}
return new cNumber(s1);
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString) {
continue;
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = devsq(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"EXPONDIST": function () {
var r = new cBaseFunction("EXPONDIST");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arg3 = arg[3];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocBool();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
if (arg0.getValue() < 0 || arg2.getValue() <= 0) {
return this.value = new cError(cErrorType.not_numeric);
}
if (arg2.toBool()) {
return this.value = new cNumber(1 - Math.exp(-arg1.getValue() * arg0.getValue()));
} else {
return this.value = new cNumber(arg1.getValue() * Math.exp(-arg1.getValue() * arg0.getValue()));
}
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , lambda , cumulative-flag )"
};
};
return r;
},
"FDIST": function () {
var r = new cBaseFunction("FDIST");
return r;
},
"FINV": function () {
var r = new cBaseFunction("FINV");
return r;
},
"FISHER": function () {
var r = new cBaseFunction("FISHER");
r.setArgumentsMin(1);
r.setArgumentsMax(1);
r.Calculate = function (arg) {
var arg0 = arg[0];
function fisher(x) {
return 0.5 * Math.ln((1 + x) / (1 - x));
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
}
arg0 = arg0.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem, r, c) {
if (elem instanceof cNumber) {
var a = fisher(elem.getValue());
this.array[r][c] = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
} else {
var a = fisher(arg0.getValue());
return this.value = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
}
}
return this.value = arg0;
};
r.getInfo = function () {
return {
name: this.name,
args: "( number )"
};
};
return r;
},
"FISHERINV": function () {
var r = new cBaseFunction("FISHERINV");
r.setArgumentsMin(1);
r.setArgumentsMax(1);
r.Calculate = function (arg) {
var arg0 = arg[0];
function fisherInv(x) {
return (Math.exp(2 * x) - 1) / (Math.exp(2 * x) + 1);
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
}
arg0 = arg0.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem, r, c) {
if (elem instanceof cNumber) {
var a = fisherInv(elem.getValue());
this.array[r][c] = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
} else {
var a = fisherInv(arg0.getValue());
return this.value = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
}
}
return this.value = arg0;
};
r.getInfo = function () {
return {
name: this.name,
args: "( number )"
};
};
return r;
},
"FORECAST": function () {
var r = new cBaseFunction("FORECAST");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
function forecast(fx, y, x) {
var fSumDeltaXDeltaY = 0,
fSumSqrDeltaX = 0,
_x = 0,
_y = 0,
xLength = 0;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
var fValX = x[i].getValue();
var fValY = y[i].getValue();
fSumDeltaXDeltaY += (fValX - _x) * (fValY - _y);
fSumSqrDeltaX += (fValX - _x) * (fValX - _x);
}
if (fSumDeltaXDeltaY == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return new cNumber(_y + fSumDeltaXDeltaY / fSumSqrDeltaX * (fx.getValue() - _x));
}
}
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
arg0 = arg0.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cArea) {
arr0 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg2 instanceof cArea) {
arr1 = arg2.getValue();
} else {
if (arg2 instanceof cArray) {
arg2.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = forecast(arg0, arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , array-1 , array-2 )"
};
};
return r;
},
"FREQUENCY": function () {
var r = new cBaseFunction("FREQUENCY");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function frequency(A, B) {
var tA = [],
tB = [Number.NEGATIVE_INFINITY];
for (var i = 0; i < A.length; i++) {
for (var j = 0; j < A[i].length; j++) {
if (A[i][j] instanceof cError) {
return A[i][j];
} else {
if (A[i][j] instanceof cNumber) {
tA.push(A[i][j].getValue());
} else {
if (A[i][j] instanceof cBool) {
tA.push(A[i][j].tocNumber().getValue());
}
}
}
}
}
for (var i = 0; i < B.length; i++) {
for (var j = 0; j < B[i].length; j++) {
if (B[i][j] instanceof cError) {
return B[i][j];
} else {
if (B[i][j] instanceof cNumber) {
tB.push(B[i][j].getValue());
} else {
if (B[i][j] instanceof cBool) {
tB.push(B[i][j].tocNumber().getValue());
}
}
}
}
}
tA.sort(function (a, b) {
return a - b;
});
tB.push(Number.POSITIVE_INFINITY);
tB.sort(function (a, b) {
return a - b;
});
var C = [[]],
k = 0;
for (var i = 1; i < tB.length; i++, k++) {
C[0][k] = new cNumber(0);
for (var j = 0; j < tA.length; j++) {
if (tA[j] > tB[i - 1] && tA[j] <= tB[i]) {
var a = C[0][k].getValue();
C[0][k] = new cNumber(++a);
}
}
}
var res = new cArray();
res.fillFromArray(C);
return res;
}
var arg0 = arg[0],
arg1 = arg[1];
if (arg0 instanceof cArea || arg0 instanceof cArray) {
arg0 = arg0.getMatrix();
} else {
if (arg0 instanceof cArea3D) {
arg0 = arg0.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArray) {
arg1 = arg1.getMatrix();
} else {
if (arg1 instanceof cArea3D) {
arg1 = arg1.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
return this.value = frequency(arg0, arg1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( data-array , bins-array )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"FTEST": function () {
var r = new cBaseFunction("FTEST");
return r;
},
"GAMMADIST": function () {
var r = new cBaseFunction("GAMMADIST");
return r;
},
"GAMMAINV": function () {
var r = new cBaseFunction("GAMMAINV");
return r;
},
"GAMMALN": function () {
var r = new cBaseFunction("GAMMALN");
r.setArgumentsMin(1);
r.setArgumentsMax(1);
r.Calculate = function (arg) {
var arg0 = arg[0];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
}
arg0 = arg0.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem, r, c) {
if (elem instanceof cNumber) {
var a = getLogGamma(elem.getValue());
this.array[r][c] = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
} else {
var a = getLogGamma(arg0.getValue());
return this.value = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
}
}
return this.value = arg0;
};
r.getInfo = function () {
return {
name: this.name,
args: "(number)"
};
};
return r;
},
"GEOMEAN": function () {
var r = new cBaseFunction("GEOMEAN");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function geommean(x) {
var _x = 1,
xLength = 0,
_tx;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
_x *= x[i].getValue();
xLength++;
} else {
if ((x[i] instanceof cString || x[i] instanceof cBool) && (_tx = x[i].tocNumber()) instanceof cNumber) {
_x *= _tx.getValue();
xLength++;
}
}
}
if (_x <= 0) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(Math.pow(_x, 1 / xLength));
}
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString && arg[j].tocNumber() instanceof cNumber) {
arr0.push(arg[j].tocNumber());
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = geommean(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"GROWTH": function () {
var r = new cBaseFunction("GROWTH");
return r;
},
"HARMEAN": function () {
var r = new cBaseFunction("HARMEAN");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function harmmean(x) {
var _x = 0,
xLength = 0,
_tx;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
if (x[i].getValue() == 0) {
return new cError(cErrorType.not_numeric);
}
_x += 1 / x[i].getValue();
xLength++;
} else {
if ((x[i] instanceof cString || x[i] instanceof cBool) && (_tx = x[i].tocNumber()) instanceof cNumber) {
if (_tx.getValue() == 0) {
return new cError(cErrorType.not_numeric);
}
_x += 1 / _tx.getValue();
xLength++;
}
}
}
if (_x <= 0) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(xLength / _x);
}
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString && arg[j].tocNumber() instanceof cNumber) {
arr0.push(arg[j].tocNumber());
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = harmmean(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"HYPGEOMDIST": function () {
var r = new cBaseFunction("HYPGEOMDIST");
r.setArgumentsMin(4);
r.setArgumentsMax(4);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arg3 = arg[3];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
if (arg3 instanceof cArea || arg3 instanceof cArea3D) {
arg3 = arg3.cross(arguments[1].first);
} else {
if (arg3 instanceof cArray) {
arg3 = arg3.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
arg3 = arg3.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
if (arg3 instanceof cError) {
return this.value = arg3;
}
if (arg0.getValue() < 0 || arg0.getValue() > Math.min(arg1.getValue(), arg2.getValue()) || arg0.getValue() < Math.max(0, arg1.getValue() - arg3.getValue() + arg2.getValue()) || arg1.getValue() <= 0 || arg1.getValue() > arg3.getValue() || arg2.getValue() <= 0 || arg2.getValue() > arg3.getValue() || arg3.getValue() <= 0) {
return this.value = new cError(cErrorType.not_numeric);
}
return this.value = new cNumber(Math.binomCoeff(arg2.getValue(), arg0.getValue()) * Math.binomCoeff(arg3.getValue() - arg2.getValue(), arg1.getValue() - arg0.getValue()) / Math.binomCoeff(arg3.getValue(), arg1.getValue()));
};
r.getInfo = function () {
return {
name: this.name,
args: "( sample-successes , number-sample , population-successes , number-population )"
};
};
return r;
},
"INTERCEPT": function () {
var r = new cBaseFunction("INTERCEPT");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function intercept(y, x) {
var fSumDeltaXDeltaY = 0,
fSumSqrDeltaX = 0,
_x = 0,
_y = 0,
xLength = 0;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
var fValX = x[i].getValue();
var fValY = y[i].getValue();
fSumDeltaXDeltaY += (fValX - _x) * (fValY - _y);
fSumSqrDeltaX += (fValX - _x) * (fValX - _x);
}
if (fSumDeltaXDeltaY == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return new cNumber(_y - fSumDeltaXDeltaY / fSumSqrDeltaX * _x);
}
}
var arg0 = arg[0],
arg1 = arg[1],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea) {
arr0 = arg0.getValue();
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea) {
arr1 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = intercept(arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array-1 , array-2 )"
};
};
return r;
},
"KURT": function () {
var r = new cBaseFunction("KURT");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function kurt(x) {
var sumSQRDeltaX = 0,
_x = 0,
xLength = 0,
standDev = 0,
sumSQRDeltaXDivstandDev = 0;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
_x += x[i].getValue();
xLength++;
}
}
_x /= xLength;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
sumSQRDeltaX += Math.pow(x[i].getValue() - _x, 2);
}
}
standDev = Math.sqrt(sumSQRDeltaX / (xLength - 1));
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
sumSQRDeltaXDivstandDev += Math.pow((x[i].getValue() - _x) / standDev, 4);
}
}
return new cNumber(xLength * (xLength + 1) / (xLength - 1) / (xLength - 2) / (xLength - 3) * sumSQRDeltaXDivstandDev - 3 * (xLength - 1) * (xLength - 1) / (xLength - 2) / (xLength - 3));
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString) {
continue;
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = kurt(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"LARGE": function () {
var r = new cBaseFunction("LARGE");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function frequency(A, k) {
var tA = [];
for (var i = 0; i < A.length; i++) {
for (var j = 0; j < A[i].length; j++) {
if (A[i][j] instanceof cError) {
return A[i][j];
} else {
if (A[i][j] instanceof cNumber) {
tA.push(A[i][j].getValue());
} else {
if (A[i][j] instanceof cBool) {
tA.push(A[i][j].tocNumber().getValue());
}
}
}
}
}
tA.sort(function (a, b) {
return - (a - b);
});
if (k.getValue() >= tA.length || k.getValue() <= 0) {
return new cError(cErrorType.not_available);
} else {
return new cNumber(tA[k.getValue() - 1]);
}
}
var arg0 = arg[0],
arg1 = arg[1];
if (arg0 instanceof cArea || arg0 instanceof cArray) {
arg0 = arg0.getMatrix();
} else {
if (arg0 instanceof cArea3D) {
arg0 = arg0.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
arg1 = arg1.tocNumber();
if (arg1 instanceof cError) {
return this.value = arg1;
}
return this.value = frequency(arg0, arg1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array , k )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"LINEST": function () {
var r = new cBaseFunction("LINEST");
return r;
},
"LOGEST": function () {
var r = new cBaseFunction("LOGEST");
return r;
},
"LOGINV": function () {
var r = new cBaseFunction("LOGINV");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2];
function loginv(x, mue, sigma) {
if (sigma <= 0 || x <= 0 || x >= 1) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(Math.exp(mue + sigma * (gaussinv(x))));
}
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
return this.value = loginv(arg0.getValue(), arg1.getValue(), arg2.getValue());
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , mean , standard-deviation )"
};
};
return r;
},
"LOGNORMDIST": function () {
var r = new cBaseFunction("LOGNORMDIST");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2];
function normdist(x, mue, sigma) {
if (sigma <= 0 || x <= 0) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(0.5 + gauss((Math.ln(x) - mue) / sigma));
}
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
return this.value = normdist(arg0.getValue(), arg1.getValue(), arg2.getValue());
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , mean , standard-deviation )"
};
};
return r;
},
"MAX": function () {
var r = new cBaseFunction("MAX");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var argI, argIVal, max = Number.NEGATIVE_INFINITY;
for (var i = 0; i < this.argumentsCurrent; i++) {
argI = arg[i],
argIVal = argI.getValue();
if (argI instanceof cRef || argI instanceof cRef3D) {
if (argIVal instanceof cError) {
return this.value = argIVal;
}
if (argIVal instanceof cNumber || argIVal instanceof cBool || argIVal instanceof cEmpty) {
var v = argIVal.tocNumber();
if (v.getValue() > max) {
max = v.getValue();
}
}
} else {
if (argI instanceof cArea || argI instanceof cArea3D) {
var argArr = argI.getValue();
for (var j = 0; j < argArr.length; j++) {
if (argArr[j] instanceof cNumber || argArr[j] instanceof cBool || argArr[j] instanceof cEmpty) {
var v = argArr[j].tocNumber();
if (v.getValue() > max) {
max = v.getValue();
}
} else {
if (argArr[j] instanceof cError) {
return this.value = argArr[j];
}
}
}
} else {
if (argI instanceof cError) {
return this.value = argI;
} else {
if (argI instanceof cString) {
var v = argI.tocNumber();
if (v instanceof cNumber) {
if (v.getValue() > max) {
max = v.getValue();
}
}
} else {
if (argI instanceof cBool || argI instanceof cEmpty) {
var v = argI.tocNumber();
if (v.getValue() > max) {
max = v.getValue();
}
} else {
if (argI instanceof cArray) {
argI.foreach(function (elem) {
if (elem instanceof cNumber) {
if (elem.getValue() > max) {
max = elem.getValue();
}
} else {
if (elem instanceof cError) {
max = elem;
return true;
}
}
});
if (max instanceof cError) {
return this.value = max;
}
} else {
if (argI.getValue() > max) {
max = argI.getValue();
}
}
}
}
}
}
}
}
return this.value = (max.value === Number.NEGATIVE_INFINITY ? new cNumber(0) : new cNumber(max));
};
r.getInfo = function () {
return {
name: this.name,
args: "(number1, number2, ...)"
};
};
return r;
},
"MAXA": function () {
var r = new cBaseFunction("MAXA");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var argI, max = Number.NEGATIVE_INFINITY;
for (var i = 0; i < this.argumentsCurrent; i++) {
argI = arg[i],
argIVal = argI.getValue();
if (argI instanceof cRef || argI instanceof cRef3D) {
if (argIVal instanceof cError) {
return this.value = argIVal;
}
var v = argIVal.tocNumber();
if (v instanceof cNumber && v.getValue() > max) {
max = v.getValue();
}
} else {
if (argI instanceof cArea || argI instanceof cArea3D) {
var argArr = argI.getValue();
for (var j = 0; j < argArr.length; j++) {
if (argArr[j] instanceof cError) {
return this.value = argArr[j];
}
var v = argArr[j].tocNumber();
if (v instanceof cNumber && v.getValue() > max) {
max = v.getValue();
}
}
} else {
if (argI instanceof cError) {
return this.value = argI;
} else {
if (argI instanceof cString) {
var v = argI.tocNumber();
if (v instanceof cNumber) {
if (v.getValue() > max) {
max = v.getValue();
}
}
} else {
if (argI instanceof cBool || argI instanceof cEmpty) {
var v = argI.tocNumber();
if (v.getValue() > max) {
max = v.getValue();
}
} else {
if (argI instanceof cArray) {
argI.foreach(function (elem) {
if (elem instanceof cError) {
max = elem;
return true;
}
elem = elem.tocNumber();
if (elem instanceof cNumber && elem.getValue() > max) {
max = elem.getValue();
}
});
if (max instanceof cError) {
return this.value = max;
}
} else {
if (argI.getValue() > max) {
max = argI.getValue();
}
}
}
}
}
}
}
}
return this.value = (max.value === Number.NEGATIVE_INFINITY ? new cNumber(0) : new cNumber(max));
};
r.getInfo = function () {
return {
name: this.name,
args: "(number1, number2, ...)"
};
};
return r;
},
"MEDIAN": function () {
var r = new cBaseFunction("MEDIAN");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function median(x) {
var res, medArr = [],
t;
for (var i = 0; i < x.length; i++) {
t = x[i].tocNumber();
if (t instanceof cNumber) {
medArr.push(t.getValue());
}
}
medArr.sort(function (a, b) {
return a - b;
});
if (medArr.length < 1) {
return cError(cErrorType.wrong_value_type);
} else {
if (medArr.length % 2) {
return new cNumber(medArr[(medArr.length - 1) / 2]);
} else {
return new cNumber((medArr[medArr.length / 2 - 1] + medArr[medArr.length / 2]) / 2);
}
}
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString) {
continue;
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = median(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"MIN": function () {
var r = new cBaseFunction("MIN");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var argI, argIVal, min = Number.POSITIVE_INFINITY;
for (var i = 0; i < this.argumentsCurrent; i++) {
argI = arg[i],
argIVal = argI.getValue();
if (argI instanceof cRef || argI instanceof cRef3D) {
if (argIVal instanceof cError) {
return this.value = argIVal;
}
if (argIVal instanceof cNumber || argIVal instanceof cBool || argIVal instanceof cEmpty) {
var v = argIVal.tocNumber();
if (v.getValue() < min) {
min = v.getValue();
}
}
} else {
if (argI instanceof cArea || argI instanceof cArea3D) {
var argArr = argI.getValue();
for (var j = 0; j < argArr.length; j++) {
if (argArr[j] instanceof cNumber || argArr[j] instanceof cBool || argArr[j] instanceof cEmpty) {
var v = argArr[j].tocNumber();
if (v.getValue() < min) {
min = v.getValue();
}
continue;
} else {
if (argArr[j] instanceof cError) {
return this.value = argArr[j];
}
}
}
} else {
if (argI instanceof cError) {
return this.value = argI;
} else {
if (argI instanceof cString) {
var v = argI.tocNumber();
if (v instanceof cNumber) {
if (v.getValue() < min) {
min = v.getValue();
}
}
} else {
if (argI instanceof cBool || argI instanceof cEmpty) {
var v = argI.tocNumber();
if (v.getValue() < min) {
min = v.getValue();
}
} else {
if (argI instanceof cArray) {
argI.foreach(function (elem) {
if (elem instanceof cNumber) {
if (elem.getValue() < min) {
min = elem.getValue();
}
} else {
if (elem instanceof cError) {
min = elem;
return true;
}
}
});
if (min instanceof cError) {
return this.value = min;
}
} else {
if (argI.getValue() < min) {
min = argI.getValue();
}
}
}
}
}
}
}
}
return this.value = (min.value === Number.POSITIVE_INFINITY ? new cNumber(0) : new cNumber(min));
};
r.getInfo = function () {
return {
name: this.name,
args: "(number1, number2, ...)"
};
};
return r;
},
"MINA": function () {
var r = new cBaseFunction("MINA");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var argI, min = Number.POSITIVE_INFINITY;
for (var i = 0; i < this.argumentsCurrent; i++) {
argI = arg[i],
argIVal = argI.getValue();
if (argI instanceof cRef || argI instanceof cRef3D) {
if (argIVal instanceof cError) {
return this.value = argIVal;
}
var v = argIVal.tocNumber();
if (v instanceof cNumber && v.getValue() < min) {
min = v.getValue();
}
} else {
if (argI instanceof cArea || argI instanceof cArea3D) {
var argArr = argI.getValue();
for (var j = 0; j < argArr.length; j++) {
if (argArr[j] instanceof cError) {
return this.value = argArr[j];
}
var v = argArr[j].tocNumber();
if (v instanceof cNumber && v.getValue() < min) {
min = v.getValue();
}
}
} else {
if (argI instanceof cError) {
return this.value = argI;
} else {
if (argI instanceof cString) {
var v = argI.tocNumber();
if (v instanceof cNumber) {
if (v.getValue() < min) {
min = v.getValue();
}
}
} else {
if (argI instanceof cBool || argI instanceof cEmpty) {
var v = argI.tocNumber();
if (v.getValue() < min) {
min = v.getValue();
}
} else {
if (argI instanceof cArray) {
argI.foreach(function (elem) {
if (elem instanceof cError) {
min = elem;
return true;
}
elem = elem.tocNumber();
if (elem instanceof cNumber && elem.getValue() < min) {
min = elem.getValue();
}
});
if (min instanceof cError) {
return this.value = min;
}
} else {
if (argI.getValue() < min) {
min = argI.getValue();
}
}
}
}
}
}
}
}
return this.value = (min.value === Number.POSITIVE_INFINITY ? new cNumber(0) : new cNumber(min));
};
r.getInfo = function () {
return {
name: this.name,
args: "(number1, number2, ...)"
};
};
return r;
},
"MODE": function () {
var r = new cBaseFunction("MODE");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function mode(x) {
var medArr = [],
t;
for (var i = 0; i < x.length; i++) {
t = x[i].tocNumber();
if (t instanceof cNumber) {
medArr.push(t.getValue());
}
}
medArr.sort(function (a, b) {
return b - a;
});
if (medArr.length < 1) {
return cError(cErrorType.wrong_value_type);
} else {
var nMaxIndex = 0,
nMax = 1,
nCount = 1,
nOldVal = medArr[0],
i;
for (i = 1; i < medArr.length; i++) {
if (medArr[i] == nOldVal) {
nCount++;
} else {
nOldVal = medArr[i];
if (nCount > nMax) {
nMax = nCount;
nMaxIndex = i - 1;
}
nCount = 1;
}
}
if (nCount > nMax) {
nMax = nCount;
nMaxIndex = i - 1;
}
if (nMax == 1 && nCount == 1) {
return new cError(cErrorType.wrong_value_type);
} else {
if (nMax == 1) {
return new cNumber(nOldVal);
} else {
return new cNumber(medArr[nMaxIndex]);
}
}
}
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString) {
continue;
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = mode(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"NEGBINOMDIST": function () {
var r = new cBaseFunction("NEGBINOMDIST");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2];
function negbinomdist(x, r, p) {
x = parseInt(x.getValue());
r = parseInt(r.getValue());
p = p.getValue();
if (x < 0 || r < 1 || p < 0 || p > 1) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(Math.binomCoeff(x + r - 1, r - 1) * Math.pow(p, r) * Math.pow(1 - p, x));
}
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
return this.value = negbinomdist(arg0, arg1, arg2);
};
r.getInfo = function () {
return {
name: this.name,
args: "( number-failures , number-successes , success-probability )"
};
};
return r;
},
"NORMDIST": function () {
var r = new cBaseFunction("NORMDIST");
r.setArgumentsMin(4);
r.setArgumentsMax(4);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arg3 = arg[3];
function normdist(x, mue, sigma, kum) {
if (sigma <= 0) {
return new cError(cErrorType.not_numeric);
}
if (kum) {
return new cNumber(integralPhi((x - mue) / sigma));
} else {
return new cNumber(phi((x - mue) / sigma) / sigma);
}
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
if (arg3 instanceof cArea || arg3 instanceof cArea3D) {
arg3 = arg3.cross(arguments[1].first);
} else {
if (arg3 instanceof cArray) {
arg3 = arg3.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
arg3 = arg3.tocBool();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
if (arg3 instanceof cError) {
return this.value = arg3;
}
return this.value = normdist(arg0.getValue(), arg1.getValue(), arg2.getValue(), arg3.toBool());
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , mean , standard-deviation , cumulative-flag )"
};
};
return r;
},
"NORMINV": function () {
var r = new cBaseFunction("NORMINV");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2];
function norminv(x, mue, sigma) {
if (sigma <= 0 || x <= 0 || x >= 1) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(gaussinv(x) * sigma + mue);
}
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
return this.value = norminv(arg0.getValue(), arg1.getValue(), arg2.getValue());
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , mean , standard-deviation )"
};
};
return r;
},
"NORMSDIST": function () {
var r = new cBaseFunction("NORMSDIST");
r.setArgumentsMin(1);
r.setArgumentsMax(1);
r.Calculate = function (arg) {
var arg0 = arg[0];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
}
arg0 = arg0.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem, r, c) {
if (elem instanceof cNumber) {
var a = 0.5 + gauss(elem.getValue());
this.array[r][c] = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
} else {
var a = 0.5 + gauss(arg0.getValue());
return this.value = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
}
}
return this.value = arg0;
};
r.getInfo = function () {
return {
name: this.name,
args: "(number)"
};
};
return r;
},
"NORMSINV": function () {
var r = new cBaseFunction("NORMSINV");
r.setArgumentsMin(1);
r.setArgumentsMax(1);
r.Calculate = function (arg) {
function normsinv(x) {
if (x <= 0 || x >= 1) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber(gaussinv(x));
}
}
var arg0 = arg[0];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
}
arg0 = arg0.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem, r, c) {
if (elem instanceof cNumber) {
var a = normsinv(elem.getValue());
this.array[r][c] = isNaN(a) ? new cError(cErrorType.not_available) : new cNumber(a);
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
} else {
var a = normsinv(arg0.getValue());
return this.value = isNaN(a) ? new cError(cErrorType.not_available) : new cNumber(a);
}
}
return this.value = arg0;
};
r.getInfo = function () {
return {
name: this.name,
args: "( probability )"
};
};
return r;
},
"PEARSON": function () {
var r = new cBaseFunction("PEARSON");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function pearson(x, y) {
var sumXDeltaYDelta = 0,
sqrXDelta = 0,
sqrYDelta = 0,
_x = 0,
_y = 0,
xLength = 0;
if (x.length != y.length) {
return new cError(cErrorType.not_available);
}
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
sumXDeltaYDelta += (x[i].getValue() - _x) * (y[i].getValue() - _y);
sqrXDelta += (x[i].getValue() - _x) * (x[i].getValue() - _x);
sqrYDelta += (y[i].getValue() - _y) * (y[i].getValue() - _y);
}
if (sqrXDelta == 0 || sqrYDelta == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return new cNumber(sumXDeltaYDelta / Math.sqrt(sqrXDelta * sqrYDelta));
}
}
var arg0 = arg[0],
arg1 = arg[1],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea) {
arr0 = arg0.getValue();
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea) {
arr1 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = pearson(arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array-1 , array-2 )"
};
};
return r;
},
"PERCENTILE": function () {
var r = new cBaseFunction("PERCENTILE");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function percentile(A, k) {
var tA = [],
alpha = k.getValue();
for (var i = 0; i < A.length; i++) {
for (var j = 0; j < A[i].length; j++) {
if (A[i][j] instanceof cError) {
return A[i][j];
} else {
if (A[i][j] instanceof cNumber) {
tA.push(A[i][j].getValue());
} else {
if (A[i][j] instanceof cBool) {
tA.push(A[i][j].tocNumber().getValue());
}
}
}
}
}
tA.sort(function (a, b) {
return a - b;
});
var nSize = tA.length;
if (tA.length < 1 || nSize == 0) {
return new cError(cErrorType.not_available);
} else {
if (nSize == 1) {
return new cNumber(tA[0]);
} else {
var nIndex = Math.floor(alpha * (nSize - 1));
var fDiff = alpha * (nSize - 1) - Math.floor(alpha * (nSize - 1));
if (fDiff == 0) {
return new cNumber(tA[nIndex]);
} else {
return new cNumber(tA[nIndex] + fDiff * (tA[nIndex + 1] - tA[nIndex]));
}
}
}
}
var arg0 = arg[0],
arg1 = arg[1];
if (arg0 instanceof cArea || arg0 instanceof cArray) {
arg0 = arg0.getMatrix();
} else {
if (arg0 instanceof cArea3D) {
arg0 = arg0.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
arg1 = arg1.tocNumber();
if (arg1 instanceof cError) {
return this.value = arg1;
}
return this.value = percentile(arg0, arg1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array , k )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"PERCENTRANK": function () {
var r = new cBaseFunction("PERCENTRANK");
r.setArgumentsMin(2);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
function percentrank(A, x, k) {
var tA = [],
t;
k = k.getValue();
for (var i = 0; i < A.length; i++) {
t = A[i].tocNumber();
if (t instanceof cNumber) {
tA.push(t.getValue());
}
}
var fNum = x.getValue();
tA.sort(function (a, b) {
return a - b;
});
var nSize = tA.length;
if (tA.length < 1 || nSize == 0) {
return new cError(cErrorType.not_available);
} else {
if (fNum < tA[0] || fNum > tA[nSize - 1]) {
return new cError(cErrorType.not_available);
} else {
if (nSize == 1) {
return new cNumber(1);
} else {
var fRes, nOldCount = 0,
fOldVal = tA[0],
i;
for (i = 1; i < nSize && tA[i] < fNum; i++) {
if (tA[i] != fOldVal) {
nOldCount = i;
fOldVal = tA[i];
}
}
if (tA[i] != fOldVal) {
nOldCount = i;
}
if (fNum == tA[i]) {
fRes = nOldCount / (nSize - 1);
} else {
if (nOldCount == 0) {
fRes = 0;
} else {
var fFract = (fNum - tA[nOldCount - 1]) / (tA[nOldCount] - tA[nOldCount - 1]);
fRes = (nOldCount - 1 + fFract) / (nSize - 1);
}
}
return new cNumber(fRes.toString().substr(0, fRes.toString().indexOf(".") + 1 + k) - 0);
}
}
}
}
var arr0 = [],
arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2] ? arg[2] : new cNumber(3);
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0.foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
return this.value = new cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
return this.value = percentrank(arr0, arg1, arg2);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array , x [ , significance ] )"
};
};
return r;
},
"PERMUT": function () {
var r = new cBaseFunction("PERMUT");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
}
arg0 = arg0.tocNumber();
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
}
arg1 = arg1.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg0 instanceof cArray && arg1 instanceof cArray) {
if (arg0.getCountElement() != arg1.getCountElement() || arg0.getRowCount() != arg1.getRowCount()) {
return this.value = new cError(cErrorType.not_available);
} else {
arg0.foreach(function (elem, r, c) {
var a = elem,
b = arg1.getElementRowCol(r, c);
if (a instanceof cNumber && b instanceof cNumber) {
this.array[r][c] = new cNumber(Math.permut(a.getValue(), b.getValue()));
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
return this.value = arg0;
}
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem, r, c) {
var a = elem,
b = arg1;
if (a instanceof cNumber && b instanceof cNumber) {
if (a.getValue() <= 0 || b.getValue() <= 0 || a.getValue() < b.getValue()) {
this.array[r][c] = new cError(cErrorType.not_numeric);
}
this.array[r][c] = new cNumber(Math.permut(a.getValue(), b.getValue()));
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
return this.value = arg0;
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem, r, c) {
var a = arg0,
b = elem;
if (a instanceof cNumber && b instanceof cNumber) {
if (a.getValue() <= 0 || b.getValue() <= 0 || a.getValue() < b.getValue()) {
this.array[r][c] = new cError(cErrorType.not_numeric);
}
this.array[r][c] = new cNumber(Math.permut(a.getValue(), b.getValue()));
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
return this.value = arg1;
}
}
}
if (arg0.getValue() <= 0 || arg1.getValue() <= 0 || arg0.getValue() < arg1.getValue()) {
return this.value = new cError(cErrorType.not_numeric);
}
return this.value = new cNumber(Math.permut(arg0.getValue(), arg1.getValue()));
};
r.getInfo = function () {
return {
name: this.name,
args: "( number , number-chosen )"
};
};
return r;
},
"POISSON": function () {
var r = new cBaseFunction("POISSON");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
function poisson(x, l, cumulativeFlag) {
var _x = parseInt(x.getValue()),
_l = l.getValue(),
f = cumulativeFlag.toBool();
if (f) {
var sum = 0;
for (var k = 0; k <= x; k++) {
sum += Math.pow(_l, k) / Math.fact(k);
}
sum *= Math.exp(-_l);
return new cNumber(sum);
} else {
return new cNumber(Math.exp(-_l) * Math.pow(_l, _x) / Math.fact(_x));
}
}
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arg3 = arg[3];
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocBool();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
if (arg0.getValue() < 0 || arg1.getValue() <= 0) {
return this.value = new cError(cErrorType.not_numeric);
}
return this.value = new cNumber(poisson(arg0, arg1, arg2));
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , mean , cumulative-flag )"
};
};
return r;
},
"PROB": function () {
var r = new cBaseFunction("PROB");
r.setArgumentsMin(3);
r.setArgumentsMax(4);
r.Calculate = function (arg) {
function prob(x, p, l, u) {
var fUp, fLo;
fLo = l.getValue();
if (u instanceof cEmpty) {
fUp = fLo;
} else {
fUp = u.getValue();
}
if (fLo > fUp) {
var fTemp = fLo;
fLo = fUp;
fUp = fTemp;
}
var nC1 = x[0].length,
nC2 = p[0].length,
nR1 = x.length,
nR2 = p.length;
if (nC1 != nC2 || nR1 != nR2 || nC1 == 0 || nR1 == 0 || nC2 == 0 || nR2 == 0) {
return new cError(cErrorType.not_available);
} else {
var fSum = 0,
fRes = 0,
bStop = false,
fP, fW;
for (var i = 0; i < nR1 && !bStop; i++) {
for (var j = 0; j < nC1 && !bStop; j++) {
if (x[i][j] instanceof cNumber && p[i][j] instanceof cNumber) {
fP = p[i][j].getValue();
fW = x[i][j].getValue();
if (fP < 0 || fP > 1) {
bStop = true;
} else {
fSum += fP;
if (fW >= fLo && fW <= fUp) {
fRes += fP;
}
}
} else {
return new cError(cErrorType.not_available);
}
}
}
if (bStop || Math.abs(fSum - 1) > 1e-07) {
return new cError(cErrorType.not_available);
} else {
return new cNumber(fRes);
}
}
}
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2],
arg3 = arg[3] ? arg[3] : new cEmpty();
if (arg0 instanceof cArea || arg0 instanceof cArray) {
arg0 = arg0.getMatrix();
} else {
if (arg0 instanceof cArea3D) {
arg0 = arg0.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArray) {
arg1 = arg1.getMatrix();
} else {
if (arg1 instanceof cArea3D) {
arg1 = arg1.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
if (arg3 instanceof cArea || arg3 instanceof cArea3D) {
arg3 = arg3.cross(arguments[1].first);
} else {
if (arg3 instanceof cArray) {
arg3 = arg3.getElement(0);
}
}
arg2 = arg2.tocNumber();
if (!arg3 instanceof cEmpty) {
arg3 = arg3.tocNumber();
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
if (arg3 instanceof cError) {
return this.value = arg3;
}
return this.value = prob(arg0, arg1, arg2, arg3);
};
r.getInfo = function () {
return {
name: this.name,
args: "( x-range , probability-range , lower-limit [ , upper-limit ] )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"QUARTILE": function () {
var r = new cBaseFunction("QUARTILE");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function quartile(A, k) {
var tA = [],
fFlag = k.getValue();
for (var i = 0; i < A.length; i++) {
for (var j = 0; j < A[i].length; j++) {
if (A[i][j] instanceof cError) {
return A[i][j];
} else {
if (A[i][j] instanceof cNumber) {
tA.push(A[i][j].getValue());
} else {
if (A[i][j] instanceof cBool) {
tA.push(A[i][j].tocNumber().getValue());
}
}
}
}
}
tA.sort(function (a, b) {
return a - b;
});
var nSize = tA.length;
if (tA.length < 1 || nSize == 0) {
return new cError(cErrorType.not_available);
} else {
if (nSize == 1) {
return new cNumber(tA[0]);
} else {
if (fFlag < 0 || fFlag > 4) {
return new cError(cErrorType.not_numeric);
} else {
if (fFlag == 0) {
return new cNumber(tA[0]);
} else {
if (fFlag == 1) {
var nIndex = Math.floor(0.25 * (nSize - 1)),
fDiff = 0.25 * (nSize - 1) - Math.floor(0.25 * (nSize - 1));
if (fDiff == 0) {
return new cNumber(tA[nIndex]);
} else {
return new cNumber(tA[nIndex] + fDiff * (tA[nIndex + 1] - tA[nIndex]));
}
} else {
if (fFlag == 2) {
if (nSize % 2 == 0) {
return new cNumber((tA[nSize / 2 - 1] + tA[nSize / 2]) / 2);
} else {
return new cNumber(tA[(nSize - 1) / 2]);
}
} else {
if (fFlag == 3) {
var nIndex = Math.floor(0.75 * (nSize - 1)),
fDiff = 0.75 * (nSize - 1) - Math.floor(0.75 * (nSize - 1));
if (fDiff == 0) {
return new cNumber(tA[nIndex]);
} else {
return new cNumber(tA[nIndex] + fDiff * (tA[nIndex + 1] - tA[nIndex]));
}
} else {
return new cNumber(tA[nSize - 1]);
}
}
}
}
}
}
}
}
var arg0 = arg[0],
arg1 = arg[1];
if (arg0 instanceof cArea || arg0 instanceof cArray) {
arg0 = arg0.getMatrix();
} else {
if (arg0 instanceof cArea3D) {
arg0 = arg0.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
arg1 = arg1.tocNumber();
if (arg1 instanceof cError) {
return this.value = arg1;
}
return this.value = quartile(arg0, arg1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array , result-category )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"RANK": function () {
var r = new cBaseFunction("RANK");
return r;
},
"RSQ": function () {
var r = new cBaseFunction("RSQ");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function rsq(x, y) {
var sumXDeltaYDelta = 0,
sqrXDelta = 0,
sqrYDelta = 0,
_x = 0,
_y = 0,
xLength = 0;
if (x.length != y.length) {
return new cError(cErrorType.not_available);
}
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
sumXDeltaYDelta += (x[i].getValue() - _x) * (y[i].getValue() - _y);
sqrXDelta += (x[i].getValue() - _x) * (x[i].getValue() - _x);
sqrYDelta += (y[i].getValue() - _y) * (y[i].getValue() - _y);
}
if (sqrXDelta == 0 || sqrYDelta == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return new cNumber(Math.pow(sumXDeltaYDelta / Math.sqrt(sqrXDelta * sqrYDelta), 2));
}
}
var arg0 = arg[0],
arg1 = arg[1],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea) {
arr0 = arg0.getValue();
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea) {
arr1 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = rsq(arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array-1 , array-2 )"
};
};
return r;
},
"SKEW": function () {
var r = new cBaseFunction("SKEW");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function skew(x) {
var sumSQRDeltaX = 0,
_x = 0,
xLength = 0,
standDev = 0,
sumSQRDeltaXDivstandDev = 0;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
_x += x[i].getValue();
xLength++;
}
}
if (xLength <= 2) {
return new cError(cErrorType.not_available);
}
_x /= xLength;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
sumSQRDeltaX += Math.pow(x[i].getValue() - _x, 2);
}
}
standDev = Math.sqrt(sumSQRDeltaX / (xLength - 1));
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
sumSQRDeltaXDivstandDev += Math.pow((x[i].getValue() - _x) / standDev, 3);
}
}
return new cNumber(xLength / (xLength - 1) / (xLength - 2) * sumSQRDeltaXDivstandDev);
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString) {
continue;
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = skew(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"SLOPE": function () {
var r = new cBaseFunction("SLOPE");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function slope(y, x) {
var sumXDeltaYDelta = 0,
sqrXDelta = 0,
_x = 0,
_y = 0,
xLength = 0;
if (x.length != y.length) {
return new cError(cErrorType.not_available);
}
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
_x += x[i].getValue();
_y += y[i].getValue();
xLength++;
}
_x /= xLength;
_y /= xLength;
for (var i = 0; i < x.length; i++) {
if (! (x[i] instanceof cNumber && y[i] instanceof cNumber)) {
continue;
}
sumXDeltaYDelta += (x[i].getValue() - _x) * (y[i].getValue() - _y);
sqrXDelta += (x[i].getValue() - _x) * (x[i].getValue() - _x);
}
if (sqrXDelta == 0) {
return new cError(cErrorType.division_by_zero);
} else {
return new cNumber(sumXDeltaYDelta / sqrXDelta);
}
}
var arg0 = arg[0],
arg1 = arg[1],
arr0 = [],
arr1 = [];
if (arg0 instanceof cArea) {
arr0 = arg0.getValue();
} else {
if (arg0 instanceof cArray) {
arg0.foreach(function (elem) {
arr0.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
if (arg1 instanceof cArea) {
arr1 = arg1.getValue();
} else {
if (arg1 instanceof cArray) {
arg1.foreach(function (elem) {
arr1.push(elem);
});
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
return this.value = slope(arr0, arr1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array-1 , array-2 )"
};
};
return r;
},
"SMALL": function () {
var r = new cBaseFunction("SMALL");
r.setArgumentsMin(2);
r.setArgumentsMax(2);
r.Calculate = function (arg) {
function frequency(A, k) {
var tA = [];
for (var i = 0; i < A.length; i++) {
for (var j = 0; j < A[i].length; j++) {
if (A[i][j] instanceof cError) {
return A[i][j];
} else {
if (A[i][j] instanceof cNumber) {
tA.push(A[i][j].getValue());
} else {
if (A[i][j] instanceof cBool) {
tA.push(A[i][j].tocNumber().getValue());
}
}
}
}
}
tA.sort(function (a, b) {
return a - b;
});
if (k.getValue() >= tA.length || k.getValue() <= 0) {
return new cError(cErrorType.not_available);
} else {
return new cNumber(tA[k.getValue() - 1]);
}
}
var arg0 = arg[0],
arg1 = arg[1];
if (arg0 instanceof cArea || arg0 instanceof cArray) {
arg0 = arg0.getMatrix();
} else {
if (arg0 instanceof cArea3D) {
arg0 = arg0.getMatrix()[0];
} else {
return this.value = new cError(cErrorType.not_available);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
arg1 = arg1.tocNumber();
if (arg1 instanceof cError) {
return this.value = arg1;
}
return this.value = frequency(arg0, arg1);
};
r.getInfo = function () {
return {
name: this.name,
args: "( array , k )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"STANDARDIZE": function () {
var r = new cBaseFunction("STANDARDIZE");
r.setArgumentsMin(3);
r.setArgumentsMax(3);
r.Calculate = function (arg) {
var arg0 = arg[0],
arg1 = arg[1],
arg2 = arg[2];
function standardize(x, mue, sigma) {
if (sigma <= 0) {
return new cError(cErrorType.not_numeric);
} else {
return new cNumber((x - mue) / sigma);
}
}
if (arg0 instanceof cArea || arg0 instanceof cArea3D) {
arg0 = arg0.cross(arguments[1].first);
} else {
if (arg0 instanceof cArray) {
arg0 = arg0.getElement(0);
}
}
if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross(arguments[1].first);
} else {
if (arg1 instanceof cArray) {
arg1 = arg1.getElement(0);
}
}
if (arg2 instanceof cArea || arg2 instanceof cArea3D) {
arg2 = arg2.cross(arguments[1].first);
} else {
if (arg2 instanceof cArray) {
arg2 = arg2.getElement(0);
}
}
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if (arg0 instanceof cError) {
return this.value = arg0;
}
if (arg1 instanceof cError) {
return this.value = arg1;
}
if (arg2 instanceof cError) {
return this.value = arg2;
}
return this.value = standardize(arg0.getValue(), arg1.getValue(), arg2.getValue());
};
r.getInfo = function () {
return {
name: this.name,
args: "( x , mean , standard-deviation )"
};
};
return r;
},
"STDEV": function () {
var r = new cBaseFunction("STDEV");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0,
sum = new cNumber(0),
member = [];
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue();
if (_argV instanceof cNumber) {
member.push(_argV);
sum = _func[sum.type][_argV.type](sum, _argV, "+");
count++;
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j];
if (__arg instanceof cNumber) {
member.push(__arg);
sum = _func[sum.type][__arg.type](sum, __arg, "+");
count++;
}
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
var e = elem.tocNumber();
if (e instanceof cNumber) {
member.push(e);
sum = _func[sum.type][e.type](sum, e, "+");
count++;
}
});
} else {
_arg = _arg.tocNumber();
if (_arg instanceof cNumber) {
member.push(_arg);
sum = _func[sum.type][_arg.type](sum, _arg, "+");
count++;
}
}
}
}
}
var average = sum.getValue() / count,
res = 0,
av;
for (var i = 0; i < member.length; i++) {
av = member[i] - average;
res += av * av;
}
return this.value = new cNumber(Math.sqrt(res / (count - 1)));
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"STDEVA": function () {
var r = new cBaseFunction("STDEVA");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
var count = 0,
sum = new cNumber(0),
member = [];
for (var i = 0; i < arg.length; i++) {
var _arg = arg[i];
if (_arg instanceof cRef || _arg instanceof cRef3D) {
var _argV = _arg.getValue().tocNumber();
if (_argV instanceof cNumber) {
member.push(_argV);
sum = _func[sum.type][_argV.type](sum, _argV, "+");
count++;
}
} else {
if (_arg instanceof cArea || _arg instanceof cArea3D) {
var _argAreaValue = _arg.getValue();
for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j].tocNumber();
if (__arg instanceof cNumber) {
member.push(__arg);
sum = _func[sum.type][__arg.type](sum, __arg, "+");
count++;
}
}
} else {
if (_arg instanceof cArray) {
_arg.foreach(function (elem) {
var e = elem.tocNumber();
if (e instanceof cNumber) {
member.push(e);
sum = _func[sum.type][e.type](sum, e, "+");
count++;
}
});
} else {
_arg = _arg.tocNumber();
if (_arg instanceof cNumber) {
member.push(_arg);
sum = _func[sum.type][_arg.type](sum, _arg, "+");
count++;
}
}
}
}
}
var average = sum.getValue() / count,
res = 0,
av;
for (var i = 0; i < member.length; i++) {
av = member[i] - average;
res += av * av;
}
return this.value = new cNumber(Math.sqrt(res / (count - 1)));
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
r.setFormat(r.formatType.noneFormat);
return r;
},
"STDEVP": function () {
var r = new cBaseFunction("STDEVP");
return r;
},
"STDEVPA": function () {
var r = new cBaseFunction("STDEVPA");
return r;
},
"STEYX": function () {
var r = new cBaseFunction("STEYX");
return r;
},
"TDIST": function () {
var r = new cBaseFunction("TDIST");
return r;
},
"TINV": function () {
var r = new cBaseFunction("TINV");
return r;
},
"TREND": function () {
var r = new cBaseFunction("TREND");
return r;
},
"TRIMMEAN": function () {
var r = new cBaseFunction("TRIMMEAN");
return r;
},
"TTEST": function () {
var r = new cBaseFunction("TTEST");
return r;
},
"VAR": function () {
var r = new cBaseFunction("VAR");
r.setArgumentsMin(1);
r.setArgumentsMax(255);
r.Calculate = function (arg) {
function _var(x) {
var tA = [],
sumSQRDeltaX = 0,
_x = 0,
xLength = 0;
for (var i = 0; i < x.length; i++) {
if (x[i] instanceof cNumber) {
_x += x[i].getValue();
tA.push(x[i].getValue());
xLength++;
}
}
_x /= xLength;
for (var i = 0; i < x.length; i++) {
sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x);
}
return new cNumber(sumSQRDeltaX / (xLength - 1));
}
var arr0 = [];
for (var j = 0; j < this.getArguments(); j++) {
if (arg[j] instanceof cArea || arg[j] instanceof cArea3D) {
arg[j].foreach2(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cRef || arg[j] instanceof cRef3D) {
var a = arg[j].getValue();
if (a instanceof cNumber) {
arr0.push(a);
}
} else {
if (arg[j] instanceof cArray) {
arg[j].foreach(function (elem) {
if (elem instanceof cNumber) {
arr0.push(elem);
}
});
} else {
if (arg[j] instanceof cNumber || arg[j] instanceof cBool) {
arr0.push(arg[j].tocNumber());
} else {
if (arg[j] instanceof cString) {
continue;
} else {
return this.value = cError(cErrorType.wrong_value_type);
}
}
}
}
}
}
return this.value = _var(arr0);
};
r.getInfo = function () {
return {
name: this.name,
args: "( argument-list )"
};
};
return r;
},
"VARA": function () {
var r = new cBaseFunction("VARA");
return r;
},
"VARP": function () {
var r = new cBaseFunction("VARP");
return r;
},
"VARPA": function () {
var r = new cBaseFunction("VARPA");
return r;
},
"WEIBULL": function () {
var r = new cBaseFunction("WEIBULL");
return r;
},
"ZTEST": function () {
var r = new cBaseFunction("ZTEST");
return r;
}
};