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 = [
           ...