[article Complex Number TR1 Algorithms
    [quickbook 1.4]
    [copyright 2005 John Maddock]
    [purpose Complex number arithmetic]
    [license
        Distributed under the Boost Software License, Version 1.0.
        (See accompanying file LICENSE_1_0.txt or copy at
        [@http://www.boost.org/LICENSE_1_0.txt http://www.boost.org/LICENSE_1_0.txt])
    ]
    [authors [Maddock, John]]
    [category math]
    [last-revision $Date: 2006-12-29 11:08:32 +0000 (Fri, 29 Dec 2006) $]
]


[def __effects [*Effects: ]]
[def __formula [*Formula: ]]
[def __exm1 '''<code>e<superscript>x</superscript> - 1</code>''']
[def __ex '''<code>e<superscript>x</superscript></code>''']
[def __te '''2&#x03B5;''']
[template tr1[] [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf Technical Report on C++ Library Extensions]]

This manual is also available in 
[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/complex-tr1.pdf 
printer friendly PDF format].

[section:inverse_complex Complex Number Inverse Trigonometric Functions]

The following complex number algorithms are the inverses of trigonometric functions currently
present in the C++ standard.  Equivalents to these functions are part of the C99 standard, and
are part of the [tr1].

[section:implementation Implementation and Accuracy]

Although there are deceptively simple formulae available for all of these functions, a naive
implementation that used these formulae would fail catastrophically for some input
values.  The Boost versions of these functions have been implemented using the methodology
described in "Implementing the Complex Arcsine and Arccosine Functions Using Exception Handling"
by T. E. Hull Thomas F. Fairgrieve and Ping Tak Peter Tang, ACM Transactions on Mathematical Software, 
Vol. 23, No. 3, September 1997.  This means that the functions are well defined over the entire
complex number range, and produce accurate values even at the extremes of that range, where as a naive
formula would cause overflow or underflow to occur during the calculation, even though the result is  
actually a representable value.  The maximum theoretical relative error for all of these functions 
is less than 9.5E for every machine-representable point in the complex plane.  Please refer to 
comments in the header files themselves and to the above mentioned paper for more information
on the implementation methodology.

[endsect]
[section:asin asin]

[h4 Header:]

   #include <boost/math/complex/asin.hpp>

[h4 Synopsis:]

   template<class T> 
   std::complex<T> asin(const std::complex<T>& z);
   
__effects returns the inverse sine of the complex number z.

__formula [$../../images/asin.png]

[endsect]

[section:acos acos]

[h4 Header:]

   #include <boost/math/complex/acos.hpp>

[h4 Synopsis:]

   template<class T> 
   std::complex<T> acos(const std::complex<T>& z);
   
__effects returns the inverse cosine of the complex number z.

__formula [$../../images/acos.png]

[endsect]

[section:atan atan]

[h4 Header:]

   #include <boost/math/complex/atan.hpp>

[h4 Synopsis:]

   template<class T> 
   std::complex<T> atan(const std::complex<T>& z);
   
__effects returns the inverse tangent of the complex number z.

__formula [$../../images/atan.png]

[endsect]

[section:asinh asinh]

[h4 Header:]

   #include <boost/math/complex/asinh.hpp>

[h4 Synopsis:]

   template<class T> 
   std::complex<T> asinh(const std::complex<T>& z);
   
__effects returns the inverse hyperbolic sine of the complex number z.

__formula [$../../images/asinh.png]

[endsect]

[section:acosh acosh]

[h4 Header:]

   #include <boost/math/complex/acosh.hpp>

[h4 Synopsis:]

   template<class T> 
   std::complex<T> acosh(const std::complex<T>& z);
   
__effects returns the inverse hyperbolic cosine of the complex number z.

__formula [$../../images/acosh.png]

[endsect]

[section:atanh atanh]

[h4 Header:]

   #include <boost/math/complex/atanh.hpp>

[h4 Synopsis:]

   template<class T> 
   std::complex<T> atanh(const std::complex<T>& z);
   
__effects returns the inverse hyperbolic tangent of the complex number z.

__formula [$../../images/atanh.png]

[endsect]

[section History]

* 2005/12/17: Added support for platforms with no meaningful numeric_limits<>::infinity().
* 2005/12/01: Initial version, added as part of the TR1 library.


[endsect]

[endsect]



