<!--
    Licensed to the Apache Software  Foundation (ASF) under one or more
    contributor  license agreements.  See  the NOTICE  file distributed
    with  this  work  for  additional information  regarding  copyright
    ownership.   The ASF  licenses this  file to  you under  the Apache
    License, Version  2.0 (the  License); you may  not use  this file
    except in  compliance with the License.   You may obtain  a copy of
    the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the  License is distributed on an  "AS IS" BASIS,
    WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
    implied.   See  the License  for  the  specific language  governing
    permissions and limitations under the License.

    Copyright 1999-2007 Rogue Wave Software, Inc.
-->

<HTML>
<HEAD>
<TITLE>Creating and Using Complex Numbers</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="20-1.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="20-3.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library User's Guide</B></DIV>
<H2>20.2 Creating and Using Complex Numbers</H2>
<P>In the following sections we describe the operations used to create and manipulate complex numbers.</P>
<A NAME="2021"><H3>20.2.1 Declaring Complex Numbers</H3></A>
<A NAME="idx434"><!></A>
<P>The template argument is used to define the types associated with the real and imaginary fields. This argument must be one of the floating point number datatypes available in the C++ language, either <SAMP>float</SAMP>, <SAMP>double</SAMP>, or <SAMP>long</SAMP> <SAMP>double</SAMP>.</P>
<P>There are several constructors associated with the class. A constructor with no arguments initializes both the real and imaginary fields to zero. A constructor with a single argument initializes the real field to the given value, and the imaginary value to zero. A constructor with two arguments initializes both real and imaginary fields. Finally, a copy constructor can be used to initialize a complex number with values derived from another complex number.</P>

<UL><PRE>
std::complex&lt;double&gt; com_one;              // value 0 + 0i
std::complex&lt;double&gt; com_two(3.14);        // value 3.14 + 0i
std::complex&lt;double&gt; com_three(1.5, 3.14)  // value 1.5 + 3.14i
std::complex&lt;double&gt; com_four(com_two);    // value is also 3.14 + 0i
</PRE></UL>
<P>A complex number can be assigned the value of another complex number. Since the one-argument constructor is also used for a conversion operator, a complex number can also be assigned the value of a real number. The real field is changed to the right-hand side, while the imaginary field is set to zero:</P>

<UL><PRE>
com_one = com_three;                   // becomes 1.5 + 3.14i
com_three = 2.17;                      // becomes 2.17 + 0i
</PRE></UL>
<A NAME="idx435"><!></A>
<P>The function <SAMP>polar()</SAMP> can be used to construct a complex number with the given magnitude and phase angle:</P>

<UL><PRE>
com_four = std::polar(5.6, 1.8);
</PRE></UL>
<A NAME="idx436"><!></A>
<P>The conjugate of a complex number is formed using the function <SAMP>conj()</SAMP>. If a complex number represents <SAMP>x + iy</SAMP>, then the conjugate is the value <SAMP>x-iy</SAMP>.</P>

<UL><PRE>
std::complex&lt;double&gt; com_five = std::conj(com_four);
</PRE></UL>
<A NAME="2022"><H3>20.2.2 Accessing Complex Number Values</H3></A>
<A NAME="idx437"><!></A>
<P>The member functions <SAMP>real()</SAMP> and <SAMP>imag()</SAMP> return the real and imaginary fields of a complex number, respectively. These functions can also be invoked as ordinary functions with complex number arguments.</P>

<UL><PRE>
// the following should be the same
std::cout &lt;&lt; com_one.real() &lt;&lt; "+" &lt;&lt; com_one.imag()
          &lt;&lt; "i" &lt;&lt; std::endl;
std::cout &lt;&lt; std::real(com_one) &lt;&lt; "+" &lt;&lt; std::imag(com_one)
          &lt;&lt; "i" &lt;&lt; std::endl;
</PRE></UL>
<BLOCKQUOTE><HR><B>
NOTE -- With the exception of the member functions real() and imag(), most operations on complex numbers are performed using ordinary functions, not member functions.
</B><HR></BLOCKQUOTE>
<A NAME="2023"><H3>20.2.3 Arithmetic Operations</H3></A>
<P>The arithmetic operators <SAMP>+</SAMP>,<SAMP> -</SAMP>,<SAMP> *</SAMP>, and <SAMP>/</SAMP> can be used to perform addition, subtraction, multiplication, and division of complex numbers. All four work either with two complex numbers, or with a complex number and a real value. Assignment operators are also defined for all four.</P>

