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 # AFAICT the 10, 12, and 16-byte long doubles
22 # all have the same maximum.
23 10 => '1.1897314953572317650857593266280070162E+4932',
24 12 => '1.1897314953572317650857593266280070162E+4932',
25 16 => '1.1897314953572317650857593266280070162E+4932',
27 my $nvsize = $Config{nvsize} ||
28 ($Config{uselongdouble} && $Config{longdblsize}) ||
30 die "Math::Complex: Could not figure out nvsize\n"
31 unless defined $nvsize;
32 die "Math::Complex: Cannot not figure out max nv (nvsize = $nvsize)\n"
33 unless defined $DBL_MAX{$nvsize};
34 my $DBL_MAX = eval $DBL_MAX{$nvsize};
35 die "Math::Complex: Could not figure out max nv (nvsize = $nvsize)\n"
36 unless defined $DBL_MAX;
37 my $BIGGER_THAN_THIS = 1e30; # Must find something bigger than this.
38 if ($^O eq 'unicosmk') {
42 # We do want an arithmetic overflow, Inf INF inf Infinity.
44 'exp(99999)', # Enough even with 128-bit long doubles.
53 local $SIG{FPE} = { };
55 my $i = eval "$t+1.0";
56 if (defined $i && $i > $BIGGER_THAN_THIS) {
61 $Inf = $DBL_MAX unless defined $Inf; # Oh well, close enough.
62 die "Math::Complex: Could not get Infinity"
63 unless $Inf > $BIGGER_THAN_THIS;
65 # print "# On this machine, Inf = '$Inf'\n";
73 # Regular expression for floating point numbers.
74 # These days we could use Scalar::Util::lln(), I guess.
75 my $gre = qr'\s*([\+\-]?(?:(?:(?:\d+(?:_\d+)*(?:\.\d*(?:_\d+)*)?|\.\d+(?:_\d+)*)(?:[eE][\+\-]?\d+(?:_\d+)*)?))|inf)'i;
84 csc cosec sec cot cotan
86 acsc acosec asec acot acotan
88 csch cosech sech coth cotanh
90 acsch acosech asech acoth acotanh
102 my @pi = qw(pi pi2 pi4 pip2 pip4 Inf);
118 '<=>' => \&_spaceship,
129 '""' => \&_stringify;
135 my %DISPLAY_FORMAT = ('style' => 'cartesian',
136 'polar_pretty_print' => 1);
137 my $eps = 1e-14; # Epsilon
140 # Object attributes (internal):
141 # cartesian [real, imaginary] -- cartesian form
142 # polar [rho, theta] -- polar form
143 # c_dirty cartesian form not up-to-date
144 # p_dirty polar form not up-to-date
145 # display display format (package's global when not set)
148 # Die on bad *make() arguments.
151 die "@{[(caller(1))[3]]}: Cannot take $_[0] of '$_[1]'.\n";
158 if ($arg =~ /^$gre$/) {
160 } elsif ($arg =~ /^(?:$gre)?$gre\s*i\s*$/) {
161 ($p, $q) = ($1 || 0, $2);
162 } elsif ($arg =~ /^\s*\(\s*$gre\s*(?:,\s*$gre\s*)?\)\s*$/) {
163 ($p, $q) = ($1, $2 || 0);
168 $p =~ s/^(-?)inf$/"${1}9**9**9"/e;
170 $q =~ s/^(-?)inf$/"${1}9**9**9"/e;
180 if ($arg =~ /^\s*\[\s*$gre\s*(?:,\s*$gre\s*)?\]\s*$/) {
181 ($p, $q) = ($1, $2 || 0);
182 } elsif ($arg =~ m!^\s*\[\s*$gre\s*(?:,\s*([-+]?\d*\s*)?pi(?:/\s*(\d+))?\s*)?\]\s*$!) {
183 ($p, $q) = ($1, ($2 eq '-' ? -1 : ($2 || 1)) * pi() / ($3 || 1));
184 } elsif ($arg =~ /^\s*\[\s*$gre\s*\]\s*$/) {
186 } elsif ($arg =~ /^\s*$gre\s*$/) {
193 $p =~ s/^(-?)inf$/"${1}9**9**9"/e;
194 $q =~ s/^(-?)inf$/"${1}9**9**9"/e;
203 # Create a new complex number (cartesian form)
206 my $self = bless {}, shift;
211 return (ref $self)->emake($_[0])
212 if ($_[0] =~ /^\s*\[/);
213 ($re, $im) = _make($_[0]);
218 _cannot_make("real part", $re) unless $re =~ /^$gre$/;
221 _cannot_make("imaginary part", $im) unless $im =~ /^$gre$/;
222 $self->_set_cartesian([$re, $im ]);
223 $self->display_format('cartesian');
231 # Create a new complex number (exponential form)
234 my $self = bless {}, shift;
237 ($rho, $theta) = (0, 0);
239 return (ref $self)->make($_[0])
240 if ($_[0] =~ /^\s*\(/ || $_[0] =~ /i\s*$/);
241 ($rho, $theta) = _emake($_[0]);
245 if (defined $rho && defined $theta) {
248 $theta = ($theta <= 0) ? $theta + pi() : $theta - pi();
252 _cannot_make("rho", $rho) unless $rho =~ /^$gre$/;
255 _cannot_make("theta", $theta) unless $theta =~ /^$gre$/;
256 $self->_set_polar([$rho, $theta]);
257 $self->display_format('polar');
262 sub new { &make } # For backward compatibility only.
267 # Creates a complex number from a (re, im) tuple.
268 # This avoids the burden of writing Math::Complex->make(re, im).
271 return __PACKAGE__->make(@_);
277 # Creates a complex number from a (rho, theta) tuple.
278 # This avoids the burden of writing Math::Complex->emake(rho, theta).
281 return __PACKAGE__->emake(@_);
287 # The number defined as pi = 180 degrees
289 sub pi () { 4 * CORE::atan2(1, 1) }
296 sub pi2 () { 2 * pi }
301 # The full circle twice.
303 sub pi4 () { 4 * pi }
310 sub pip2 () { pi / 2 }
317 sub pip4 () { pi / 4 }
324 sub _uplog10 () { 1 / CORE::log(10) }
329 # The number defined as i*i = -1;
334 $i->{'cartesian'} = [0, 1];
335 $i->{'polar'} = [1, pip2];
346 sub _ip2 () { i / 2 }
349 # Attribute access/set routines
352 sub _cartesian {$_[0]->{c_dirty} ?
353 $_[0]->_update_cartesian : $_[0]->{'cartesian'}}
354 sub _polar {$_[0]->{p_dirty} ?
355 $_[0]->_update_polar : $_[0]->{'polar'}}
357 sub _set_cartesian { $_[0]->{p_dirty}++; $_[0]->{c_dirty} = 0;
358 $_[0]->{'cartesian'} = $_[1] }
359 sub _set_polar { $_[0]->{c_dirty}++; $_[0]->{p_dirty} = 0;
360 $_[0]->{'polar'} = $_[1] }
363 # ->_update_cartesian
365 # Recompute and return the cartesian form, given accurate polar form.
367 sub _update_cartesian {
369 my ($r, $t) = @{$self->{'polar'}};
370 $self->{c_dirty} = 0;
371 return $self->{'cartesian'} = [$r * CORE::cos($t), $r * CORE::sin($t)];
378 # Recompute and return the polar form, given accurate cartesian form.
382 my ($x, $y) = @{$self->{'cartesian'}};
383 $self->{p_dirty} = 0;
384 return $self->{'polar'} = [0, 0] if $x == 0 && $y == 0;
385 return $self->{'polar'} = [CORE::sqrt($x*$x + $y*$y),
386 CORE::atan2($y, $x)];
395 my ($z1, $z2, $regular) = @_;
396 my ($re1, $im1) = @{$z1->_cartesian};
397 $z2 = cplx($z2) unless ref $z2;
398 my ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
399 unless (defined $regular) {
400 $z1->_set_cartesian([$re1 + $re2, $im1 + $im2]);
403 return (ref $z1)->make($re1 + $re2, $im1 + $im2);
412 my ($z1, $z2, $inverted) = @_;
413 my ($re1, $im1) = @{$z1->_cartesian};
414 $z2 = cplx($z2) unless ref $z2;
415 my ($re2, $im2) = @{$z2->_cartesian};
416 unless (defined $inverted) {
417 $z1->_set_cartesian([$re1 - $re2, $im1 - $im2]);
421 (ref $z1)->make($re2 - $re1, $im2 - $im1) :
422 (ref $z1)->make($re1 - $re2, $im1 - $im2);
432 my ($z1, $z2, $regular) = @_;
433 if ($z1->{p_dirty} == 0 and ref $z2 and $z2->{p_dirty} == 0) {
434 # if both polar better use polar to avoid rounding errors
435 my ($r1, $t1) = @{$z1->_polar};
436 my ($r2, $t2) = @{$z2->_polar};
438 if ($t > pi()) { $t -= pi2 }
439 elsif ($t <= -pi()) { $t += pi2 }
440 unless (defined $regular) {
441 $z1->_set_polar([$r1 * $r2, $t]);
444 return (ref $z1)->emake($r1 * $r2, $t);
446 my ($x1, $y1) = @{$z1->_cartesian};
448 my ($x2, $y2) = @{$z2->_cartesian};
449 return (ref $z1)->make($x1*$x2-$y1*$y2, $x1*$y2+$y1*$x2);
451 return (ref $z1)->make($x1*$z2, $y1*$z2);
459 # Die on division by zero.
462 my $mess = "$_[0]: Division by zero.\n";
465 $mess .= "(Because in the definition of $_[0], the divisor ";
466 $mess .= "$_[1] " unless ("$_[1]" eq '0');
472 $mess .= "Died at $up[1] line $up[2].\n";
483 my ($z1, $z2, $inverted) = @_;
484 if ($z1->{p_dirty} == 0 and ref $z2 and $z2->{p_dirty} == 0) {
485 # if both polar better use polar to avoid rounding errors
486 my ($r1, $t1) = @{$z1->_polar};
487 my ($r2, $t2) = @{$z2->_polar};
490 _divbyzero "$z2/0" if ($r1 == 0);
492 if ($t > pi()) { $t -= pi2 }
493 elsif ($t <= -pi()) { $t += pi2 }
494 return (ref $z1)->emake($r2 / $r1, $t);
496 _divbyzero "$z1/0" if ($r2 == 0);
498 if ($t > pi()) { $t -= pi2 }
499 elsif ($t <= -pi()) { $t += pi2 }
500 return (ref $z1)->emake($r1 / $r2, $t);
505 ($x2, $y2) = @{$z1->_cartesian};
506 $d = $x2*$x2 + $y2*$y2;
507 _divbyzero "$z2/0" if $d == 0;
508 return (ref $z1)->make(($x2*$z2)/$d, -($y2*$z2)/$d);
510 my ($x1, $y1) = @{$z1->_cartesian};
512 ($x2, $y2) = @{$z2->_cartesian};
513 $d = $x2*$x2 + $y2*$y2;
514 _divbyzero "$z1/0" if $d == 0;
515 my $u = ($x1*$x2 + $y1*$y2)/$d;
516 my $v = ($y1*$x2 - $x1*$y2)/$d;
517 return (ref $z1)->make($u, $v);
519 _divbyzero "$z1/0" if $z2 == 0;
520 return (ref $z1)->make($x1/$z2, $y1/$z2);
529 # Computes z1**z2 = exp(z2 * log z1)).
532 my ($z1, $z2, $inverted) = @_;
534 return 1 if $z1 == 0 || $z2 == 1;
535 return 0 if $z2 == 0 && Re($z1) > 0;
537 return 1 if $z2 == 0 || $z1 == 1;
538 return 0 if $z1 == 0 && Re($z2) > 0;
540 my $w = $inverted ? &exp($z1 * &log($z2))
541 : &exp($z2 * &log($z1));
542 # If both arguments cartesian, return cartesian, else polar.
543 return $z1->{c_dirty} == 0 &&
544 (not ref $z2 or $z2->{c_dirty} == 0) ?
545 cplx(@{$w->_cartesian}) : $w;
551 # Computes z1 <=> z2.
552 # Sorts on the real part first, then on the imaginary part. Thus 2-4i < 3+8i.
555 my ($z1, $z2, $inverted) = @_;
556 my ($re1, $im1) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
557 my ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
558 my $sgn = $inverted ? -1 : 1;
559 return $sgn * ($re1 <=> $re2) if $re1 != $re2;
560 return $sgn * ($im1 <=> $im2);
568 # (Required in addition to _spaceship() because of NaNs.)
570 my ($z1, $z2, $inverted) = @_;
571 my ($re1, $im1) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
572 my ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
573 return $re1 == $re2 && $im1 == $im2 ? 1 : 0;
584 my ($r, $t) = @{$z->_polar};
585 $t = ($t <= 0) ? $t + pi : $t - pi;
586 return (ref $z)->emake($r, $t);
588 my ($re, $im) = @{$z->_cartesian};
589 return (ref $z)->make(-$re, -$im);
595 # Compute complex's _conjugate.
600 my ($r, $t) = @{$z->_polar};
601 return (ref $z)->emake($r, -$t);
603 my ($re, $im) = @{$z->_cartesian};
604 return (ref $z)->make($re, -$im);
610 # Compute or set complex's norm (rho).
618 return CORE::abs($z);
622 $z->{'polar'} = [ $rho, ${$z->_polar}[1] ];
627 return ${$z->_polar}[0];
634 if ($$theta > pi()) { $$theta -= pi2 }
635 elsif ($$theta <= -pi()) { $$theta += pi2 }
641 # Compute or set complex's argument (theta).
644 my ($z, $theta) = @_;
645 return $z unless ref $z;
646 if (defined $theta) {
648 $z->{'polar'} = [ ${$z->_polar}[0], $theta ];
652 $theta = ${$z->_polar}[1];
663 # It is quite tempting to use wantarray here so that in list context
664 # sqrt() would return the two solutions. This, however, would
667 # print "sqrt(z) = ", sqrt($z), "\n";
669 # The two values would be printed side by side without no intervening
670 # whitespace, quite confusing.
671 # Therefore if you want the two solutions use the root().
675 my ($re, $im) = ref $z ? @{$z->_cartesian} : ($z, 0);
676 return $re < 0 ? cplx(0, CORE::sqrt(-$re)) : CORE::sqrt($re)
678 my ($r, $t) = @{$z->_polar};
679 return (ref $z)->emake(CORE::sqrt($r), $t/2);
685 # Compute cbrt(z) (cubic root).
687 # Why are we not returning three values? The same answer as for sqrt().
692 -CORE::exp(CORE::log(-$z)/3) :
693 ($z > 0 ? CORE::exp(CORE::log($z)/3): 0)
695 my ($r, $t) = @{$z->_polar};
697 return (ref $z)->emake(CORE::exp(CORE::log($r)/3), $t/3);
706 my $mess = "Root '$_[0]' illegal, root rank must be positive integer.\n";
710 $mess .= "Died at $up[1] line $up[2].\n";
718 # Computes all nth root for z, returning an array whose size is n.
719 # `n' must be a positive integer.
721 # The roots are given by (for k = 0..n-1):
723 # z^(1/n) = r^(1/n) (cos ((t+2 k pi)/n) + i sin ((t+2 k pi)/n))
726 my ($z, $n, $k) = @_;
727 _rootbad($n) if ($n < 1 or int($n) != $n);
728 my ($r, $t) = ref $z ?
729 @{$z->_polar} : (CORE::abs($z), $z >= 0 ? 0 : pi);
730 my $theta_inc = pi2 / $n;
731 my $rho = $r ** (1/$n);
732 my $cartesian = ref $z && $z->{c_dirty} == 0;
735 for (my $i = 0, my $theta = $t / $n;
737 $i++, $theta += $theta_inc) {
738 my $w = cplxe($rho, $theta);
739 # Yes, $cartesian is loop invariant.
740 push @root, $cartesian ? cplx(@{$w->_cartesian}) : $w;
744 my $w = cplxe($rho, $t / $n + $k * $theta_inc);
745 return $cartesian ? cplx(@{$w->_cartesian}) : $w;
752 # Return or set Re(z).
756 return $z unless ref $z;
758 $z->{'cartesian'} = [ $Re, ${$z->_cartesian}[1] ];
762 return ${$z->_cartesian}[0];
769 # Return or set Im(z).
773 return 0 unless ref $z;
775 $z->{'cartesian'} = [ ${$z->_cartesian}[0], $Im ];
779 return ${$z->_cartesian}[1];
786 # Return or set rho(w).
789 Math::Complex::abs(@_);
795 # Return or set theta(w).
798 Math::Complex::arg(@_);
808 my ($x, $y) = @{$z->_cartesian};
809 return (ref $z)->emake(CORE::exp($x), $y);
815 # Die on logarithm of zero.
818 my $mess = "$_[0]: Logarithm of zero.\n";
821 $mess .= "(Because in the definition of $_[0], the argument ";
822 $mess .= "$_[1] " unless ($_[1] eq '0');
828 $mess .= "Died at $up[1] line $up[2].\n";
841 _logofzero("log") if $z == 0;
842 return $z > 0 ? CORE::log($z) : cplx(CORE::log(-$z), pi);
844 my ($r, $t) = @{$z->_polar};
845 _logofzero("log") if $r == 0;
846 if ($t > pi()) { $t -= pi2 }
847 elsif ($t <= -pi()) { $t += pi2 }
848 return (ref $z)->make(CORE::log($r), $t);
856 sub ln { Math::Complex::log(@_) }
865 return Math::Complex::log($_[0]) * _uplog10;
871 # Compute logn(z,n) = log(z) / log(n)
875 $z = cplx($z, 0) unless ref $z;
876 my $logn = $LOGN{$n};
877 $logn = $LOGN{$n} = CORE::log($n) unless defined $logn; # Cache log(n)
878 return &log($z) / $logn;
884 # Compute cos(z) = (exp(iz) + exp(-iz))/2.
888 return CORE::cos($z) unless ref $z;
889 my ($x, $y) = @{$z->_cartesian};
890 my $ey = CORE::exp($y);
891 my $sx = CORE::sin($x);
892 my $cx = CORE::cos($x);
893 my $ey_1 = $ey ? 1 / $ey : Inf();
894 return (ref $z)->make($cx * ($ey + $ey_1)/2,
895 $sx * ($ey_1 - $ey)/2);
901 # Compute sin(z) = (exp(iz) - exp(-iz))/2.
905 return CORE::sin($z) unless ref $z;
906 my ($x, $y) = @{$z->_cartesian};
907 my $ey = CORE::exp($y);
908 my $sx = CORE::sin($x);
909 my $cx = CORE::cos($x);
910 my $ey_1 = $ey ? 1 / $ey : Inf();
911 return (ref $z)->make($sx * ($ey + $ey_1)/2,
912 $cx * ($ey - $ey_1)/2);
918 # Compute tan(z) = sin(z) / cos(z).
923 _divbyzero "tan($z)", "cos($z)" if $cz == 0;
924 return &sin($z) / $cz;
930 # Computes the secant sec(z) = 1 / cos(z).
935 _divbyzero "sec($z)", "cos($z)" if ($cz == 0);
942 # Computes the cosecant csc(z) = 1 / sin(z).
947 _divbyzero "csc($z)", "sin($z)" if ($sz == 0);
956 sub cosec { Math::Complex::csc(@_) }
961 # Computes cot(z) = cos(z) / sin(z).
966 _divbyzero "cot($z)", "sin($z)" if ($sz == 0);
967 return &cos($z) / $sz;
975 sub cotan { Math::Complex::cot(@_) }
980 # Computes the arc cosine acos(z) = -i log(z + sqrt(z*z-1)).
984 return CORE::atan2(CORE::sqrt(1-$z*$z), $z)
985 if (! ref $z) && CORE::abs($z) <= 1;
986 $z = cplx($z, 0) unless ref $z;
987 my ($x, $y) = @{$z->_cartesian};
988 return 0 if $x == 1 && $y == 0;
989 my $t1 = CORE::sqrt(($x+1)*($x+1) + $y*$y);
990 my $t2 = CORE::sqrt(($x-1)*($x-1) + $y*$y);
991 my $alpha = ($t1 + $t2)/2;
992 my $beta = ($t1 - $t2)/2;
993 $alpha = 1 if $alpha < 1;
994 if ($beta > 1) { $beta = 1 }
995 elsif ($beta < -1) { $beta = -1 }
996 my $u = CORE::atan2(CORE::sqrt(1-$beta*$beta), $beta);
997 my $v = CORE::log($alpha + CORE::sqrt($alpha*$alpha-1));
998 $v = -$v if $y > 0 || ($y == 0 && $x < -1);
999 return (ref $z)->make($u, $v);
1005 # Computes the arc sine asin(z) = -i log(iz + sqrt(1-z*z)).
1009 return CORE::atan2($z, CORE::sqrt(1-$z*$z))
1010 if (! ref $z) && CORE::abs($z) <= 1;
1011 $z = cplx($z, 0) unless ref $z;
1012 my ($x, $y) = @{$z->_cartesian};
1013 return 0 if $x == 0 && $y == 0;
1014 my $t1 = CORE::sqrt(($x+1)*($x+1) + $y*$y);
1015 my $t2 = CORE::sqrt(($x-1)*($x-1) + $y*$y);
1016 my $alpha = ($t1 + $t2)/2;
1017 my $beta = ($t1 - $t2)/2;
1018 $alpha = 1 if $alpha < 1;
1019 if ($beta > 1) { $beta = 1 }
1020 elsif ($beta < -1) { $beta = -1 }
1021 my $u = CORE::atan2($beta, CORE::sqrt(1-$beta*$beta));
1022 my $v = -CORE::log($alpha + CORE::sqrt($alpha*$alpha-1));
1023 $v = -$v if $y > 0 || ($y == 0 && $x < -1);
1024 return (ref $z)->make($u, $v);
1030 # Computes the arc tangent atan(z) = i/2 log((i+z) / (i-z)).
1034 return CORE::atan2($z, 1) unless ref $z;
1035 my ($x, $y) = ref $z ? @{$z->_cartesian} : ($z, 0);
1036 return 0 if $x == 0 && $y == 0;
1037 _divbyzero "atan(i)" if ( $z == i);
1038 _logofzero "atan(-i)" if (-$z == i); # -i is a bad file test...
1039 my $log = &log((i + $z) / (i - $z));
1046 # Computes the arc secant asec(z) = acos(1 / z).
1050 _divbyzero "asec($z)", $z if ($z == 0);
1051 return acos(1 / $z);
1057 # Computes the arc cosecant acsc(z) = asin(1 / z).
1061 _divbyzero "acsc($z)", $z if ($z == 0);
1062 return asin(1 / $z);
1070 sub acosec { Math::Complex::acsc(@_) }
1075 # Computes the arc cotangent acot(z) = atan(1 / z)
1079 _divbyzero "acot(0)" if $z == 0;
1080 return ($z >= 0) ? CORE::atan2(1, $z) : CORE::atan2(-1, -$z)
1082 _divbyzero "acot(i)" if ($z - i == 0);
1083 _logofzero "acot(-i)" if ($z + i == 0);
1084 return atan(1 / $z);
1092 sub acotan { Math::Complex::acot(@_) }
1097 # Computes the hyperbolic cosine cosh(z) = (exp(z) + exp(-z))/2.
1103 $ex = CORE::exp($z);
1104 return $ex ? ($ex + 1/$ex)/2 : Inf();
1106 my ($x, $y) = @{$z->_cartesian};
1107 $ex = CORE::exp($x);
1108 my $ex_1 = $ex ? 1 / $ex : Inf();
1109 return (ref $z)->make(CORE::cos($y) * ($ex + $ex_1)/2,
1110 CORE::sin($y) * ($ex - $ex_1)/2);
1116 # Computes the hyperbolic sine sinh(z) = (exp(z) - exp(-z))/2.
1122 return 0 if $z == 0;
1123 $ex = CORE::exp($z);
1124 return $ex ? ($ex - 1/$ex)/2 : -Inf();
1126 my ($x, $y) = @{$z->_cartesian};
1127 my $cy = CORE::cos($y);
1128 my $sy = CORE::sin($y);
1129 $ex = CORE::exp($x);
1130 my $ex_1 = $ex ? 1 / $ex : Inf();
1131 return (ref $z)->make(CORE::cos($y) * ($ex - $ex_1)/2,
1132 CORE::sin($y) * ($ex + $ex_1)/2);
1138 # Computes the hyperbolic tangent tanh(z) = sinh(z) / cosh(z).
1143 _divbyzero "tanh($z)", "cosh($z)" if ($cz == 0);
1145 return 1 if $cz == $sz;
1146 return -1 if $cz == -$sz;
1153 # Computes the hyperbolic secant sech(z) = 1 / cosh(z).
1158 _divbyzero "sech($z)", "cosh($z)" if ($cz == 0);
1165 # Computes the hyperbolic cosecant csch(z) = 1 / sinh(z).
1170 _divbyzero "csch($z)", "sinh($z)" if ($sz == 0);
1179 sub cosech { Math::Complex::csch(@_) }
1184 # Computes the hyperbolic cotangent coth(z) = cosh(z) / sinh(z).
1189 _divbyzero "coth($z)", "sinh($z)" if $sz == 0;
1191 return 1 if $cz == $sz;
1192 return -1 if $cz == -$sz;
1201 sub cotanh { Math::Complex::coth(@_) }
1206 # Computes the arc hyperbolic cosine acosh(z) = log(z + sqrt(z*z-1)).
1213 my ($re, $im) = @{$z->_cartesian};
1215 return CORE::log($re + CORE::sqrt($re*$re - 1))
1217 return cplx(0, CORE::atan2(CORE::sqrt(1 - $re*$re), $re))
1218 if CORE::abs($re) < 1;
1220 my $t = &sqrt($z * $z - 1) + $z;
1221 # Try Taylor if looking bad (this usually means that
1222 # $z was large negative, therefore the sqrt is really
1223 # close to abs(z), summing that with z...)
1224 $t = 1/(2 * $z) - 1/(8 * $z**3) + 1/(16 * $z**5) - 5/(128 * $z**7)
1227 $u->Im(-$u->Im) if $re < 0 && $im == 0;
1228 return $re < 0 ? -$u : $u;
1234 # Computes the arc hyperbolic sine asinh(z) = log(z + sqrt(z*z+1))
1239 my $t = $z + CORE::sqrt($z*$z + 1);
1240 return CORE::log($t) if $t;
1242 my $t = &sqrt($z * $z + 1) + $z;
1243 # Try Taylor if looking bad (this usually means that
1244 # $z was large negative, therefore the sqrt is really
1245 # close to abs(z), summing that with z...)
1246 $t = 1/(2 * $z) - 1/(8 * $z**3) + 1/(16 * $z**5) - 5/(128 * $z**7)
1254 # Computes the arc hyperbolic tangent atanh(z) = 1/2 log((1+z) / (1-z)).
1259 return CORE::log((1 + $z)/(1 - $z))/2 if CORE::abs($z) < 1;
1262 _divbyzero 'atanh(1)', "1 - $z" if (1 - $z == 0);
1263 _logofzero 'atanh(-1)' if (1 + $z == 0);
1264 return 0.5 * &log((1 + $z) / (1 - $z));
1270 # Computes the hyperbolic arc secant asech(z) = acosh(1 / z).
1274 _divbyzero 'asech(0)', "$z" if ($z == 0);
1275 return acosh(1 / $z);
1281 # Computes the hyperbolic arc cosecant acsch(z) = asinh(1 / z).
1285 _divbyzero 'acsch(0)', $z if ($z == 0);
1286 return asinh(1 / $z);
1292 # Alias for acosh().
1294 sub acosech { Math::Complex::acsch(@_) }
1299 # Computes the arc hyperbolic cotangent acoth(z) = 1/2 log((1+z) / (z-1)).
1303 _divbyzero 'acoth(0)' if ($z == 0);
1305 return CORE::log(($z + 1)/($z - 1))/2 if CORE::abs($z) > 1;
1308 _divbyzero 'acoth(1)', "$z - 1" if ($z - 1 == 0);
1309 _logofzero 'acoth(-1)', "1 + $z" if (1 + $z == 0);
1310 return &log((1 + $z) / ($z - 1)) / 2;
1318 sub acotanh { Math::Complex::acoth(@_) }
1323 # Compute atan(z1/z2), minding the right quadrant.
1326 my ($z1, $z2, $inverted) = @_;
1327 my ($re1, $im1, $re2, $im2);
1329 ($re1, $im1) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
1330 ($re2, $im2) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
1332 ($re1, $im1) = ref $z1 ? @{$z1->_cartesian} : ($z1, 0);
1333 ($re2, $im2) = ref $z2 ? @{$z2->_cartesian} : ($z2, 0);
1336 # In MATLAB the imaginary parts are ignored.
1337 # warn "atan2: Imaginary parts ignored";
1338 # http://documents.wolfram.com/mathematica/functions/ArcTan
1339 # NOTE: Mathematica ArcTan[x,y] while atan2(y,x)
1340 my $s = $z1 * $z1 + $z2 * $z2;
1341 _divbyzero("atan2") if $s == 0;
1343 my $r = $z2 + $z1 * $i;
1344 return -$i * &log($r / &sqrt( $s ));
1346 return CORE::atan2($re1, $re2);
1353 # Set (get if no argument) the display format for all complex numbers that
1354 # don't happen to have overridden it via ->display_format
1356 # When called as an object method, this actually sets the display format for
1357 # the current object.
1359 # Valid object formats are 'c' and 'p' for cartesian and polar. The first
1360 # letter is used actually, so the type can be fully spelled out for clarity.
1362 sub display_format {
1364 my %display_format = %DISPLAY_FORMAT;
1366 if (ref $self) { # Called as an object method
1367 if (exists $self->{display_format}) {
1368 my %obj = %{$self->{display_format}};
1369 @display_format{keys %obj} = values %obj;
1373 $display_format{style} = shift;
1376 @display_format{keys %new} = values %new;
1379 if (ref $self) { # Called as an object method
1380 $self->{display_format} = { %display_format };
1383 %{$self->{display_format}} :
1384 $self->{display_format}->{style};
1387 # Called as a class method
1388 %DISPLAY_FORMAT = %display_format;
1392 $DISPLAY_FORMAT{style};
1398 # Show nicely formatted complex number under its cartesian or polar form,
1399 # depending on the current display format:
1401 # . If a specific display format has been recorded for this object, use it.
1402 # . Otherwise, use the generic current default for all complex numbers,
1403 # which is a package global variable.
1408 my $style = $z->display_format;
1410 $style = $DISPLAY_FORMAT{style} unless defined $style;
1412 return $z->_stringify_polar if $style =~ /^p/i;
1413 return $z->_stringify_cartesian;
1417 # ->_stringify_cartesian
1419 # Stringify as a cartesian representation 'a+bi'.
1421 sub _stringify_cartesian {
1423 my ($x, $y) = @{$z->_cartesian};
1426 my %format = $z->display_format;
1427 my $format = $format{format};
1430 if ($x =~ /^NaN[QS]?$/i) {
1433 if ($x =~ /^-?\Q$Inf\E$/oi) {
1436 $re = defined $format ? sprintf($format, $x) : $x;
1444 if ($y =~ /^(NaN[QS]?)$/i) {
1447 if ($y =~ /^-?\Q$Inf\E$/oi) {
1452 sprintf($format, $y) :
1453 ($y == 1 ? "" : ($y == -1 ? "-" : $y));
1466 } elsif ($y > 0 || $im =~ /^NaN[QS]?i$/i) {
1467 $str .= "+" if defined $re;
1470 } elsif (!defined $re) {
1479 # ->_stringify_polar
1481 # Stringify as a polar representation '[r,t]'.
1483 sub _stringify_polar {
1485 my ($r, $t) = @{$z->_polar};
1488 my %format = $z->display_format;
1489 my $format = $format{format};
1491 if ($t =~ /^NaN[QS]?$/i || $t =~ /^-?\Q$Inf\E$/oi) {
1493 } elsif ($t == pi) {
1495 } elsif ($r == 0 || $t == 0) {
1496 $theta = defined $format ? sprintf($format, $t) : $t;
1499 return "[$r,$theta]" if defined $theta;
1502 # Try to identify pi/n and friends.
1505 $t -= int(CORE::abs($t) / pi2) * pi2;
1507 if ($format{polar_pretty_print} && $t) {
1511 if ($b =~ /^-?\d+$/) {
1512 $b = $b < 0 ? "-" : "" if CORE::abs($b) == 1;
1513 $theta = "${b}pi/$a";
1519 if (defined $format) {
1520 $r = sprintf($format, $r);
1521 $theta = sprintf($format, $theta) unless defined $theta;
1523 $theta = $t unless defined $theta;
1526 return "[$r,$theta]";
1540 Math::Complex - complex numbers and associated mathematical functions
1546 $z = Math::Complex->make(5, 6);
1548 $j = cplxe(1, 2*pi/3);
1552 This package lets you create and manipulate complex numbers. By default,
1553 I<Perl> limits itself to real numbers, but an extra C<use> statement brings
1554 full complex support, along with a full set of mathematical functions
1555 typically associated with and/or extended to complex numbers.
1557 If you wonder what complex numbers are, they were invented to be able to solve
1558 the following equation:
1562 and by definition, the solution is noted I<i> (engineers use I<j> instead since
1563 I<i> usually denotes an intensity, but the name does not matter). The number
1564 I<i> is a pure I<imaginary> number.
1566 The arithmetics with pure imaginary numbers works just like you would expect
1567 it with real numbers... you just have to remember that
1573 5i + 7i = i * (5 + 7) = 12i
1574 4i - 3i = i * (4 - 3) = i
1579 Complex numbers are numbers that have both a real part and an imaginary
1580 part, and are usually noted:
1584 where C<a> is the I<real> part and C<b> is the I<imaginary> part. The
1585 arithmetic with complex numbers is straightforward. You have to
1586 keep track of the real and the imaginary parts, but otherwise the
1587 rules used for real numbers just apply:
1589 (4 + 3i) + (5 - 2i) = (4 + 5) + i(3 - 2) = 9 + i
1590 (2 + i) * (4 - i) = 2*4 + 4i -2i -i*i = 8 + 2i + 1 = 9 + 2i
1592 A graphical representation of complex numbers is possible in a plane
1593 (also called the I<complex plane>, but it's really a 2D plane).
1598 is the point whose coordinates are (a, b). Actually, it would
1599 be the vector originating from (0, 0) to (a, b). It follows that the addition
1600 of two complex numbers is a vectorial addition.
1602 Since there is a bijection between a point in the 2D plane and a complex
1603 number (i.e. the mapping is unique and reciprocal), a complex number
1604 can also be uniquely identified with polar coordinates:
1608 where C<rho> is the distance to the origin, and C<theta> the angle between
1609 the vector and the I<x> axis. There is a notation for this using the
1610 exponential form, which is:
1612 rho * exp(i * theta)
1614 where I<i> is the famous imaginary number introduced above. Conversion
1615 between this form and the cartesian form C<a + bi> is immediate:
1617 a = rho * cos(theta)
1618 b = rho * sin(theta)
1620 which is also expressed by this formula:
1622 z = rho * exp(i * theta) = rho * (cos theta + i * sin theta)
1624 In other words, it's the projection of the vector onto the I<x> and I<y>
1625 axes. Mathematicians call I<rho> the I<norm> or I<modulus> and I<theta>
1626 the I<argument> of the complex number. The I<norm> of C<z> is
1627 marked here as C<abs(z)>.
1629 The polar notation (also known as the trigonometric representation) is
1630 much more handy for performing multiplications and divisions of
1631 complex numbers, whilst the cartesian notation is better suited for
1632 additions and subtractions. Real numbers are on the I<x> axis, and
1633 therefore I<y> or I<theta> is zero or I<pi>.
1635 All the common operations that can be performed on a real number have
1636 been defined to work on complex numbers as well, and are merely
1637 I<extensions> of the operations defined on real numbers. This means
1638 they keep their natural meaning when there is no imaginary part, provided
1639 the number is within their definition set.
1641 For instance, the C<sqrt> routine which computes the square root of
1642 its argument is only defined for non-negative real numbers and yields a
1643 non-negative real number (it is an application from B<R+> to B<R+>).
1644 If we allow it to return a complex number, then it can be extended to
1645 negative real numbers to become an application from B<R> to B<C> (the
1646 set of complex numbers):
1648 sqrt(x) = x >= 0 ? sqrt(x) : sqrt(-x)*i
1650 It can also be extended to be an application from B<C> to B<C>,
1651 whilst its restriction to B<R> behaves as defined above by using
1652 the following definition:
1654 sqrt(z = [r,t]) = sqrt(r) * exp(i * t/2)
1656 Indeed, a negative real number can be noted C<[x,pi]> (the modulus
1657 I<x> is always non-negative, so C<[x,pi]> is really C<-x>, a negative
1658 number) and the above definition states that
1660 sqrt([x,pi]) = sqrt(x) * exp(i*pi/2) = [sqrt(x),pi/2] = sqrt(x)*i
1662 which is exactly what we had defined for negative real numbers above.
1663 The C<sqrt> returns only one of the solutions: if you want the both,
1664 use the C<root> function.
1666 All the common mathematical functions defined on real numbers that
1667 are extended to complex numbers share that same property of working
1668 I<as usual> when the imaginary part is zero (otherwise, it would not
1669 be called an extension, would it?).
1671 A I<new> operation possible on a complex number that is
1672 the identity for real numbers is called the I<conjugate>, and is noted
1673 with a horizontal bar above the number, or C<~z> here.
1680 z * ~z = (a + bi) * (a - bi) = a*a + b*b
1682 We saw that the norm of C<z> was noted C<abs(z)> and was defined as the
1683 distance to the origin, also known as:
1685 rho = abs(z) = sqrt(a*a + b*b)
1689 z * ~z = abs(z) ** 2
1691 If z is a pure real number (i.e. C<b == 0>), then the above yields:
1695 which is true (C<abs> has the regular meaning for real number, i.e. stands
1696 for the absolute value). This example explains why the norm of C<z> is
1697 noted C<abs(z)>: it extends the C<abs> function to complex numbers, yet
1698 is the regular C<abs> we know when the complex number actually has no
1699 imaginary part... This justifies I<a posteriori> our use of the C<abs>
1700 notation for the norm.
1704 Given the following notations:
1706 z1 = a + bi = r1 * exp(i * t1)
1707 z2 = c + di = r2 * exp(i * t2)
1708 z = <any complex or real number>
1710 the following (overloaded) operations are supported on complex numbers:
1712 z1 + z2 = (a + c) + i(b + d)
1713 z1 - z2 = (a - c) + i(b - d)
1714 z1 * z2 = (r1 * r2) * exp(i * (t1 + t2))
1715 z1 / z2 = (r1 / r2) * exp(i * (t1 - t2))
1716 z1 ** z2 = exp(z2 * log z1)
1718 abs(z) = r1 = sqrt(a*a + b*b)
1719 sqrt(z) = sqrt(r1) * exp(i * t/2)
1720 exp(z) = exp(a) * exp(i * b)
1721 log(z) = log(r1) + i*t
1722 sin(z) = 1/2i (exp(i * z1) - exp(-i * z))
1723 cos(z) = 1/2 (exp(i * z1) + exp(-i * z))
1724 atan2(y, x) = atan(y / x) # Minding the right quadrant, note the order.
1726 The definition used for complex arguments of atan2() is
1728 -i log((x + iy)/sqrt(x*x+y*y))
1730 Note that atan2(0, 0) is not well-defined.
1732 The following extra operations are supported on both real and complex
1740 cbrt(z) = z ** (1/3)
1741 log10(z) = log(z) / log(10)
1742 logn(z, n) = log(z) / log(n)
1744 tan(z) = sin(z) / cos(z)
1750 asin(z) = -i * log(i*z + sqrt(1-z*z))
1751 acos(z) = -i * log(z + i*sqrt(1-z*z))
1752 atan(z) = i/2 * log((i+z) / (i-z))
1754 acsc(z) = asin(1 / z)
1755 asec(z) = acos(1 / z)
1756 acot(z) = atan(1 / z) = -i/2 * log((i+z) / (z-i))
1758 sinh(z) = 1/2 (exp(z) - exp(-z))
1759 cosh(z) = 1/2 (exp(z) + exp(-z))
1760 tanh(z) = sinh(z) / cosh(z) = (exp(z) - exp(-z)) / (exp(z) + exp(-z))
1762 csch(z) = 1 / sinh(z)
1763 sech(z) = 1 / cosh(z)
1764 coth(z) = 1 / tanh(z)
1766 asinh(z) = log(z + sqrt(z*z+1))
1767 acosh(z) = log(z + sqrt(z*z-1))
1768 atanh(z) = 1/2 * log((1+z) / (1-z))
1770 acsch(z) = asinh(1 / z)
1771 asech(z) = acosh(1 / z)
1772 acoth(z) = atanh(1 / z) = 1/2 * log((1+z) / (z-1))
1774 I<arg>, I<abs>, I<log>, I<csc>, I<cot>, I<acsc>, I<acot>, I<csch>,
1775 I<coth>, I<acosech>, I<acotanh>, have aliases I<rho>, I<theta>, I<ln>,
1776 I<cosec>, I<cotan>, I<acosec>, I<acotan>, I<cosech>, I<cotanh>,
1777 I<acosech>, I<acotanh>, respectively. C<Re>, C<Im>, C<arg>, C<abs>,
1778 C<rho>, and C<theta> can be used also as mutators. The C<cbrt>
1779 returns only one of the solutions: if you want all three, use the
1782 The I<root> function is available to compute all the I<n>
1783 roots of some complex, where I<n> is a strictly positive integer.
1784 There are exactly I<n> such roots, returned as a list. Getting the
1785 number mathematicians call C<j> such that:
1789 is a simple matter of writing:
1791 $j = ((root(1, 3))[1];
1793 The I<k>th root for C<z = [r,t]> is given by:
1795 (root(z, n))[k] = r**(1/n) * exp(i * (t + 2*k*pi)/n)
1797 You can return the I<k>th root directly by C<root(z, n, k)>,
1798 indexing starting from I<zero> and ending at I<n - 1>.
1800 The I<spaceship> numeric comparison operator, E<lt>=E<gt>, is also
1801 defined. In order to ensure its restriction to real numbers is conform
1802 to what you would expect, the comparison is run on the real part of
1803 the complex number first, and imaginary parts are compared only when
1804 the real parts match.
1808 To create a complex number, use either:
1810 $z = Math::Complex->make(3, 4);
1813 if you know the cartesian form of the number, or
1817 if you like. To create a number using the polar form, use either:
1819 $z = Math::Complex->emake(5, pi/3);
1820 $x = cplxe(5, pi/3);
1822 instead. The first argument is the modulus, the second is the angle
1823 (in radians, the full circle is 2*pi). (Mnemonic: C<e> is used as a
1824 notation for complex numbers in the polar form).
1826 It is possible to write:
1828 $x = cplxe(-3, pi/4);
1830 but that will be silently converted into C<[3,-3pi/4]>, since the
1831 modulus must be non-negative (it represents the distance to the origin
1832 in the complex plane).
1834 It is also possible to have a complex number as either argument of the
1835 C<make>, C<emake>, C<cplx>, and C<cplxe>: the appropriate component of
1836 the argument will be used.
1841 The C<new>, C<make>, C<emake>, C<cplx>, and C<cplxe> will also
1842 understand a single (string) argument of the forms
1850 in which case the appropriate cartesian and exponential components
1851 will be parsed from the string and used to create new complex numbers.
1852 The imaginary component and the theta, respectively, will default to zero.
1854 The C<new>, C<make>, C<emake>, C<cplx>, and C<cplxe> will also
1855 understand the case of no arguments: this means plain zero or (0, 0).
1859 When printed, a complex number is usually shown under its cartesian
1860 style I<a+bi>, but there are legitimate cases where the polar style
1861 I<[r,t]> is more appropriate. The process of converting the complex
1862 number into a string that can be displayed is known as I<stringification>.
1864 By calling the class method C<Math::Complex::display_format> and
1865 supplying either C<"polar"> or C<"cartesian"> as an argument, you
1866 override the default display style, which is C<"cartesian">. Not
1867 supplying any argument returns the current settings.
1869 This default can be overridden on a per-number basis by calling the
1870 C<display_format> method instead. As before, not supplying any argument
1871 returns the current display style for this number. Otherwise whatever you
1872 specify will be the new display style for I<this> particular number.
1878 Math::Complex::display_format('polar');
1879 $j = (root(1, 3))[1];
1880 print "j = $j\n"; # Prints "j = [1,2pi/3]"
1881 $j->display_format('cartesian');
1882 print "j = $j\n"; # Prints "j = -0.5+0.866025403784439i"
1884 The polar style attempts to emphasize arguments like I<k*pi/n>
1885 (where I<n> is a positive integer and I<k> an integer within [-9, +9]),
1886 this is called I<polar pretty-printing>.
1888 For the reverse of stringifying, see the C<make> and C<emake>.
1890 =head2 CHANGED IN PERL 5.6
1892 The C<display_format> class method and the corresponding
1893 C<display_format> object method can now be called using
1894 a parameter hash instead of just a one parameter.
1896 The old display format style, which can have values C<"cartesian"> or
1897 C<"polar">, can be changed using the C<"style"> parameter.
1899 $j->display_format(style => "polar");
1901 The one parameter calling convention also still works.
1903 $j->display_format("polar");
1905 There are two new display parameters.
1907 The first one is C<"format">, which is a sprintf()-style format string
1908 to be used for both numeric parts of the complex number(s). The is
1909 somewhat system-dependent but most often it corresponds to C<"%.15g">.
1910 You can revert to the default by setting the C<format> to C<undef>.
1912 # the $j from the above example
1914 $j->display_format('format' => '%.5f');
1915 print "j = $j\n"; # Prints "j = -0.50000+0.86603i"
1916 $j->display_format('format' => undef);
1917 print "j = $j\n"; # Prints "j = -0.5+0.86603i"
1919 Notice that this affects also the return values of the
1920 C<display_format> methods: in list context the whole parameter hash
1921 will be returned, as opposed to only the style parameter value.
1922 This is a potential incompatibility with earlier versions if you
1923 have been calling the C<display_format> method in list context.
1925 The second new display parameter is C<"polar_pretty_print">, which can
1926 be set to true or false, the default being true. See the previous
1927 section for what this means.
1931 Thanks to overloading, the handling of arithmetics with complex numbers
1932 is simple and almost transparent.
1934 Here are some examples:
1938 $j = cplxe(1, 2*pi/3); # $j ** 3 == 1
1939 print "j = $j, j**3 = ", $j ** 3, "\n";
1940 print "1 + j + j**2 = ", 1 + $j + $j**2, "\n";
1942 $z = -16 + 0*i; # Force it to be a complex
1943 print "sqrt($z) = ", sqrt($z), "\n";
1945 $k = exp(i * 2*pi/3);
1946 print "$j - $k = ", $j - $k, "\n";
1948 $z->Re(3); # Re, Im, arg, abs,
1949 $j->arg(2); # (the last two aka rho, theta)
1950 # can be used also as mutators.
1956 The constant C<pi> and some handy multiples of it (pi2, pi4,
1957 and pip2 (pi/2) and pip4 (pi/4)) are also available if separately
1960 use Math::Complex ':pi';
1961 $third_of_circle = pi2 / 3;
1965 The floating point infinity can be exported as a subroutine Inf():
1967 use Math::Complex qw(Inf sinh);
1968 my $AlsoInf = Inf() + 42;
1969 my $AnotherInf = sinh(1e42);
1970 print "$AlsoInf is $AnotherInf\n" if $AlsoInf == $AnotherInf;
1972 Note that the stringified form of infinity varies between platforms:
1973 it can be for example any of
1980 or it can be something else.
1982 Also note that in some platforms trying to use the infinity in
1983 arithmetic operations may result in Perl crashing because using
1984 an infinity causes SIGFPE or its moral equivalent to be sent.
1985 The way to ignore this is
1987 local $SIG{FPE} = sub { };
1989 =head1 ERRORS DUE TO DIVISION BY ZERO OR LOGARITHM OF ZERO
1991 The division (/) and the following functions
1997 atanh asech acsch acoth
1999 cannot be computed for all arguments because that would mean dividing
2000 by zero or taking logarithm of zero. These situations cause fatal
2001 runtime errors looking like this
2003 cot(0): Division by zero.
2004 (Because in the definition of cot(0), the divisor sin(0) is 0)
2009 atanh(-1): Logarithm of zero.
2012 For the C<csc>, C<cot>, C<asec>, C<acsc>, C<acot>, C<csch>, C<coth>,
2013 C<asech>, C<acsch>, the argument cannot be C<0> (zero). For the
2014 logarithmic functions and the C<atanh>, C<acoth>, the argument cannot
2015 be C<1> (one). For the C<atanh>, C<acoth>, the argument cannot be
2016 C<-1> (minus one). For the C<atan>, C<acot>, the argument cannot be
2017 C<i> (the imaginary unit). For the C<atan>, C<acoth>, the argument
2018 cannot be C<-i> (the negative imaginary unit). For the C<tan>,
2019 C<sec>, C<tanh>, the argument cannot be I<pi/2 + k * pi>, where I<k>
2020 is any integer. atan2(0, 0) is undefined, and if the complex arguments
2021 are used for atan2(), a division by zero will happen if z1**2+z2**2 == 0.
2023 Note that because we are operating on approximations of real numbers,
2024 these errors can happen when merely `too close' to the singularities
2027 =head1 ERRORS DUE TO INDIGESTIBLE ARGUMENTS
2029 The C<make> and C<emake> accept both real and complex arguments.
2030 When they cannot recognize the arguments they will die with error
2031 messages like the following
2033 Math::Complex::make: Cannot take real part of ...
2034 Math::Complex::make: Cannot take real part of ...
2035 Math::Complex::emake: Cannot take rho of ...
2036 Math::Complex::emake: Cannot take theta of ...
2040 Saying C<use Math::Complex;> exports many mathematical routines in the
2041 caller environment and even overrides some (C<sqrt>, C<log>, C<atan2>).
2042 This is construed as a feature by the Authors, actually... ;-)
2044 All routines expect to be given real or complex numbers. Don't attempt to
2045 use BigFloat, since Perl has currently no rule to disambiguate a '+'
2046 operation (for instance) between two overloaded entities.
2048 In Cray UNICOS there is some strange numerical instability that results
2049 in root(), cos(), sin(), cosh(), sinh(), losing accuracy fast. Beware.
2050 The bug may be in UNICOS math libs, in UNICOS C compiler, in Math::Complex.
2051 Whatever it is, it does not manifest itself anywhere else where Perl runs.
2059 Daniel S. Lewart <F<lewart!at!uiuc.edu>>
2060 Jarkko Hietaniemi <F<jhi!at!iki.fi>>
2061 Raphael Manfredi <F<Raphael_Manfredi!at!pobox.com>>
2065 This library is free software; you can redistribute it and/or modify
2066 it under the same terms as Perl itself.