Skip to content

Instantly share code, notes, and snippets.

@hodzanassredin
Last active January 4, 2023 22:07
Show Gist options
  • Save hodzanassredin/fcc527a20a9baa2957d3f5dcbbf474bc to your computer and use it in GitHub Desktop.
Save hodzanassredin/fcc527a20a9baa2957d3f5dcbbf474bc to your computer and use it in GitHub Desktop.
Complex number in component pascal
MODULE QuantumComplex;
IMPORT Log, Math;
TYPE
Complex = RECORD
r,i:REAL
END;
PROCEDURE (VAR c: Complex) Init*(r,i:REAL), NEW;
BEGIN
c.r := r;
c.i := i;
END Init;
PROCEDURE (IN c: Complex) Log*(), NEW;
BEGIN
Log.Real(c.r);Log.Real(c.i);
END Log;
PROCEDURE Add*(a,b: Complex;OUT c: Complex);
BEGIN
c.r := a.r + b.r;
c.i := a.i + b.i;
END Add;
PROCEDURE Sub*(a,b: Complex;OUT c: Complex);
BEGIN
c.r := a.r - b.r;
c.i := a.i - b.i;
END Sub;
PROCEDURE MulReal(a: Complex; b: REAL; OUT c: Complex);
BEGIN
c.r := a.r * b;
c.i := a.i * b;
END MulReal;
PROCEDURE Mul*(a,b: Complex;OUT c: Complex);
BEGIN
c.r := a.r * b.r - a.i * b.i;
c.i := a.r * b.i + a.i * b.r;
END Mul;
PROCEDURE (IN c: Complex) Phase*() :REAL, NEW ;
BEGIN
RETURN Math.ArcTan2(c.i,c.r);
END Phase;
PROCEDURE (IN c: Complex) Abs*() :REAL, NEW ;
BEGIN
RETURN Math.Sqrt(Math.IntPower(c.r,2)+Math.IntPower(c.i,2));
END Abs;
PROCEDURE Do*;
VAR
a,b,c: Complex;
BEGIN
Log.String("Init a");a.Init(1,2);a.Log();Log.Ln;
Log.String("Init b");b.Init(2,2);b.Log();Log.Ln;
Log.String("Init c");c.Init(0,0);c.Log();Log.Ln;
Log.String("Add");Add(a,b,c);c.Log();Log.Ln;
Log.String("Sub");Sub(a,b,c);c.Log();Log.Ln;
Log.String("MulReal");MulReal(a, 2.5, c);c.Log();Log.Ln;
Log.String("Mul");Mul(a,b,c);c.Log();Log.Ln;
Log.String("Phase");Log.Real(c.Phase());Log.Ln;
Log.String("Mod");Log.Real(c.Abs());Log.Ln;
END Do;
END QuantumComplex.
QuantumComplex.Do
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment