js-math-complex
Version:
Complex Number for JavaScript
86 lines (84 loc) • 2.3 kB
HTML
<html>
<title>Math.Complex</title>
<script src="../math-complex.js"></script>
<body>
<div style="border:outset 1px; padding:0.5em">
<textarea rows="54" style="width:100%;font-family:monospace">
var cplx = Math.Complex,
cplxe = Math.Complex.polar;
p(new Math.Complex(1, 1) instanceof Math.Complex);
p(Math.Complex(1, 1) instanceof Math.Complex); /* new can be omitted */
p(cplx(Math.SQRT1_2, Math.SQRT1_2));
p(cplxe(1,Math.PI/4));
var c1 = cplx(1,2);
var c2 = cplx(3,4);
p(c1);
p('neg: ' + c1.neg());
p('con: ' + c1.con());
p('add: ' + c1.add(c2));
p('add: ' + c1.add(2));
p('sub: ' + c1.sub(c2));
p('sub: ' + c1.sub(2));
p('mul: ' + c1.mul(c2));
p('mul: ' + c1.mul(2));
p('div: ' + c1.div(c2));
p('div: ' + c1.div(2));
p('/0: ' + c1.div(cplx(0,0)));
p('/0: ' + c1.div(0));
p('arg: ' + c1.arg());
p('abs: ' + c1.abs());
p(cplxe(c1.abs(),c1.arg()));
p('exp: ' + c1.exp());
p('log: ' + c1.log());
p('pow: ' + c1.pow(c2));
p('pow: ' + c1.pow(2));
p('pow: ' + cplx(-2.5).pow(-2.5));
p('eq: ' + c1.eq(c1));
p('eq: ' + c1.eq(c2));
p('ne: ' + c1.ne(c1));
p('ne: ' + c1.ne(c2));
p('sqrt:' + cplx(2).sqrt());
p('sqrt:' + cplx(0, 2).sqrt());
p('cos:' + cplx(Math.PI/6).cos());
p('sin:' + cplx(Math.PI/6).sin());
p('tan:' + cplx(Math.PI/6).tan());
p('acos:' + cplx(Math.SQRT1_2).acos());
p('asin:' + cplx(Math.SQRT1_2).asin());
p('atan:' + cplx(Math.SQRT1_2).atan());
p('atan2:' + cplx(1).atan2(1));
p('atan2:' + cplx(1).atan2(0));
p('atan2:' + cplx(-1).atan2(0));
p('atan2:' + cplx(0).atan2(0));
with(Math.Complex){
p( exp(mul(Math.PI, cplx(0,1))) );
p([I, J]);
}
var c3 = new Math.Complex(c1);
p(c3);
p(c3.eq(c1));
p(c1 === c3);
</textarea><br><input type="submit" value="run" onclick="rundom(this)"
><input type="submit" value="clear" onclick="clsdom(this)"
><pre></pre>
</div>
<script>
rundom = function(that){
try{
var out = that.nextSibling.nextSibling;
var p = function(s){
out.innerHTML += s,
out.appendChild(document.createElement('br'));
}
var e = that.previousSibling.previousSibling;
var f = new Function( 'p', (e.value || e.innerText || e.textContent) );
f(p);
}catch(e){
alert(e);
}
};
clsdom = function(that){
that.nextSibling.innerHTML = '';
};
</script>
</body>
</html>