time-to-botec/squiggle/node_modules/@rescript/std/lib/es6/complex.js
NunoSempere b6addc7f05 feat: add the node modules
Necessary in order to clearly see the squiggle hotwiring.
2022-12-03 12:44:49 +00:00

177 lines
2.6 KiB
JavaScript

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
};
export {
zero ,
one ,
i ,
neg ,
conj ,
add ,
sub ,
mul ,
inv ,
div ,
sqrt ,
norm2 ,
norm ,
arg ,
polar ,
exp ,
log ,
pow ,
}
/* No side effect */