I think someone made a lib for complex numbers....
You could do that yourself you know , you need a record with the Real and imaginary fields and a few basic
functions to do the math...
from the help file..
[next] [prev] [prevtail] [tail] [up]
15.4 Arithmetic operators
Arithmetic operators define the action of a binary operator. Possible operations are:
multiplication
To multiply two types, the
*
multiplication operator must be overloaded.
division
To divide two types, the
/
division operator must be overloaded.
addition
To add two types, the
+
addition operator must be overloaded.
substraction
To subtract two types, the

subtraction operator must be overloaded.
exponentiation
To exponentiate two types, the
**
exponentiation operator must be overloaded.
Unary minus
is used to take the negative of the argument following it.
Symmetric Difference
To take the symmetric difference of 2 structures, the
><
operator must be overloaded.
The definition of an arithmetic operator takes two parameters, except for unary minus, which needs only 1 parameter. The first parameter must be of the type that occurs at the left of the operator, the second parameter must be of the type that is at the right of the arithmetic operator. The result type must match the type that results after the arithmetic operation.
To compile an expression as
var
R : real;
C,Z : complex;
begin
C:=R*Z;
end;
One needs a definition of the multiplication operator as:
Operator * (r : real; z1 : complex) z : complex;
begin
z.re := z1.re * r;
z.im := z1.im * r;
end;
As can be seen, the first operator is a real, and the second is a complex. The result type is
complex.
P.S.
Forgot
include the unit "ucomplex" but I don't know if it supports all of what you need, you may need to add on..