srecord Complex(double re, double im) { double abs() { ret sqrt(re*re+im*im); } double re() { ret re; } double im() { ret im; } double phase aka angle() { ret Math.atan2(im, re); } double fracAngle() { ret fracNonNeg(angle()/twoPi()); } // angle as 0 to 1 toString { if (im != 0) ret re == 0 ? im + "i" : re + plusPrefixUnlessMinus(str(im)) + "i"; else ret str(re); } }