<UL><PRE>
std::cout &lt;&lt; com_one + com_two &lt;&lt; std::endl;
std::cout &lt;&lt; com_one - 3.14 &lt;&lt; std::endl;
std::cout &lt;&lt; 2.75 * com_two &lt;&lt; std::endl;
com_one += com_three / 2.0;
</PRE></UL>
<P>The unary operators <SAMP>+</SAMP> and <SAMP>-</SAMP> can also be applied to complex numbers.</P>
<A NAME="2024"><H3>20.2.4 Comparing Complex Values</H3></A>
<A NAME="idx438"><!></A>
<P>Two complex numbers can be compared for equality or inequality, using  <SAMP>operator==()</SAMP> and <SAMP>operator!=(). </SAMP>Two values are equal if their corresponding fields are equal. Complex numbers do not have a natural ordering, and thus cannot be compared using any other relational operator.</P>
<A NAME="2025"><H3>20.2.5 Stream Input and Output</H3></A>
<A NAME="idx439"><!></A>
<P>Complex numbers can be written to an output stream, or read from an input stream, using the normal stream I/O conventions. A value is written in parentheses, either as <SAMP>(u)</SAMP> or <SAMP>(u,v)</SAMP>, depending upon whether or not the imaginary value is zero. A value is read as a set of parentheses surrounding two numeric values.</P>
<A NAME="2026"><H3>20.2.6 Norm and Absolute Value</H3></A>
<A NAME="idx440"><!></A>
<P>The function <SAMP>std::norm()</SAMP> returns the norm of the complex number. This is the sum of the squares of the real and imaginary parts. The function <SAMP>std::abs()</SAMP> returns the absolute value, which is the square root of the norm. Note that both are ordinary functions that take the complex value as an argument, not member functions.</P>

<UL><PRE>
std::cout &lt;&lt; std::norm(com_two) &lt;&lt; std::endl;
std::cout &lt;&lt; std::abs(com_two)  &lt;&lt; std::endl;
</PRE></UL>
<A NAME="idx441"><!></A>
<P>The directed phase angle of a complex number is yielded by the function <SAMP>std::arg()</SAMP>:</P>

<UL><PRE>
std::cout &lt;&lt; com_four &lt;&lt; " in polar coordinates is "
          &lt;&lt; std::arg(com_four) &lt;&lt; " and " &lt;&lt; std::norm(com_four)
          &lt;&lt; std::endl;
</PRE></UL>
<A NAME="2027"><H3>20.2.7 Trigonometric Functions</H3></A>
<A NAME="idx442"><!></A>
<P>The trigonometric functions defined for floating point values have all been extended to complex number arguments. These functions are <SAMP>std::sin()</SAMP>, <SAMP>std::cos()</SAMP>, <SAMP>std::tan()</SAMP>, <SAMP>std::sinh()</SAMP>, <SAMP>std::cosh()</SAMP>, and <SAMP>std::tanh()</SAMP>. Each takes a single complex number as argument and returns a complex number as result. </P>
<A NAME="2028"><H3>20.2.8 Transcendental Functions</H3></A>
<A NAME="idx443"><!></A>
<P>The transcendental functions<SAMP> std::exp()</SAMP>, <SAMP>std::log()</SAMP>, <SAMP>std::log10()</SAMP>, and <SAMP>std::sqrt()</SAMP> have been extended to complex arguments. Each takes a single complex number as argument, and returns a complex number as result.</P>
<A NAME="idx444"><!></A>
<P>The C++ Standard Library defines several variations of the exponential function <SAMP>std::pow()</SAMP>. Versions exist to raise a complex number to an integer power, to raise a complex number to a complex power or to a real power, or to raise a real value to a complex power.</P>

<BR>
<HR>
<A HREF="20-1.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="20-3.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>

<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
    _uacct = "UA-1775151-1";
    urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->

</BODY>
</HTML>
