A JavaScript complex number class
The complex number class definition: cx.js
Reference:
class cx
constructor:
var c = new cx(x, y[, polar]); // returns a new complex number object:
                               //   x + yi, or x cis y if polar is true
properties: // these all return real numbers; read-write
c.re        // real part
c.im        // imaginary part
c.abs       // absolute value (radius)
c.arg       // argument (angle)
static property:
cx.i // returns a complex number object 0 + 1i; read-only
methods:
c.toString([polar])         // returns "x + yi" or "x cis y"; output defaults to the former
c.toPrecision(n[, polar])   // returns the same, to n significant figures
c.toPrecis(n[, polar])      //     "             to n significant figures, without trailing zeros
c.toFixed(n[, polar])       //     "             to n decimal places
c.toExponential(n[, polar]) //     "             to n decimal places in scientific notation
static methods:        // these all return a new cx unless otherwise noted
cx.conj(c)             // conjugate of c
cx.neg(c)              // negative c
cx.add(c, d)           // c + d; c or d may be simple or complex
cx.sub(c, d)           // c - d;         "
cx.mult(c, d)          // c * d;         "
cx.div(c, d)           // c / d;         "
cx.pow(c, int)         // c to the int power; int is an integer >= 0
cx.root(c, int[, k])   // c to the int root; int is an integer >= 2;
                       //   k is an integer 0 <= k <= int-1 for each of the roots (default 0)
cx.log(c)              // natural logarithm (base e) of c
cx.exp(c)              // e to the power of c
cx.sin(c)              // the trigonometric functions and their inverses
cx.cos(c)
cx.tan(c)
cx.asin(c[, k])        // k = 0 or 1 for each of the square roots in the equation (default 0)
cx.acos(c[, k])        // k = 0 or 1  "
cx.atan(c)
cx.sinh(c)             // the hyperbolic functions and their inverses
cx.cosh(c)
cx.tanh(c)
cx.asinh(c[, k])       // k = 0 or 1 for each of the square roots in the equation (default 0)
cx.acosh(c[, k])       // k = 0 or 1  "
cx.atanh(c)
cx.copy(c)             // returns a new cx with the same real and imaginary parts as c
cx.eq(c, d[, epsilon]) // returns true if the real and imaginary parts are equal,
                       //   or the difference less than the (optional) epsilon value
call one of these after the class definition:
cx.degrees(false); // input and output will use radians
cx.degrees(true);  // input and output will use degrees
Some derived functions and miscellany:
c-a/b = cx.div(1, cx.pow(cx.root(c, b, k), a)) logb(c) = cx.div(cx.log(c), Math.log(b)) ac = cx.exp(cx.mult(c, Math.log(a))) typeof c = "object" c instanceof cx = true
Try it yourself; enter code into the first field below, then an expression to be evaluated into the second, and press calculate. (Note: if you write an infinite loop or other bad code, you may crash your browser.)