Your application must manipulate complex numbers, as are often needed in engineering, science, and mathematics.
Either keep track of the real and imaginary components yourself:
# $c = $a * $b manually $c_real = ( $a_real * $b_real ) - ( $a_imaginary * $b_imaginary ); $c_imaginary = ( $a_real * $b_imaginary ) + ( $b_real * $a_imaginary );
or use the Math::Complex module (part of the standard Perl distribution):
# $c = $a * $b using Math::Complex use Math::Complex; $c = $a * $b;
Here's how you'd manually multiply 3+5i and 2-2i:
$a_real = 3; $a_imaginary = 5; # 3 + 5i;
$b_real = 2; $b_imaginary = -2; # 2 - 2i;
$c_real = ( $a_real * $b_real ) - ( $a_imaginary * $b_imaginary );
$c_imaginary = ( $a_real * $b_imaginary ) + ( $b_real * $a_imaginary );
print "c = ${c_real}+${c_imaginary}i\n";
c = 16+4i
and with Math::Complex:
use Math::Complex;
$a = Math::Complex->new(3,5); # or Math::Complex->new(3,5);
$b = Math::Complex->new(2,-2);
$c = $a * $b;
print "c = $c\n";
c = 16+4i
You may create complex numbers via the cplx constructor or via the exported constant i:
use Math::Complex;
$c = cplx(3,5) * cplx(2,-2); # easier on the eye
$d = 3 + 4*i; # 3 + 4i
printf "sqrt($d) = %s\n", sqrt($d);
sqrt(3+4i) = 2+i
The Math::Trig module uses the Math::Complex module internally because some functions can break out from the real axis into the complex planefor example, the inverse sine of 2.
The documentation for the standard Math::Complex module (also in Chapter 32 of Programming Perl)