<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
	 xml:id="std.numerics" xreflabel="Numerics">
<?dbhtml filename="numerics.html"?>

<info><title>
  Numerics
  <indexterm><primary>Numerics</primary></indexterm>
</title>
  <keywordset>
    <keyword>ISO C++</keyword>
    <keyword>library</keyword>
  </keywordset>
</info>



<!-- Sect1 01 : Complex -->
<section xml:id="std.numerics.complex" xreflabel="complex"><info><title>Complex</title></info>
<?dbhtml filename="complex.html"?>

  <para>
  </para>
  <section xml:id="numerics.complex.processing" xreflabel="complex Processing"><info><title>complex Processing</title></info>

    <para>
    </para>
   <para>Using <code>complex&lt;&gt;</code> becomes even more comple- er, sorry,
      <emphasis>complicated</emphasis>, with the not-quite-gratuitously-incompatible
      addition of complex types to the C language.  David Tribble has
      compiled a list of C++98 and C99 conflict points; his description of
      C's new type versus those of C++ and how to get them playing together
      nicely is
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://david.tribble.com/text/cdiffs.htm#C99-complex">here</link>.
   </para>
   <para><code>complex&lt;&gt;</code> is intended to be instantiated with a
      floating-point type.  As long as you meet that and some other basic
      requirements, then the resulting instantiation has all of the usual
      math operators defined, as well as definitions of <code>op&lt;&lt;</code>
      and <code>op&gt;&gt;</code> that work with iostreams: <code>op&lt;&lt;</code>
      prints <code>(u,v)</code> and <code>op&gt;&gt;</code> can read <code>u</code>,
      <code>(u)</code>, and <code>(u,v)</code>.
   </para>
   <para>As an extension to C++11 and for increased compatibility with C,
      <code>&lt;complex.h&gt;</code> includes both <code>&lt;complex&gt;</code>
      and the C99 <code>&lt;complex.h&gt;</code> (if the C library provides
      it).
   </para>

  </section>
</section>

<!-- Sect1 02 : Generalized Operations -->
<section xml:id="std.numerics.generalized_ops" xreflabel="Generalized Ops"><info><title>Generalized Operations</title></info>
<?dbhtml filename="generalized_numeric_operations.html"?>

  <para>
  </para>

   <para>There are four generalized functions in the &lt;numeric&gt; header
      that follow the same conventions as those in &lt;algorithm&gt;.  Each
      of them is overloaded:  one signature for common default operations,
      and a second for fully general operations.  Their names are
      self-explanatory to anyone who works with numerics on a regular basis:
   </para>
   <itemizedlist>
      <listitem><para><code>accumulate</code></para></listitem>
      <listitem><para><code>inner_product</code></para></listitem>
      <listitem><para><code>partial_sum</code></para></listitem>
      <listitem><para><code>adjacent_difference</code></para></listitem>
   </itemizedlist>
   <para>Here is a simple example of the two forms of <code>accumulate</code>.
   </para>
   <programlisting>
   int   ar[50];
   int   someval = somefunction();

   // ...initialize members of ar to something...

   int  sum       = std::accumulate(ar,ar+50,0);
   int  sum_stuff = std::accumulate(ar,ar+50,someval);
   int  product   = std::accumulate(ar,ar+50,1,std::multiplies&lt;int&gt;());
   </programlisting>
   <para>The first call adds all the members of the array, using zero as an
      initial value for <code>sum</code>.  The second does the same, but uses
      <code>someval</code> as the starting value (thus, <code>sum_stuff == sum +
      someval</code>).  The final call uses the second of the two signatures,
      and multiplies all the members of the array; here we must obviously
      use 1 as a starting value instead of 0.
   </para>
   <para>The other three functions have similar dual-signature forms.
   </para>

</section>

<!-- Sect1 03 : Interacting with C -->
<section xml:id="std.numerics.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
<?dbhtml filename="numerics_and_c.html"?>


  <section xml:id="numerics.c.array" xreflabel="Numerics vs. Arrays"><info><title>Numerics vs. Arrays</title></info>


   <para>One of the major reasons why FORTRAN can chew through numbers so well
      is that it is defined to be free of pointer aliasing, an assumption
      that C89 is not allowed to make, and neither is C++98.  C99 adds a new
      keyword, <code>restrict</code>, to apply to individual pointers.  The
      C++ solution is contained in the library rather than the language
      (although many vendors can be expected to add this to their compilers
      as an extension).
   </para>
   <para>That library solution is a set of two classes, five template classes,
      and "a whole bunch" of functions.  The classes are required
      to be free of pointer aliasing, so compilers can optimize the
      daylights out of them the same way that they have been for FORTRAN.
      They are collectively called <code>valarray</code>, although strictly
      speaking this is only one of the five template classes, and they are
      designed to be familiar to people who have worked with the BLAS
      libraries before.
   </para>

  </section>

  <section xml:id="numerics.c.c99" xreflabel="C99"><info><title>C99</title></info>


   <para>In addition to the other topics on this page, we'll note here some
      of the C99 features that appear in libstdc++.
   </para>
   <para>The C99 features depend on the <code>--enable-c99</code> configure flag.
      This flag is already on by default, but it can be disabled by the
      user.  Also, the configuration machinery will disable it if the
      necessary support for C99 (e.g., header files) cannot be found.
   </para>
   <para>As of GCC 3.0, C99 support includes classification functions
      such as <code>isnormal</code>, <code>isgreater</code>,
      <code>isnan</code>, etc.
      The functions used for 'long long' support such as <code>strtoll</code>
      are supported, as is the <code>lldiv_t</code> typedef.  Also supported
      are the wide character functions using 'long long', like
      <code>wcstoll</code>.
   </para>

  </section>
</section>

</chapter>
