Complex.mesa
The complex numbers.
last modified by McCreight, November 21, 1983 5:34 pm
DIRECTORY
RealFns;
Complex: CEDAR DEFINITIONS IMPORTS RealFns =
BEGIN
Number: TYPE = RECORD [ re, im: REAL ];
Polar: TYPE = RECORD [magnitude, angleDeg: REAL ];
Add: PROC [ x, y: Number ] RETURNS [ Number ] = INLINE
{RETURN[[re: x.re+y.re, im: x.im+y.im]]};
Subtract: PROC [ x, y: Number ] RETURNS [ Number ] = INLINE
{RETURN[[re: x.re-y.re, im: x.im-y.im]]};
Multiply: PROC [ x, y: Number ] RETURNS [ Number ] = INLINE
{RETURN[[re: x.re*y.re-x.im*y.im, im: x.re*y.im+y.re*x.im]]};
Divide: PROC [ x, y: Number ] RETURNS [ Number ] = INLINE
BEGIN
div: REAL = y.re*y.re+y.im*y.im;
RETURN[[re: (x.re*y.re+x.im*y.im)/div, im: (x.im*y.re-x.re*y.im)/div]];
END;
Magnitude: PROC [ x: Number ] RETURNS [ REAL ] = INLINE
{RETURN[RealFns.SqRt[x.re*x.re+x.im*x.im]]};
AngleDeg: PROC [ x: Number ] RETURNS [ REAL -- [-180.0..180.0) -- ] = INLINE
{RETURN[RealFns.ArcTanDeg[y: x.im, x: x.re]]};
FromPolar: PROC [ x: Polar ] RETURNS [ Number ] = INLINE
{RETURN[[re: x.magnitude*RealFns.CosDeg[x.angleDeg],
im: x.magnitude*RealFns.SinDeg[x.angleDeg]]]};
ToPolar: PROC [ x: Number ] RETURNS [ Polar ] = INLINE
{RETURN[[magnitude: Magnitude[x], angleDeg: AngleDeg[x]]]};
END.