SpecialFunc
by mizarjp
HTML
<div id="app"></div>
CSS
body {
background: #fff;
padding: 20px;
font-family: Helvetica;
}
#app {
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
JavaScript
var SpecialFunc = /** @class */ (function () {
function SpecialFunc() {
}
/**
* log(1+x)
* @param x
*/
SpecialFunc.log1p = function (x) { return Math.log1p(x); };
/**
* exp(x)-1
* @param x
*/
SpecialFunc.expm1 = function (x) { return Math.expm1(x); };
/**
* log(1-exp(x))
* @param x
*/
SpecialFunc.log1mexp = function (x) {
return !(x < 0) ? Number.NaN :
x > -this.LN2 ?
Math.log(-Math.expm1(x)) :
Math.log1p(-Math.exp(x));
};
/**
* log(1+exp(x))
* @param x
*/
SpecialFunc.log1pexp = function (x) {
return x <= 0 ?
Math.log1p(Math.exp(x)) :
(x + Math.log1p(Math.exp(-x)));
};
/**
* ロジット関数
* @param px
*/
SpecialFunc.enlogit = function (px) {
return Number.isNaN(px) ? Number.NaN :
px <= 0 ? Number.NEGATIVE_INFINITY :
px >= 1 ? Number.POSITIVE_INFINITY :
Math.log(px) - Math.log1p(-px);
};
/**
* 逆ロジット関数(ロジスティック関数)
* @param logit
*/
SpecialFunc.delogit = function (logit) {
if (logit > 0) {
var nexp = Math.exp(-logit);
return 1 / (nexp + 1);
}
else {
var pexp = Math.exp(logit);
return pexp / (pexp + 1);
}
};
/**
* 逆ロジット関数の対数
* @param logit
*/
SpecialFunc.logdelogit = function (logit) {
return -this.log1pexp(-logit);
};
/**
* ガンマ関数
* @param z
*/
SpecialFunc.gamma_int = function (z, f) {
// z <= 0 の場合の返り値は保証外
// (特に0以上の整数n に対して z == n, -2n-1 <= z <= -2n, z == -Infinity の場合)
// Lanczos近似 : https://en.wikipedia.org/wiki/Lanczos_approximation
// パラメータ算出 : https://mrob.com/pub/ries/lanczos-gamma.html
// g = 607.0 / 128.0;
var g = 4.7421875;
var x = -2.90818e-15;
var p = [
...