bs-platform
Version:
bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support
176 lines (155 loc) • 3.73 kB
JavaScript
;
var one = /* record */[
/* re */1.0,
/* im */0.0
];
function add(x, y) {
return /* record */[
/* re */x[/* re */0] + y[/* re */0],
/* im */x[/* im */1] + y[/* im */1]
];
}
function sub(x, y) {
return /* record */[
/* re */x[/* re */0] - y[/* re */0],
/* im */x[/* im */1] - y[/* im */1]
];
}
function neg(x) {
return /* record */[
/* re */-x[/* re */0],
/* im */-x[/* im */1]
];
}
function conj(x) {
return /* record */[
/* re */x[/* re */0],
/* im */-x[/* im */1]
];
}
function mul(x, y) {
return /* record */[
/* re */x[/* re */0] * y[/* re */0] - x[/* im */1] * y[/* im */1],
/* im */x[/* re */0] * y[/* im */1] + x[/* im */1] * y[/* re */0]
];
}
function div(x, y) {
if (Math.abs(y[/* re */0]) >= Math.abs(y[/* im */1])) {
var r = y[/* im */1] / y[/* re */0];
var d = y[/* re */0] + r * y[/* im */1];
return /* record */[
/* re */(x[/* re */0] + r * x[/* im */1]) / d,
/* im */(x[/* im */1] - r * x[/* re */0]) / d
];
} else {
var r$1 = y[/* re */0] / y[/* im */1];
var d$1 = y[/* im */1] + r$1 * y[/* re */0];
return /* record */[
/* re */(r$1 * x[/* re */0] + x[/* im */1]) / d$1,
/* im */(r$1 * x[/* im */1] - x[/* re */0]) / d$1
];
}
}
function inv(x) {
return div(one, x);
}
function norm2(x) {
return x[/* re */0] * x[/* re */0] + x[/* im */1] * x[/* im */1];
}
function norm(x) {
var r = Math.abs(x[/* re */0]);
var i = Math.abs(x[/* im */1]);
if (r === 0.0) {
return i;
} else if (i === 0.0) {
return r;
} else if (r >= i) {
var q = i / r;
return r * Math.sqrt(1.0 + q * q);
} else {
var q$1 = r / i;
return i * Math.sqrt(1.0 + q$1 * q$1);
}
}
function arg(x) {
return Math.atan2(x[/* im */1], x[/* re */0]);
}
function polar(n, a) {
return /* record */[
/* re */Math.cos(a) * n,
/* im */Math.sin(a) * n
];
}
function sqrt(x) {
if (x[/* re */0] === 0.0 && x[/* im */1] === 0.0) {
return /* record */[
/* re */0.0,
/* im */0.0
];
} else {
var r = Math.abs(x[/* re */0]);
var i = Math.abs(x[/* im */1]);
var w;
if (r >= i) {
var q = i / r;
w = Math.sqrt(r) * Math.sqrt(0.5 * (1.0 + Math.sqrt(1.0 + q * q)));
} else {
var q$1 = r / i;
w = Math.sqrt(i) * Math.sqrt(0.5 * (q$1 + Math.sqrt(1.0 + q$1 * q$1)));
}
if (x[/* re */0] >= 0.0) {
return /* record */[
/* re */w,
/* im */0.5 * x[/* im */1] / w
];
} else {
return /* record */[
/* re */0.5 * i / w,
/* im */x[/* im */1] >= 0.0 ? w : -w
];
}
}
}
function exp(x) {
var e = Math.exp(x[/* re */0]);
return /* record */[
/* re */e * Math.cos(x[/* im */1]),
/* im */e * Math.sin(x[/* im */1])
];
}
function log(x) {
return /* record */[
/* re */Math.log(norm(x)),
/* im */Math.atan2(x[/* im */1], x[/* re */0])
];
}
function pow(x, y) {
return exp(mul(y, log(x)));
}
var zero = /* record */[
/* re */0.0,
/* im */0.0
];
var i = /* record */[
/* re */0.0,
/* im */1.0
];
exports.zero = zero;
exports.one = one;
exports.i = i;
exports.neg = neg;
exports.conj = conj;
exports.add = add;
exports.sub = sub;
exports.mul = mul;
exports.inv = inv;
exports.div = div;
exports.sqrt = sqrt;
exports.norm2 = norm2;
exports.norm = norm;
exports.arg = arg;
exports.polar = polar;
exports.exp = exp;
exports.log = log;
exports.pow = pow;
/* No side effect */