UNPKG

@rescript/std

Version:

The motiviation of this repo is that when ReScript users want to share their library with JS users, the JS users don't need have ReScript toolchain installed, this makes sharing code with JS users easier (more details on that topic can be found in our [Ex

175 lines (154 loc) 2.85 kB
'use strict'; var one = { re: 1.0, im: 0.0 }; function add(x, y) { return { re: x.re + y.re, im: x.im + y.im }; } function sub(x, y) { return { re: x.re - y.re, im: x.im - y.im }; } function neg(x) { return { re: - x.re, im: - x.im }; } function conj(x) { return { re: x.re, im: - x.im }; } function mul(x, y) { return { re: x.re * y.re - x.im * y.im, im: x.re * y.im + x.im * y.re }; } function div(x, y) { if (Math.abs(y.re) >= Math.abs(y.im)) { var r = y.im / y.re; var d = y.re + r * y.im; return { re: (x.re + r * x.im) / d, im: (x.im - r * x.re) / d }; } var r$1 = y.re / y.im; var d$1 = y.im + r$1 * y.re; return { re: (r$1 * x.re + x.im) / d$1, im: (r$1 * x.im - x.re) / d$1 }; } function inv(x) { return div(one, x); } function norm2(x) { return x.re * x.re + x.im * x.im; } function norm(x) { var r = Math.abs(x.re); var i = Math.abs(x.im); if (r === 0.0) { return i; } if (i === 0.0) { return r; } if (r >= i) { var q = i / r; return r * Math.sqrt(1.0 + q * q); } var q$1 = r / i; return i * Math.sqrt(1.0 + q$1 * q$1); } function arg(x) { return Math.atan2(x.im, x.re); } function polar(n, a) { return { re: Math.cos(a) * n, im: Math.sin(a) * n }; } function sqrt(x) { if (x.re === 0.0 && x.im === 0.0) { return { re: 0.0, im: 0.0 }; } var r = Math.abs(x.re); var i = Math.abs(x.im); 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) { return { re: w, im: 0.5 * x.im / w }; } else { return { re: 0.5 * i / w, im: x.im >= 0.0 ? w : - w }; } } function exp(x) { var e = Math.exp(x.re); return { re: e * Math.cos(x.im), im: e * Math.sin(x.im) }; } function log(x) { return { re: Math.log(norm(x)), im: Math.atan2(x.im, x.re) }; } function pow(x, y) { return exp(mul(y, log(x))); } var zero = { re: 0.0, im: 0.0 }; var i = { 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 */