num = den =
real = img =
Stack:
+i
1/2
class Make { //Factory methods for numbers
static whole(n) {
return new Whole(n);
}
static rational(n, d) {
if (d < 0) { n = -n; d = -d; }
let g = Rational.gcd(n, d);
if (g == d) return new Whole(n/g);
return new Rational(n/g, d/g);
}
static decimal(x) {
if (x == Math.round(x))
return new Whole(x);
return new Decimal(x);
}
static complex(re, im) {
if (im == 0)
return Make.decimal(re);
return new Complex(re, im);
}
static fromString(s) {
if (typeof s == "number")
return Make.decimal(s);
let [n, d] = s.split('/')
if (d) return Make.rational(n, d)
let [re, im] = s.split('+i')
if (im) return Make.complex(re, im)
[re, im] = s.split('-i')
if (im) return Make.complex(re, -im)
return Make.decimal(Number(s));
}
}