2 # Complex numbers and associated mathematical functions
3 # -- Raphael Manfredi Since Sep 1996
4 # -- Jarkko Hietaniemi Since Mar 1997
5 # -- Daniel S. Lewart Since Sep 1997
10 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $Inf);
19 4 => '1.70141183460469229e+38',
20 8 => '1.7976931348623157e+308',
21 10 => '1.1897314953572317650857593266280070162E+4932',
22 12 => '1.1897314953572317650857593266280070162E+4932', # AFAICT.
24 my $nvsize = $Config{nvsize} || ($Config{uselongdouble} && $Config{longdblsize}) || $Config{doublesize};
25 die "Math::Complex: Could not figure out nvsize\n" unless defined $nvsize;
26 my $DBL_MAX = eval $DBL_MAX{$nvsize};
27 die "Math::Complex: Could not figure out max nv\n" unless defined $DBL_MAX;
28 my $BIGGER_THAN_THIS = 1e30; # Must find something bigger than this.
29 if ($^O eq 'unicosmk') {
33 # We do want an arithmetic overflow, Inf INF inf Infinity.
35 'exp(99999)', # Enough even with 128-bit long doubles.
44 local $SIG{FPE} = { };
46 my $i = eval "$t+1.0";
47 if (defined $i && $i > $BIGGER_THAN_THIS) {
52 $Inf = $DBL_MAX unless defined $Inf; # Oh well, close enough.
53 die "Math::Complex: Could not get Infinity"
54 unless $Inf > $BIGGER_THAN_THIS;
56 # print "# On this machine, Inf = '$Inf'\n";
64 # Regular expression for floating point numbers.
65 # These days we could use Scalar::Util::lln(), I guess.
66 my $gre = qr'\s*([\+\-]?(?:(?:(?:\d+(?:_\d+)*(?:\.\d*(?:_\d+)*)?|\.\d+(?:_\d+)*)(?:[eE][\+\-]?\d+(?:_\d+)*)?))|inf)'i;
75 csc cosec sec cot cotan
77 acsc acosec asec acot acotan
79 csch cosech sech coth cotanh
81 acsch acosech asech acoth acotanh
93 my @pi = qw(pi pi2 pi4 pip2 pip4 Inf);
109 '<=>' => \&_spaceship,
120 '""' => \&_stringify;
126 my %DISPLAY_FORMAT = ('style' => 'cartesian',
127 'polar_pretty_print' => 1);
128 my $eps = 1e-14; # Epsilon
131 # Object attributes (internal):
132 # cartesian [real, imaginary] -- cartesian form
133 # polar [rho, theta] -- polar form
134 # c_dirty cartesian form not up-to-date
135 # p_dirty polar form not up-to-date
136 # display display format (package's global when not set)
139 # Die on bad *make() arguments.
142 die "@{[(caller(1))[3]]}: Cannot take $_[0] of '$_[1]'.\n";
149 if ($arg =~ /^$gre$/) {
151 } elsif ($arg =~ /^(?:$gre)?$gre\s*i\s*$/) {
152 ($p, $q) = ($1 || 0, $2);
153 } elsif ($arg =~ /^\s*\(\s*$gre\s*(?:,\s*$gre\s*)?\)\s*$/) {
154 ($p, $q) = ($1, $2 || 0);
159 $p =~ s/^(-?)inf$/"${1}9**9**9"/e;
161 $q =~ s/^(-?)inf$/"${1}9**9**9"/e;
171 if ($arg =~ /^\s*\[\s*$gre\s*(?:,\s*$gre\s*)?\]\s*$/) {
172 ($p, $q) = ($1, $2 || 0);
173 } elsif ($arg =~ m!^\s*\[\s*$gre\s*(?:,\s*([-+]?\d*\s*)?pi(?:/\s*(\d+))?\s*)?\]\s*$!) {
174 ($p, $q) = ($1, ($2 eq '-' ? -1 : ($2 || 1)) * pi() / ($3 || 1));
175 } elsif ($arg =~ /^\s*\[\s*$gre\s*\]\s*$/) {
177 } elsif ($arg =~ /^\s*$gre\s*$/) {
184 $p =~ s/^(-?)inf$/"${1}9**9**9"/e;
185 $q =~ s/^(-?)inf$/"${1}9**9**9"/e;
194 # Create a new complex number (cartesian form)
197 my $self = bless {}, shift;
202 return (ref $self)->emake($_[0])
203 if ($_[0] =~ /^\s*\[/);
204 ($re, $im) = _make($_[0]);
209 _cannot_make("real part", $re) unless $re =~ /^$gre$/;
212 _cannot_make("imaginary part", $im) unless $im =~ /^$gre$/;
213 $self->_set_cartesian([$re, $im ]);
214 $self->display_format('cartesian');
222 # Create a new complex number (exponential form)
225 my $self = bless {}, shift;
228 ($rho, $theta) = (0, 0);
230 return (ref $self)->make($_[0])
231 if ($_[0] =~ /^\s*\(/ || $_[0] =~ /i\s*$/);
232 ($rho, $theta) = _emake($_[0]);
236 if (defined $rho && defined $theta) {
239 $theta = ($theta <= 0) ? $theta + pi() : $theta - pi();
243 _cannot_make("rho", $rho) unless $rho =~ /^$gre$/;
246 _cannot_make("theta", $theta) unless $theta =~ /^$gre$/;
247 $self->_set_polar([$rho, $theta]);
248 $self->display_format('polar');
253 sub new { &make } # For backward compatibility only.
258 # Creates a complex number from a (re, im) tuple.
259 # This avoids the burden of writing Math::Complex->make(re, im).
262 return __PACKAGE__->make(@_);
268 # Creates a complex number from a (rho, theta) tuple.
269 # This avoids the burden of writing Math::Complex->emake(rho, theta).
272 return __PACKAGE__->emake(@_);
278 # The number defined as pi = 180 degrees
280 sub pi () { 4 * CORE::atan2(1, 1) }
287 sub pi2 () { 2 * pi }
292 # The full circle twice.
294 sub pi4 () { 4 * pi }
301 sub pip2 () { pi / 2 }
308 sub pip4 () { pi / 4 }
315 sub _uplog10 () { 1 / CORE::log(10) }
320 # The number defined as i*i = -1;
325 $i->{'cartesian'} = [0, 1];
326 $i->{'polar'} = [1, pip2];
337 sub _ip2 () { i / 2 }
340 # Attribute access/set routines
343 sub _cartesian {$_[0]->{c_dirty} ?
344 $_[0]->_update_cartesian : $_[0]->{'cartesian'}}
345 sub _polar {$_[0]->{p_dirty} ?
346 $_[0]->_update_polar : $_[0]->{'polar'}}
348 sub _set_cartesian { $_[0]->{p_dirty}++; $_[0]->{c_dirty} = 0;
349 $_[0]->{'cartesian'} = $_[1] }
350 sub _set_polar { $_[0]->{c_dirty}++; $_[0]->{p_dirty} = 0;
351 $_[0]->{'polar'} = $_[1] }
354 # ->_update_cartesian
356 # Recompute and return the cartesian form, given accurate polar form.
358 sub _update_cartesian {
360 my ($r, $t) = @{$self->{'polar'}};
361 $self->{c_dirty} = 0;
362 return $self->{'cartesian'} = [$r * CORE::cos($t), $r * CORE::sin($t)];
369 # Recompute and return the polar form, given accurate cartesian form.
373 my ($x, $y) = @{$self->{'cartesian'}};
374 $self->{p_dirty} = 0;
375 return $self->{'polar'} = [0, 0] if $x == 0 && $y == 0;
376 return $self->{'polar'} = [CORE::sqrt($x*$x + $y*$y),
377 CORE::atan2($y, $x)];
386 my ($z1, $z2, $regular) = @_;
387 my ($re1, $im1) = @{$z1->_cartesian};
388 $z2 = cplx($z2) unless ref $z2;
389 my ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
390 unless (defined $regular) {
391 $z1->_set_cartesian([$re1 + $re2, $im1 + $im2]);
394 return (ref $z1)->make($re1 + $re2, $im1 + $im2);
403 my ($z1, $z2, $inverted) = @_;
404 my ($re1, $im1) = @{$z1->_cartesian};
405 $z2 = cplx($z2) unless ref $z2;
406 my ($re2, $im2) = @{$z2->_cartesian};
407 unless (defined $inverted) {
408 $z1->_set_cartesian([$re1 - $re2, $im1 - $im2]);
412 (ref $z1)->make($re2 - $re1, $im2 - $im1) :
413 (ref $z1)->make($re1 - $re2, $im1 - $im2);
423 my ($z1, $z2, $regular) = @_;
424 if ($z1->{p_dirty} == 0 and ref $z2 and $z2->{p_dirty} == 0) {
425 # if both polar better use polar to avoid rounding errors
426 my ($r1, $t1) = @{$z1->_polar};
427 my ($r2, $t2) = @{$z2->_polar};
429 if ($t > pi()) { $t -= pi2 }
430 elsif ($t <= -pi()) { $t += pi2 }
431 unless (defined $regular) {
432 $z1->_set_polar([$r1 * $r2, $t]);
435 return (ref $z1)->emake($r1 * $r2, $t);
437 my ($x1, $y1) = @{$z1->_cartesian};
439 my ($x2, $y2) = @{$z2->_cartesian};
440 return (ref $z1)->make($x1*$x2-$y1*$y2, $x1*$y2+$y1*$x2);
442 return (ref $z1)->make($x1*$z2, $y1*$z2);
450 # Die on division by zero.
453 my $mess = "$_[0]: Division by zero.\n";
456 $mess .= "(Because in the definition of $_[0], the divisor ";
457 $mess .= "$_[1] " unless ("$_[1]" eq '0');
463 $mess .= "Died at $up[1] line $up[2].\n";
474 my ($z1, $z2, $inverted) = @_;
475 if ($z1->{p_dirty} == 0 and ref $z2 and $z2->{p_dirty} == 0) {
476 # if both polar better use polar to avoid rounding errors
477 my ($r1, $t1) = @{$z1->_polar};
478 my ($r2, $t2) = @{$z2->_polar};
481 _divbyzero "$z2/0" if ($r1 == 0);
483 if ($t > pi()) { $t -= pi2 }
484 elsif ($t <= -pi()) { $t += pi2 }
485 return (ref $z1)->emake($r2 / $r1, $t);
487 _divbyzero "$z1/0" if ($r2 == 0);
489 if ($t > pi()) { $t -= pi2 }
490 elsif ($t <= -pi()) { $t += pi2 }
491 return (ref $z1)->emake($r1 / $r2, $t);
496 ($x2, $y2) = @{$z1->_cartesian};
497 $d = $x2*$x2 + $y2*$y2;
498 _divbyzero "$z2/0" if $d == 0;
499 return (ref $z1)->make(($x2*$z2)/$d, -($y2*$z2)/$d);
501 my ($x1, $y1) = @{$z1->_cartesian};
503 ($x2, $y2) = @{$z2->_cartesian};
504 $d = $x2*$x2 + $y2*$y2;
505 _divbyzero "$z1/0" if $d == 0;
506 my $u = ($x1*$x2 + $y1*$y2)/$d;
507 my $v = ($y1*$x2 - $x1*$y2)/$d;
508 return (ref $z1)->make($u, $v);
510 _divbyzero "$z1/0" if $z2 == 0;
511 return (ref $z1)->make($x1/$z2, $y1/$z2);
520 # Computes z1**z2 = exp(z2 * log z1)).
523 my ($z1, $z2, $inverted) = @_;
525 return 1 if $z1 == 0 || $z2 == 1;
526 return 0 if $z2 == 0 && Re($z1) > 0;
528 return 1 if $z2 == 0 || $z1 == 1;
529 return 0 if $z1 == 0 && Re($z2) > 0;
531 my $w = $inverted ? &exp($z1 * &log($z2))
532 : &exp($z2 * &log($z1));
533 # If both arguments cartesian, return cartesian, else polar.
534 return $z1->{c_dirty} == 0 &&
535 (not ref $z2 or $z2->{c_dirty} == 0) ?
536 cplx(@{$w->_cartesian}) : $w;
542 # Computes z1 <=> z2.
543 # Sorts on the real part first, then on the imaginary part. Thus 2-4i < 3+8i.
546 my ($z1, $z2, $inverted) = @_;
547 my ($re1, $im1) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
548 my ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
549 my $sgn = $inverted ? -1 : 1;
550 return $sgn * ($re1 <=> $re2) if $re1 != $re2;
551 return $sgn * ($im1 <=> $im2);
559 # (Required in addition to _spaceship() because of NaNs.)
561 my ($z1, $z2, $inverted) = @_;
562 my ($re1, $im1) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
563 my ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
564 return $re1 == $re2 && $im1 == $im2 ? 1 : 0;
575 my ($r, $t) = @{$z->_polar};
576 $t = ($t <= 0) ? $t + pi : $t - pi;
577 return (ref $z)->emake($r, $t);
579 my ($re, $im) = @{$z->_cartesian};
580 return (ref $z)->make(-$re, -$im);
586 # Compute complex's _conjugate.
591 my ($r, $t) = @{$z->_polar};
592 return (ref $z)->emake($r, -$t);
594 my ($re, $im) = @{$z->_cartesian};
595 return (ref $z)->make($re, -$im);
601 # Compute or set complex's norm (rho).
609 return CORE::abs($z);
613 $z->{'polar'} = [ $rho, ${$z->_polar}[1] ];
618 return ${$z->_polar}[0];
625 if ($$theta > pi()) { $$theta -= pi2 }
626 elsif ($$theta <= -pi()) { $$theta += pi2 }
632 # Compute or set complex's argument (theta).
635 my ($z, $theta) = @_;
636 return $z unless ref $z;
637 if (defined $theta) {
639 $z->{'polar'} = [ ${$z->_polar}[0], $theta ];
643 $theta = ${$z->_polar}[1];
654 # It is quite tempting to use wantarray here so that in list context
655 # sqrt() would return the two solutions. This, however, would
658 # print "sqrt(z) = ", sqrt($z), "\n";
660 # The two values would be printed side by side without no intervening
661 # whitespace, quite confusing.
662 # Therefore if you want the two solutions use the root().
666 my ($re, $im) = ref $z ? @{$z->_cartesian} : ($z, 0);
667 return $re < 0 ? cplx(0, CORE::sqrt(-$re)) : CORE::sqrt($re)
669 my ($r, $t) = @{$z->_polar};
670 return (ref $z)->emake(CORE::sqrt($r), $t/2);
676 # Compute cbrt(z) (cubic root).
678 # Why are we not returning three values? The same answer as for sqrt().
683 -CORE::exp(CORE::log(-$z)/3) :
684 ($z > 0 ? CORE::exp(CORE::log($z)/3): 0)
686 my ($r, $t) = @{$z->_polar};
688 return (ref $z)->emake(CORE::exp(CORE::log($r)/3), $t/3);
697 my $mess = "Root '$_[0]' illegal, root rank must be positive integer.\n";
701 $mess .= "Died at $up[1] line $up[2].\n";
709 # Computes all nth root for z, returning an array whose size is n.
710 # `n' must be a positive integer.
712 # The roots are given by (for k = 0..n-1):
714 # z^(1/n) = r^(1/n) (cos ((t+2 k pi)/n) + i sin ((t+2 k pi)/n))
717 my ($z, $n, $k) = @_;
718 _rootbad($n) if ($n < 1 or int($n) != $n);
719 my ($r, $t) = ref $z ?
720 @{$z->_polar} : (CORE::abs($z), $z >= 0 ? 0 : pi);
721 my $theta_inc = pi2 / $n;
722 my $rho = $r ** (1/$n);
723 my $cartesian = ref $z && $z->{c_dirty} == 0;
726 for (my $i = 0, my $theta = $t / $n;
728 $i++, $theta += $theta_inc) {
729 my $w = cplxe($rho, $theta);
730 # Yes, $cartesian is loop invariant.
731 push @root, $cartesian ? cplx(@{$w->_cartesian}) : $w;
735 my $w = cplxe($rho, $t / $n + $k * $theta_inc);
736 return $cartesian ? cplx(@{$w->_cartesian}) : $w;
743 # Return or set Re(z).
747 return $z unless ref $z;
749 $z->{'cartesian'} = [ $Re, ${$z->_cartesian}[1] ];
753 return ${$z->_cartesian}[0];
760 # Return or set Im(z).
764 return 0 unless ref $z;
766 $z->{'cartesian'} = [ ${$z->_cartesian}[0], $Im ];
770 return ${$z->_cartesian}[1];
777 # Return or set rho(w).
780 Math::Complex::abs(@_);
786 # Return or set theta(w).
789 Math::Complex::arg(@_);
799 my ($x, $y) = @{$z->_cartesian};
800 return (ref $z)->emake(CORE::exp($x), $y);
806 # Die on logarithm of zero.
809 my $mess = "$_[0]: Logarithm of zero.\n";
812 $mess .= "(Because in the definition of $_[0], the argument ";
813 $mess .= "$_[1] " unless ($_[1] eq '0');
819 $mess .= "Died at $up[1] line $up[2].\n";
832 _logofzero("log") if $z == 0;
833 return $z > 0 ? CORE::log($z) : cplx(CORE::log(-$z), pi);
835 my ($r, $t) = @{$z->_polar};
836 _logofzero("log") if $r == 0;
837 if ($t > pi()) { $t -= pi2 }
838 elsif ($t <= -pi()) { $t += pi2 }
839 return (ref $z)->make(CORE::log($r), $t);
847 sub ln { Math::Complex::log(@_) }
856 return Math::Complex::log($_[0]) * _uplog10;
862 # Compute logn(z,n) = log(z) / log(n)
866 $z = cplx($z, 0) unless ref $z;
867 my $logn = $LOGN{$n};
868 $logn = $LOGN{$n} = CORE::log($n) unless defined $logn; # Cache log(n)
869 return &log($z) / $logn;
875 # Compute cos(z) = (exp(iz) + exp(-iz))/2.
879 return CORE::cos($z) unless ref $z;
880 my ($x, $y) = @{$z->_cartesian};
881 my $ey = CORE::exp($y);
882 my $sx = CORE::sin($x);
883 my $cx = CORE::cos($x);
884 my $ey_1 = $ey ? 1 / $ey : Inf();
885 return (ref $z)->make($cx * ($ey + $ey_1)/2,
886 $sx * ($ey_1 - $ey)/2);
892 # Compute sin(z) = (exp(iz) - exp(-iz))/2.
896 return CORE::sin($z) unless ref $z;
897 my ($x, $y) = @{$z->_cartesian};
898 my $ey = CORE::exp($y);
899 my $sx = CORE::sin($x);
900 my $cx = CORE::cos($x);
901 my $ey_1 = $ey ? 1 / $ey : Inf();
902 return (ref $z)->make($sx * ($ey + $ey_1)/2,
903 $cx * ($ey - $ey_1)/2);
909 # Compute tan(z) = sin(z) / cos(z).
914 _divbyzero "tan($z)", "cos($z)" if $cz == 0;
915 return &sin($z) / $cz;
921 # Computes the secant sec(z) = 1 / cos(z).
926 _divbyzero "sec($z)", "cos($z)" if ($cz == 0);
933 # Computes the cosecant csc(z) = 1 / sin(z).
938 _divbyzero "csc($z)", "sin($z)" if ($sz == 0);
947 sub cosec { Math::Complex::csc(@_) }
952 # Computes cot(z) = cos(z) / sin(z).
957 _divbyzero "cot($z)", "sin($z)" if ($sz == 0);
958 return &cos($z) / $sz;
966 sub cotan { Math::Complex::cot(@_) }
971 # Computes the arc cosine acos(z) = -i log(z + sqrt(z*z-1)).
975 return CORE::atan2(CORE::sqrt(1-$z*$z), $z)
976 if (! ref $z) && CORE::abs($z) <= 1;
977 $z = cplx($z, 0) unless ref $z;
978 my ($x, $y) = @{$z->_cartesian};
979 return 0 if $x == 1 && $y == 0;
980 my $t1 = CORE::sqrt(($x+1)*($x+1) + $y*$y);
981 my $t2 = CORE::sqrt(($x-1)*($x-1) + $y*$y);
982 my $alpha = ($t1 + $t2)/2;
983 my $beta = ($t1 - $t2)/2;
984 $alpha = 1 if $alpha < 1;
985 if ($beta > 1) { $beta = 1 }
986 elsif ($beta < -1) { $beta = -1 }
987 my $u = CORE::atan2(CORE::sqrt(1-$beta*$beta), $beta);
988 my $v = CORE::log($alpha + CORE::sqrt($alpha*$alpha-1));
989 $v = -$v if $y > 0 || ($y == 0 && $x < -1);
990 return (ref $z)->make($u, $v);
996 # Computes the arc sine asin(z) = -i log(iz + sqrt(1-z*z)).
1000 return CORE::atan2($z, CORE::sqrt(1-$z*$z))
1001 if (! ref $z) && CORE::abs($z) <= 1;
1002 $z = cplx($z, 0) unless ref $z;
1003 my ($x, $y) = @{$z->_cartesian};
1004 return 0 if $x == 0 && $y == 0;
1005 my $t1 = CORE::sqrt(($x+1)*($x+1) + $y*$y);
1006 my $t2 = CORE::sqrt(($x-1)*($x-1) + $y*$y);
1007 my $alpha = ($t1 + $t2)/2;
1008 my $beta = ($t1 - $t2)/2;
1009 $alpha = 1 if $alpha < 1;
1010 if ($beta > 1) { $beta = 1 }
1011 elsif ($beta < -1) { $beta = -1 }
1012 my $u = CORE::atan2($beta, CORE::sqrt(1-$beta*$beta));
1013 my $v = -CORE::log($alpha + CORE::sqrt($alpha*$alpha-1));
1014 $v = -$v if $y > 0 || ($y == 0 && $x < -1);
1015 return (ref $z)->make($u, $v);
1021 # Computes the arc tangent atan(z) = i/2 log((i+z) / (i-z)).
1025 return CORE::atan2($z, 1) unless ref $z;
1026 my ($x, $y) = ref $z ? @{$z->_cartesian} : ($z, 0);
1027 return 0 if $x == 0 && $y == 0;
1028 _divbyzero "atan(i)" if ( $z == i);
1029 _logofzero "atan(-i)" if (-$z == i); # -i is a bad file test...
1030 my $log = &log((i + $z) / (i - $z));
1037 # Computes the arc secant asec(z) = acos(1 / z).
1041 _divbyzero "asec($z)", $z if ($z == 0);
1042 return acos(1 / $z);
1048 # Computes the arc cosecant acsc(z) = asin(1 / z).
1052 _divbyzero "acsc($z)", $z if ($z == 0);
1053 return asin(1 / $z);
1061 sub acosec { Math::Complex::acsc(@_) }
1066 # Computes the arc cotangent acot(z) = atan(1 / z)
1070 _divbyzero "acot(0)" if $z == 0;
1071 return ($z >= 0) ? CORE::atan2(1, $z) : CORE::atan2(-1, -$z)
1073 _divbyzero "acot(i)" if ($z - i == 0);
1074 _logofzero "acot(-i)" if ($z + i == 0);
1075 return atan(1 / $z);
1083 sub acotan { Math::Complex::acot(@_) }
1088 # Computes the hyperbolic cosine cosh(z) = (exp(z) + exp(-z))/2.
1094 $ex = CORE::exp($z);
1095 return $ex ? ($ex + 1/$ex)/2 : Inf();
1097 my ($x, $y) = @{$z->_cartesian};
1098 $ex = CORE::exp($x);
1099 my $ex_1 = $ex ? 1 / $ex : Inf();
1100 return (ref $z)->make(CORE::cos($y) * ($ex + $ex_1)/2,
1101 CORE::sin($y) * ($ex - $ex_1)/2);
1107 # Computes the hyperbolic sine sinh(z) = (exp(z) - exp(-z))/2.
1113 return 0 if $z == 0;
1114 $ex = CORE::exp($z);
1115 return $ex ? ($ex - 1/$ex)/2 : -Inf();
1117 my ($x, $y) = @{$z->_cartesian};
1118 my $cy = CORE::cos($y);
1119 my $sy = CORE::sin($y);
1120 $ex = CORE::exp($x);
1121 my $ex_1 = $ex ? 1 / $ex : Inf();
1122 return (ref $z)->make(CORE::cos($y) * ($ex - $ex_1)/2,
1123 CORE::sin($y) * ($ex + $ex_1)/2);
1129 # Computes the hyperbolic tangent tanh(z) = sinh(z) / cosh(z).
1134 _divbyzero "tanh($z)", "cosh($z)" if ($cz == 0);
1136 return 1 if $cz == $sz;
1137 return -1 if $cz == -$sz;
1144 # Computes the hyperbolic secant sech(z) = 1 / cosh(z).
1149 _divbyzero "sech($z)", "cosh($z)" if ($cz == 0);
1156 # Computes the hyperbolic cosecant csch(z) = 1 / sinh(z).
1161 _divbyzero "csch($z)", "sinh($z)" if ($sz == 0);
1170 sub cosech { Math::Complex::csch(@_) }
1175 # Computes the hyperbolic cotangent coth(z) = cosh(z) / sinh(z).
1180 _divbyzero "coth($z)", "sinh($z)" if $sz == 0;
1182 return 1 if $cz == $sz;
1183 return -1 if $cz == -$sz;
1192 sub cotanh { Math::Complex::coth(@_) }
1197 # Computes the arc hyperbolic cosine acosh(z) = log(z + sqrt(z*z-1)).
1204 my ($re, $im) = @{$z->_cartesian};
1206 return CORE::log($re + CORE::sqrt($re*$re - 1))
1208 return cplx(0, CORE::atan2(CORE::sqrt(1 - $re*$re), $re))
1209 if CORE::abs($re) < 1;
1211 my $t = &sqrt($z * $z - 1) + $z;
1212 # Try Taylor if looking bad (this usually means that
1213 # $z was large negative, therefore the sqrt is really
1214 # close to abs(z), summing that with z...)
1215 $t = 1/(2 * $z) - 1/(8 * $z**3) + 1/(16 * $z**5) - 5/(128 * $z**7)
1218 $u->Im(-$u->Im) if $re < 0 && $im == 0;
1219 return $re < 0 ? -$u : $u;
1225 # Computes the arc hyperbolic sine asinh(z) = log(z + sqrt(z*z+1))
1230 my $t = $z + CORE::sqrt($z*$z + 1);
1231 return CORE::log($t) if $t;
1233 my $t = &sqrt($z * $z + 1) + $z;
1234 # Try Taylor if looking bad (this usually means that
1235 # $z was large negative, therefore the sqrt is really
1236 # close to abs(z), summing that with z...)
1237 $t = 1/(2 * $z) - 1/(8 * $z**3) + 1/(16 * $z**5) - 5/(128 * $z**7)
1245 # Computes the arc hyperbolic tangent atanh(z) = 1/2 log((1+z) / (1-z)).
1250 return CORE::log((1 + $z)/(1 - $z))/2 if CORE::abs($z) < 1;
1253 _divbyzero 'atanh(1)', "1 - $z" if (1 - $z == 0);
1254 _logofzero 'atanh(-1)' if (1 + $z == 0);
1255 return 0.5 * &log((1 + $z) / (1 - $z));
1261 # Computes the hyperbolic arc secant asech(z) = acosh(1 / z).
1265 _divbyzero 'asech(0)', "$z" if ($z == 0);
1266 return acosh(1 / $z);
1272 # Computes the hyperbolic arc cosecant acsch(z) = asinh(1 / z).
1276 _divbyzero 'acsch(0)', $z if ($z == 0);
1277 return asinh(1 / $z);
1283 # Alias for acosh().
1285 sub acosech { Math::Complex::acsch(@_) }
1290 # Computes the arc hyperbolic cotangent acoth(z) = 1/2 log((1+z) / (z-1)).
1294 _divbyzero 'acoth(0)' if ($z == 0);
1296 return CORE::log(($z + 1)/($z - 1))/2 if CORE::abs($z) > 1;
1299 _divbyzero 'acoth(1)', "$z - 1" if ($z - 1 == 0);
1300 _logofzero 'acoth(-1)', "1 + $z" if (1 + $z == 0);
1301 return &log((1 + $z) / ($z - 1)) / 2;
1309 sub acotanh { Math::Complex::acoth(@_) }
1314 # Compute atan(z1/z2), minding the right quadrant.
1317 my ($z1, $z2, $inverted) = @_;
1318 my ($re1, $im1, $re2, $im2);
1320 ($re1, $im1) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
1321 ($re2, $im2) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
1323 ($re1, $im1) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
1324 ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
1327 # In MATLAB the imaginary parts are ignored.
1328 # warn "atan2: Imaginary parts ignored";
1329 # http://documents.wolfram.com/mathematica/functions/ArcTan
1330 # NOTE: Mathematica ArcTan[x,y] while atan2(y,x)
1331 my $s = $z1 * $z1 + $z2 * $z2;
1332 _divbyzero("atan2") if $s == 0;
1334 my $r = $z2 + $z1 * $i;
1335 return -$i * &log($r / &sqrt( $s ));
1337 return CORE::atan2($re1, $re2);
1344 # Set (get if no argument) the display format for all complex numbers that
1345 # don't happen to have overridden it via ->display_format
1347 # When called as an object method, this actually sets the display format for
1348 # the current object.
1350 # Valid object formats are 'c' and 'p' for cartesian and polar. The first
1351 # letter is used actually, so the type can be fully spelled out for clarity.
1353 sub display_format {
1355 my %display_format = %DISPLAY_FORMAT;
1357 if (ref $self) { # Called as an object method
1358 if (exists $self->{display_format}) {
1359 my %obj = %{$self->{display_format}};
1360 @display_format{keys %obj} = values %obj;
1364 $display_format{style} = shift;
1367 @display_format{keys %new} = values %new;
1370 if (ref $self) { # Called as an object method
1371 $self->{display_format} = { %display_format };
1374 %{$self->{display_format}} :
1375 $self->{display_format}->{style};
1378 # Called as a class method
1379 %DISPLAY_FORMAT = %display_format;
1383 $DISPLAY_FORMAT{style};
1389 # Show nicely formatted complex number under its cartesian or polar form,
1390 # depending on the current display format:
1392 # . If a specific display format has been recorded for this object, use it.
1393 # . Otherwise, use the generic current default for all complex numbers,
1394 # which is a package global variable.
1399 my $style = $z->display_format;
1401 $style = $DISPLAY_FORMAT{style} unless defined $style;
1403 return $z->_stringify_polar if $style =~ /^p/i;
1404 return $z->_stringify_cartesian;
1408 # ->_stringify_cartesian
1410 # Stringify as a cartesian representation 'a+bi'.
1412 sub _stringify_cartesian {
1414 my ($x, $y) = @{$z->_cartesian};
1417 my %format = $z->display_format;
1418 my $format = $format{format};
1421 if ($x =~ /^NaN[QS]?$/i) {
1424 if ($x =~ /^-?\Q$Inf\E$/oi) {
1427 $re = defined $format ? sprintf($format, $x) : $x;
1435 if ($y =~ /^(NaN[QS]?)$/i) {
1438 if ($y =~ /^-?\Q$Inf\E$/oi) {
1443 sprintf($format, $y) :
1444 ($y == 1 ? "" : ($y == -1 ? "-" : $y));
1457 } elsif ($y > 0 || $im =~ /^NaN[QS]?i$/i) {
1458 $str .= "+" if defined $re;
1461 } elsif (!defined $re) {
1470 # ->_stringify_polar
1472 # Stringify as a polar representation '[r,t]'.
1474 sub _stringify_polar {
1476 my ($r, $t) = @{$z->_polar};
1479 my %format = $z->display_format;
1480 my $format = $format{format};
1482 if ($t =~ /^NaN[QS]?$/i || $t =~ /^-?\Q$Inf\E$/oi) {
1484 } elsif ($t == pi) {
1486 } elsif ($r == 0 || $t == 0) {
1487 $theta = defined $format ? sprintf($format, $t) : $t;
1490 return "[$r,$theta]" if defined $theta;
1493 # Try to identify pi/n and friends.
1496 $t -= int(CORE::abs($t) / pi2) * pi2;
1498 if ($format{polar_pretty_print} && $t) {
1502 if ($b =~ /^-?\d+$/) {
1503 $b = $b < 0 ? "-" : "" if CORE::abs($b) == 1;
1504 $theta = "${b}pi/$a";
1510 if (defined $format) {
1511 $r = sprintf($format, $r);
1512 $theta = sprintf($format, $theta) unless defined $theta;
1514 $theta = $t unless defined $theta;
1517 return "[$r,$theta]";
1531 Math::Complex - complex numbers and associated mathematical functions
1537 $z = Math::Complex->make(5, 6);
1539 $j = cplxe(1, 2*pi/3);
1543 This package lets you create and manipulate complex numbers. By default,
1544 I<Perl> limits itself to real numbers, but an extra C<use> statement brings
1545 full complex support, along with a full set of mathematical functions
1546 typically associated with and/or extended to complex numbers.
1548 If you wonder what complex numbers are, they were invented to be able to solve
1549 the following equation:
1553 and by definition, the solution is noted I<i> (engineers use I<j> instead since
1554 I<i> usually denotes an intensity, but the name does not matter). The number
1555 I<i> is a pure I<imaginary> number.
1557 The arithmetics with pure imaginary numbers works just like you would expect
1558 it with real numbers... you just have to remember that
1564 5i + 7i = i * (5 + 7) = 12i
1565 4i - 3i = i * (4 - 3) = i
1570 Complex numbers are numbers that have both a real part and an imaginary
1571 part, and are usually noted:
1575 where C<a> is the I<real> part and C<b> is the I<imaginary> part. The
1576 arithmetic with complex numbers is straightforward. You have to
1577 keep track of the real and the imaginary parts, but otherwise the
1578 rules used for real numbers just apply:
1580 (4 + 3i) + (5 - 2i) = (4 + 5) + i(3 - 2) = 9 + i
1581 (2 + i) * (4 - i) = 2*4 + 4i -2i -i*i = 8 + 2i + 1 = 9 + 2i
1583 A graphical representation of complex numbers is possible in a plane
1584 (also called the I<complex plane>, but it's really a 2D plane).
1589 is the point whose coordinates are (a, b). Actually, it would
1590 be the vector originating from (0, 0) to (a, b). It follows that the addition
1591 of two complex numbers is a vectorial addition.
1593 Since there is a bijection between a point in the 2D plane and a complex
1594 number (i.e. the mapping is unique and reciprocal), a complex number
1595 can also be uniquely identified with polar coordinates:
1599 where C<rho> is the distance to the origin, and C<theta> the angle between
1600 the vector and the I<x> axis. There is a notation for this using the
1601 exponential form, which is:
1603 rho * exp(i * theta)
1605 where I<i> is the famous imaginary number introduced above. Conversion
1606 between this form and the cartesian form C<a + bi> is immediate:
1608 a = rho * cos(theta)
1609 b = rho * sin(theta)
1611 which is also expressed by this formula:
1613 z = rho * exp(i * theta) = rho * (cos theta + i * sin theta)
1615 In other words, it's the projection of the vector onto the I<x> and I<y>
1616 axes. Mathematicians call I<rho> the I<norm> or I<modulus> and I<theta>
1617 the I<argument> of the complex number. The I<norm> of C<z> is
1618 marked here as C<abs(z)>.
1620 The polar notation (also known as the trigonometric representation) is
1621 much more handy for performing multiplications and divisions of
1622 complex numbers, whilst the cartesian notation is better suited for
1623 additions and subtractions. Real numbers are on the I<x> axis, and
1624 therefore I<y> or I<theta> is zero or I<pi>.
1626 All the common operations that can be performed on a real number have
1627 been defined to work on complex numbers as well, and are merely
1628 I<extensions> of the operations defined on real numbers. This means
1629 they keep their natural meaning when there is no imaginary part, provided
1630 the number is within their definition set.
1632 For instance, the C<sqrt> routine which computes the square root of
1633 its argument is only defined for non-negative real numbers and yields a
1634 non-negative real number (it is an application from B<R+> to B<R+>).
1635 If we allow it to return a complex number, then it can be extended to
1636 negative real numbers to become an application from B<R> to B<C> (the
1637 set of complex numbers):
1639 sqrt(x) = x >= 0 ? sqrt(x) : sqrt(-x)*i
1641 It can also be extended to be an application from B<C> to B<C>,
1642 whilst its restriction to B<R> behaves as defined above by using
1643 the following definition:
1645 sqrt(z = [r,t]) = sqrt(r) * exp(i * t/2)
1647 Indeed, a negative real number can be noted C<[x,pi]> (the modulus
1648 I<x> is always non-negative, so C<[x,pi]> is really C<-x>, a negative
1649 number) and the above definition states that
1651 sqrt([x,pi]) = sqrt(x) * exp(i*pi/2) = [sqrt(x),pi/2] = sqrt(x)*i
1653 which is exactly what we had defined for negative real numbers above.
1654 The C<sqrt> returns only one of the solutions: if you want the both,
1655 use the C<root> function.
1657 All the common mathematical functions defined on real numbers that
1658 are extended to complex numbers share that same property of working
1659 I<as usual> when the imaginary part is zero (otherwise, it would not
1660 be called an extension, would it?).
1662 A I<new> operation possible on a complex number that is
1663 the identity for real numbers is called the I<conjugate>, and is noted
1664 with a horizontal bar above the number, or C<~z> here.
1671 z * ~z = (a + bi) * (a - bi) = a*a + b*b
1673 We saw that the norm of C<z> was noted C<abs(z)> and was defined as the
1674 distance to the origin, also known as:
1676 rho = abs(z) = sqrt(a*a + b*b)
1680 z * ~z = abs(z) ** 2
1682 If z is a pure real number (i.e. C<b == 0>), then the above yields:
1686 which is true (C<abs> has the regular meaning for real number, i.e. stands
1687 for the absolute value). This example explains why the norm of C<z> is
1688 noted C<abs(z)>: it extends the C<abs> function to complex numbers, yet
1689 is the regular C<abs> we know when the complex number actually has no
1690 imaginary part... This justifies I<a posteriori> our use of the C<abs>
1691 notation for the norm.
1695 Given the following notations:
1697 z1 = a + bi = r1 * exp(i * t1)
1698 z2 = c + di = r2 * exp(i * t2)
1699 z = <any complex or real number>
1701 the following (overloaded) operations are supported on complex numbers:
1703 z1 + z2 = (a + c) + i(b + d)
1704 z1 - z2 = (a - c) + i(b - d)
1705 z1 * z2 = (r1 * r2) * exp(i * (t1 + t2))
1706 z1 / z2 = (r1 / r2) * exp(i * (t1 - t2))
1707 z1 ** z2 = exp(z2 * log z1)
1709 abs(z) = r1 = sqrt(a*a + b*b)
1710 sqrt(z) = sqrt(r1) * exp(i * t/2)
1711 exp(z) = exp(a) * exp(i * b)
1712 log(z) = log(r1) + i*t
1713 sin(z) = 1/2i (exp(i * z1) - exp(-i * z))
1714 cos(z) = 1/2 (exp(i * z1) + exp(-i * z))
1715 atan2(y, x) = atan(y / x) # Minding the right quadrant, note the order.
1717 The definition used for complex arguments of atan2() is
1719 -i log((x + iy)/sqrt(x*x+y*y))
1721 Note that atan2(0, 0) is not well-defined.
1723 The following extra operations are supported on both real and complex
1731 cbrt(z) = z ** (1/3)
1732 log10(z) = log(z) / log(10)
1733 logn(z, n) = log(z) / log(n)
1735 tan(z) = sin(z) / cos(z)
1741 asin(z) = -i * log(i*z + sqrt(1-z*z))
1742 acos(z) = -i * log(z + i*sqrt(1-z*z))
1743 atan(z) = i/2 * log((i+z) / (i-z))
1745 acsc(z) = asin(1 / z)
1746 asec(z) = acos(1 / z)
1747 acot(z) = atan(1 / z) = -i/2 * log((i+z) / (z-i))
1749 sinh(z) = 1/2 (exp(z) - exp(-z))
1750 cosh(z) = 1/2 (exp(z) + exp(-z))
1751 tanh(z) = sinh(z) / cosh(z) = (exp(z) - exp(-z)) / (exp(z) + exp(-z))
1753 csch(z) = 1 / sinh(z)
1754 sech(z) = 1 / cosh(z)
1755 coth(z) = 1 / tanh(z)
1757 asinh(z) = log(z + sqrt(z*z+1))
1758 acosh(z) = log(z + sqrt(z*z-1))
1759 atanh(z) = 1/2 * log((1+z) / (1-z))
1761 acsch(z) = asinh(1 / z)
1762 asech(z) = acosh(1 / z)
1763 acoth(z) = atanh(1 / z) = 1/2 * log((1+z) / (z-1))
1765 I<arg>, I<abs>, I<log>, I<csc>, I<cot>, I<acsc>, I<acot>, I<csch>,
1766 I<coth>, I<acosech>, I<acotanh>, have aliases I<rho>, I<theta>, I<ln>,
1767 I<cosec>, I<cotan>, I<acosec>, I<acotan>, I<cosech>, I<cotanh>,
1768 I<acosech>, I<acotanh>, respectively. C<Re>, C<Im>, C<arg>, C<abs>,
1769 C<rho>, and C<theta> can be used also as mutators. The C<cbrt>
1770 returns only one of the solutions: if you want all three, use the
1773 The I<root> function is available to compute all the I<n>
1774 roots of some complex, where I<n> is a strictly positive integer.
1775 There are exactly I<n> such roots, returned as a list. Getting the
1776 number mathematicians call C<j> such that:
1780 is a simple matter of writing:
1782 $j = ((root(1, 3))[1];
1784 The I<k>th root for C<z = [r,t]> is given by:
1786 (root(z, n))[k] = r**(1/n) * exp(i * (t + 2*k*pi)/n)
1788 You can return the I<k>th root directly by C<root(z, n, k)>,
1789 indexing starting from I<zero> and ending at I<n - 1>.
1791 The I<spaceship> numeric comparison operator, E<lt>=E<gt>, is also
1792 defined. In order to ensure its restriction to real numbers is conform
1793 to what you would expect, the comparison is run on the real part of
1794 the complex number first, and imaginary parts are compared only when
1795 the real parts match.
1799 To create a complex number, use either:
1801 $z = Math::Complex->make(3, 4);
1804 if you know the cartesian form of the number, or
1808 if you like. To create a number using the polar form, use either:
1810 $z = Math::Complex->emake(5, pi/3);
1811 $x = cplxe(5, pi/3);
1813 instead. The first argument is the modulus, the second is the angle
1814 (in radians, the full circle is 2*pi). (Mnemonic: C<e> is used as a
1815 notation for complex numbers in the polar form).
1817 It is possible to write:
1819 $x = cplxe(-3, pi/4);
1821 but that will be silently converted into C<[3,-3pi/4]>, since the
1822 modulus must be non-negative (it represents the distance to the origin
1823 in the complex plane).
1825 It is also possible to have a complex number as either argument of the
1826 C<make>, C<emake>, C<cplx>, and C<cplxe>: the appropriate component of
1827 the argument will be used.
1832 The C<new>, C<make>, C<emake>, C<cplx>, and C<cplxe> will also
1833 understand a single (string) argument of the forms
1841 in which case the appropriate cartesian and exponential components
1842 will be parsed from the string and used to create new complex numbers.
1843 The imaginary component and the theta, respectively, will default to zero.
1845 The C<new>, C<make>, C<emake>, C<cplx>, and C<cplxe> will also
1846 understand the case of no arguments: this means plain zero or (0, 0).
1850 When printed, a complex number is usually shown under its cartesian
1851 style I<a+bi>, but there are legitimate cases where the polar style
1852 I<[r,t]> is more appropriate. The process of converting the complex
1853 number into a string that can be displayed is known as I<stringification>.
1855 By calling the class method C<Math::Complex::display_format> and
1856 supplying either C<"polar"> or C<"cartesian"> as an argument, you
1857 override the default display style, which is C<"cartesian">. Not
1858 supplying any argument returns the current settings.
1860 This default can be overridden on a per-number basis by calling the
1861 C<display_format> method instead. As before, not supplying any argument
1862 returns the current display style for this number. Otherwise whatever you
1863 specify will be the new display style for I<this> particular number.
1869 Math::Complex::display_format('polar');
1870 $j = (root(1, 3))[1];
1871 print "j = $j\n"; # Prints "j = [1,2pi/3]"
1872 $j->display_format('cartesian');
1873 print "j = $j\n"; # Prints "j = -0.5+0.866025403784439i"
1875 The polar style attempts to emphasize arguments like I<k*pi/n>
1876 (where I<n> is a positive integer and I<k> an integer within [-9, +9]),
1877 this is called I<polar pretty-printing>.
1879 For the reverse of stringifying, see the C<make> and C<emake>.
1881 =head2 CHANGED IN PERL 5.6
1883 The C<display_format> class method and the corresponding
1884 C<display_format> object method can now be called using
1885 a parameter hash instead of just a one parameter.
1887 The old display format style, which can have values C<"cartesian"> or
1888 C<"polar">, can be changed using the C<"style"> parameter.
1890 $j->display_format(style => "polar");
1892 The one parameter calling convention also still works.
1894 $j->display_format("polar");
1896 There are two new display parameters.
1898 The first one is C<"format">, which is a sprintf()-style format string
1899 to be used for both numeric parts of the complex number(s). The is
1900 somewhat system-dependent but most often it corresponds to C<"%.15g">.
1901 You can revert to the default by setting the C<format> to C<undef>.
1903 # the $j from the above example
1905 $j->display_format('format' => '%.5f');
1906 print "j = $j\n"; # Prints "j = -0.50000+0.86603i"
1907 $j->display_format('format' => undef);
1908 print "j = $j\n"; # Prints "j = -0.5+0.86603i"
1910 Notice that this affects also the return values of the
1911 C<display_format> methods: in list context the whole parameter hash
1912 will be returned, as opposed to only the style parameter value.
1913 This is a potential incompatibility with earlier versions if you
1914 have been calling the C<display_format> method in list context.
1916 The second new display parameter is C<"polar_pretty_print">, which can
1917 be set to true or false, the default being true. See the previous
1918 section for what this means.
1922 Thanks to overloading, the handling of arithmetics with complex numbers
1923 is simple and almost transparent.
1925 Here are some examples:
1929 $j = cplxe(1, 2*pi/3); # $j ** 3 == 1
1930 print "j = $j, j**3 = ", $j ** 3, "\n";
1931 print "1 + j + j**2 = ", 1 + $j + $j**2, "\n";
1933 $z = -16 + 0*i; # Force it to be a complex
1934 print "sqrt($z) = ", sqrt($z), "\n";
1936 $k = exp(i * 2*pi/3);
1937 print "$j - $k = ", $j - $k, "\n";
1939 $z->Re(3); # Re, Im, arg, abs,
1940 $j->arg(2); # (the last two aka rho, theta)
1941 # can be used also as mutators.
1947 The constant C<pi> and some handy multiples of it (pi2, pi4,
1948 and pip2 (pi/2) and pip4 (pi/4)) are also available if separately
1951 use Math::Complex ':pi';
1952 $third_of_circle = pi2 / 3;
1956 The floating point infinity can be exported as a subroutine Inf():
1958 use Math::Complex qw(Inf sinh);
1959 my $AlsoInf = Inf() + 42;
1960 my $AnotherInf = sinh(1e42);
1961 print "$AlsoInf is $AnotherInf\n" if $AlsoInf == $AnotherInf;
1963 Note that the stringified form of infinity varies between platforms:
1964 it can be for example any of
1971 or it can be something else.
1973 Also note that in some platforms trying to use the infinity in
1974 arithmetic operations may result in Perl crashing because using
1975 an infinity causes SIGFPE or its moral equivalent to be sent.
1976 The way to ignore this is
1978 local $SIG{FPE} = sub { };
1980 =head1 ERRORS DUE TO DIVISION BY ZERO OR LOGARITHM OF ZERO
1982 The division (/) and the following functions
1988 atanh asech acsch acoth
1990 cannot be computed for all arguments because that would mean dividing
1991 by zero or taking logarithm of zero. These situations cause fatal
1992 runtime errors looking like this
1994 cot(0): Division by zero.
1995 (Because in the definition of cot(0), the divisor sin(0) is 0)
2000 atanh(-1): Logarithm of zero.
2003 For the C<csc>, C<cot>, C<asec>, C<acsc>, C<acot>, C<csch>, C<coth>,
2004 C<asech>, C<acsch>, the argument cannot be C<0> (zero). For the
2005 logarithmic functions and the C<atanh>, C<acoth>, the argument cannot
2006 be C<1> (one). For the C<atanh>, C<acoth>, the argument cannot be
2007 C<-1> (minus one). For the C<atan>, C<acot>, the argument cannot be
2008 C<i> (the imaginary unit). For the C<atan>, C<acoth>, the argument
2009 cannot be C<-i> (the negative imaginary unit). For the C<tan>,
2010 C<sec>, C<tanh>, the argument cannot be I<pi/2 + k * pi>, where I<k>
2011 is any integer. atan2(0, 0) is undefined, and if the complex arguments
2012 are used for atan2(), a division by zero will happen if z1**2+z2**2 == 0.
2014 Note that because we are operating on approximations of real numbers,
2015 these errors can happen when merely `too close' to the singularities
2018 =head1 ERRORS DUE TO INDIGESTIBLE ARGUMENTS
2020 The C<make> and C<emake> accept both real and complex arguments.
2021 When they cannot recognize the arguments they will die with error
2022 messages like the following
2024 Math::Complex::make: Cannot take real part of ...
2025 Math::Complex::make: Cannot take real part of ...
2026 Math::Complex::emake: Cannot take rho of ...
2027 Math::Complex::emake: Cannot take theta of ...
2031 Saying C<use Math::Complex;> exports many mathematical routines in the
2032 caller environment and even overrides some (C<sqrt>, C<log>, C<atan2>).
2033 This is construed as a feature by the Authors, actually... ;-)
2035 All routines expect to be given real or complex numbers. Don't attempt to
2036 use BigFloat, since Perl has currently no rule to disambiguate a '+'
2037 operation (for instance) between two overloaded entities.
2039 In Cray UNICOS there is some strange numerical instability that results
2040 in root(), cos(), sin(), cosh(), sinh(), losing accuracy fast. Beware.
2041 The bug may be in UNICOS math libs, in UNICOS C compiler, in Math::Complex.
2042 Whatever it is, it does not manifest itself anywhere else where Perl runs.
2050 Daniel S. Lewart <F<lewart!at!uiuc.edu>>
2051 Jarkko Hietaniemi <F<jhi!at!iki.fi>>
2052 Raphael Manfredi <F<Raphael_Manfredi!at!pobox.com>>
2056 This library is free software; you can redistribute it and/or modify
2057 it under the same terms as Perl itself.