2
0
mirror of https://github.com/boostorg/math.git synced 2026-01-19 04:22:09 +00:00

Initial commit.

[SVN r2955]
This commit is contained in:
John Maddock
2006-05-21 15:45:37 +00:00
parent ab2e8055f7
commit aa2c565d12
159 changed files with 47182 additions and 6007 deletions

View File

@@ -1,225 +0,0 @@
%% This BibTeX bibliography file was created using BibDesk.
%% http://bibdesk.sourceforge.net/
%% Created for Daryle Walker at 2005-08-13 07:09:33 -0400
%% Saved with string encoding ASCII (TeX)
@electronic{Inc.:it,
Address = {450 Phillip Street, Waterloo, ON, N2L SJ2, Canada},
Date-Added = {2005-08-13 07:03:51 -0400},
Date-Modified = {2005-08-13 07:09:22 -0400},
Edition = {version V, release 5.1},
Editor = {Waterloo Maple Inc.},
Note = {A commercial computer-aided mathematics software},
Title = {Maple},
Url = {http://www.maplesoft.com}}
@electronic{Holin:lq,
Author = {Hubert Holin and Didier Vidal},
Date-Added = {2005-08-13 06:59:47 -0400},
Date-Modified = {2005-08-13 07:02:44 -0400},
Note = {available for licencing from the author, {\copyright}},
Title = {Horizontal-preserving quaternions}}
@url{Weisstein:ym,
Annote = {Was <http://www.treasure-troves.com/math/CayleyNumber.html> by E. Weisstein, but was redirected to a page that included a suggested cite listing.
},
Author = {Eric W. Weisstein},
Date-Added = {2005-08-13 06:50:54 -0400},
Date-Modified = {2005-08-13 06:58:24 -0400},
Publisher = {MathWorld---A Wolfram Web Resource},
Title = {Cayley Number},
Url = {http://mathworld.wolfram.com/CayleyNumber.html}}
@article{Sudbery:1979ei,
Author = {A. Sudbery},
Date-Added = {2005-08-13 06:46:18 -0400},
Date-Modified = {2005-08-13 06:47:44 -0400},
Journal = {Proceedings of the Cambridge Philosophical Society},
Title = {Quaternionic Analysis},
Volume = {85},
Year = {1979}}
@article{Salamon:1982sg,
Author = {S. Salamon},
Date-Added = {2005-08-13 06:42:04 -0400},
Date-Modified = {2005-08-13 06:44:22 -0400},
Journal = {Inventiones Mathematica},
Number = {1},
Pages = {143--171},
Title = {Quaternionic Kaeler Manifolds},
Volume = {67},
Year = {1982}}
@article{Pletincks:1989ds,
Author = {D. Pletincks},
Date-Added = {2005-08-13 06:36:48 -0400},
Date-Modified = {2005-08-13 06:38:45 -0400},
Journal = {The Visual Computer, an International Journal of Computer Graphics},
Number = {1/2},
Pages = {2--13},
Title = {Quaternion calculus as a basic tool in computer graphics},
Volume = {5},
Year = {1989}}
@article{Pichon:1973oh,
Address = {Paris},
Author = {G. Pichon},
Date-Added = {2005-08-13 06:30:53 -0400},
Date-Modified = {2005-08-13 06:34:48 -0400},
Journal = {Collection M\'{e}thodes},
Pages = {31},
Publisher = {Hermann},
Title = {Groupes de Lie, representations lin\'{e}aires et applications},
Year = {1973}}
@unpublished{Pham:1996gf,
Author = {F. Pham},
Date-Added = {2005-08-13 06:23:13 -0400},
Date-Modified = {2005-08-13 06:26:04 -0400},
Note = {early version, unpublished, presented at the Journ\'{e}es Non Standard, Paris, 1996-12-14 and perhaps elsewhere},
Title = {Une d\'{e}finition non standard de l'exponentielle (variation sur un th\`{e}me de Pierre Cartier)},
Year = {1996}}
@booklet{Misner:1973es,
Address = {New York},
Author = {C.W. Misner and K.S. Thone and J.A. Wheeler},
Chapter = {41---Spinors},
Date-Added = {2005-08-13 06:16:27 -0400},
Date-Modified = {2005-08-13 06:23:28 -0400},
Publisher = {W.H. Freeman and Company},
Title = {Gravitation},
Year = {1973}}
@book{Lelong-Ferrand:1978gq,
Author = {J. Lelong-Ferrand and J.M. Arnaudi\`{e}s},
Date-Added = {2005-08-13 06:08:32 -0400},
Date-Modified = {2005-08-13 06:12:02 -0400},
Edition = {3eme \'{e}dition},
Publisher = {Dunod Universit\'{e}},
Title = {Cours de math\`{e}matiques, Tome 1, Alg\`{e}bre},
Year = {1978}}
@article{Leborgne:1982hf,
Author = {D. Leborgne},
Date-Added = {2005-08-13 06:04:45 -0400},
Date-Modified = {2005-08-13 06:06:39 -0400},
Journal = {Math\'{e}matiques},
Publisher = {P.U.F.},
Title = {Calcul diff\'{e}rentiel et g\'{e}ometrie},
Year = {1982}}
@book{Lang:1971vf,
Author = {S. Lang},
Date-Added = {2005-08-13 05:58:26 -0400},
Date-Modified = {2005-08-13 06:02:25 -0400},
Edition = {Revised printing: January 1971},
Publisher = {Addisson-Wesley Publishing Company},
Series = {Addison-Wesley Series in Mathematics},
Title = {Algebra},
Year = {1971}}
@article{Khoan:1972ld,
Author = {V. K. Khoan},
Date-Added = {2005-08-13 05:53:27 -0400},
Date-Modified = {2005-08-13 05:57:05 -0400},
Journal = {Cours et exercices r\'{e}solus maitrise de math\'{e}matiques certificat C2},
Publisher = {Vuibert},
Title = {Distributions Analyse de Fourier Op\'{e}rateurs aux D\'{e}riv\'{e}es Partielles, tome 1},
Year = {1972}}
@article{Howell:1975ft,
Author = {T. Howell and J.C. Lafon},
Date-Added = {2005-08-13 05:50:14 -0400},
Date-Modified = {2005-08-13 05:51:43 -0400},
Journal = {Cornell Computer Science TR 75-245},
Month = {June},
Title = {The complexity of the quaternion product},
Year = {1975}}
@article{Gurlebeck:1989mb,
Author = {K. G\"{u}rlebeck and W. Sp\"{o}ssig},
Date-Added = {2005-08-13 05:46:31 -0400},
Date-Modified = {2005-08-13 05:48:44 -0400},
Journal = {International Series of Numerical Mathematics},
Publisher = {Birkha\"{u}ser},
Title = {Quaternion Analysis and Elliptical Boundary Problems},
Volume = {89},
Year = {1989}}
@article{Exbrayat:1971pk,
Author = {J. M. Exbrayat and P. Mazet},
Date-Added = {2005-08-13 05:06:22 -0400},
Date-Modified = {2005-08-13 05:44:53 -0400},
Journal = {Notions Modernes de Math\'{e}matiques},
Publisher = {Hatier-Universit\'{e}},
Title = {alg\`{e}bre 1, Notions Fondamentales de la Th\'{e}orie des Ensembles},
Year = {1971}}
@webpage{Dixon:ex,
Annote = {The web site was originally <http://www.7stones.com/Homepage/sevenhome2.html>, but it has a redirect page to <http://www.7stones.com/index.html>, of which I trimmed the default key.
},
Author = {G. Dixon},
Date-Added = {2005-08-13 04:59:19 -0400},
Date-Modified = {2005-08-13 05:02:52 -0400},
Url = {http://www.7stones.com}}
@article{Dixon:1994rh,
Author = {G. Dixon},
Date-Added = {2005-08-13 04:54:24 -0400},
Date-Modified = {2005-08-13 04:56:21 -0400},
Journal = {Mathematics and Its Applications},
Publisher = {Kluwer Academic Publishers},
Title = {Division Algebras: Octonions, Quaternions, Complex Numbers and the Algebraic Design of Physics},
Year = {1994}}
@article{Casteljau:1987bc,
Author = {P. de Casteljau},
Date-Added = {2005-08-13 04:47:03 -0400},
Date-Modified = {2005-08-13 04:50:13 -0400},
Journal = {Trait\'{e} des nouvelles technologies, s\'{e}rie math\'{e}matiques appliqu\'{e}es},
Publisher = {Hermes},
Title = {Les quaternions},
Year = {1987}}
@book{Bourbaki:do,
Author = {N. Bourbaki},
Date-Added = {2005-08-13 04:41:28 -0400},
Date-Modified = {2005-08-13 04:42:11 -0400},
Title = {Espaces Vectoriels Topologiques}}
@book{Bourbaki:sc,
Author = {N. Bourbaki},
Date-Added = {2005-08-13 04:39:45 -0400},
Date-Modified = {2005-08-13 04:41:18 -0400},
Title = {Alg\`{e}bre}}
@book{Berger:1990ce,
Author = {M. Berger},
Date-Added = {2005-08-13 04:35:48 -0400},
Date-Modified = {2005-08-13 04:36:40 -0400},
Publisher = {Nathan},
Title = {G\'{e}ometrie 1},
Year = {1990}}
@inbook{Beardon:1979ek,
Author = {A.F. Beardon},
Date-Added = {2005-08-13 04:29:25 -0400},
Date-Modified = {2005-08-13 04:33:48 -0400},
Publisher = {John Wiley \& Sons, A Wiley-Interscience Publication},
Title = {Complex Analysis, The Argument Principle in Analysis and Topology},
Year = {1979}}
@article{Godbillon:1971th,
Author = {C. Godbillon},
Date-Added = {2005-08-13 04:12:45 -0400},
Date-Modified = {2005-08-13 04:35:21 -0400},
Journal = {Collection M\'{e}thodes},
Publisher = {Hermann},
Title = {\'{E}l\'{e}ments de Topologie Alg\'{e}brique},
Year = {1971}}

File diff suppressed because it is too large Load Diff

17
doc/Jamfile.v2 Normal file
View File

@@ -0,0 +1,17 @@
# Copyright John Maddock 2005. Use, modification, and distribution are
# subject to 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)
using quickbook ;
xml math : math.qbk ;
boostbook standalone
:
math
:
<xsl:param>nav.layout=none
<xsl:param>navig.graphics=0
;

108
doc/beta.qbk Normal file
View File

@@ -0,0 +1,108 @@
[section The Beta Function]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/beta.hpp>
``
namespace boost{ namespace math{
template <class T>
T beta(T a, T b);
}} // namespaces
[h4 Description]
The beta function is defined by:
[$../equations/beta1.png]
[$../graphs/beta.png]
And for small values:
[$../graphs/beta-small.png]
There are effectively two versions of this function internally: a fully
generic version that is slow, but reasonably accurate, and a much more
efficient approximation that is used where the number of digits in the mantissa
of T correspond to a certain __lanczos. In practice any built in
floating point type you will encounter has an appropriate __lanczos
defined for it. It is also possible, given enough machine time, to generate
further __lanczos's using the program libs/math/tools/lanczos_generator.cpp.
[h4 Accuracy]
The following table shows peek errors for various domains of input arguments,
plus comparisons to other open source implementations where available. Note that
only results for the widest floating point type on the system are given as
narrower types have __zero_error.
[table Peek Errors In the Beta Function
[[Mantissa Size] [Platform and Compiler] [Errors in range\n0.4 < a,b < 100] [Errors in range\n1e-6 < a,b < 36]]
[[53] [Win32, Visual C++ 8] [Peek=99 Mean=22\n\n(GSL Peek=1178 Mean=238)\n(Cephes=1612)] [Peek=10.7 Mean=2.6\n\n(GSL Peek=12 Mean=2.0)\n(Cephes=174)]]
[[64] [Red Hat Linux IA32, g++ 3.4.4] [Peek=112.1 Mean=26.9] [Peek=15.8 Mean=3.6]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peek=61.4 Mean=19.5] [Peek=12.2 Mean=3.6]]
[[113] [HPUX IA64, aCC A.06.06] [Peek=42.03 Mean=13.94] [Peek=9.8 Mean=3.1]]
]
Note that the worst errors occur when a or b are large, and that
when this is the case the result is very close to zero, so absolute
errors will be very small.
[h4 Testing]
A mixture of spot tests of exact values, and randomly generated test data are
used: the test data was computed using NTL::RR at 1000-bit precision.
[h4 Implementation]
Traditional methods of evaluating the beta function either involve evaluating
the gamma functions directly, or taking logarithms and then
exponentiating the result. However, the former is prone to overflows
for even very modest arguments, while the latter is prone to cancellation
errors. As an alternative, if we regard the gamma function as a white-box
containing the __lanczos then we can combine the power terms:
[$../equations/beta2.png]
which is almost the ideal solution, however almost all of the error occurs
in evaluating the power terms when /a/ or /b/ are large. If we assume that /a > b/
then the larger of the two power terms can be reduced by a factor of /b/, which
immediately cuts the maximum error in half:
[$../equations/beta3.png]
This may not be the final solution, but it is very competitive compared to
other implementation methods.
The generic implementation - where no __lanczos approximation is available - is
implemented in a very similar way to the generic version of the gamma function.
Again in order to avoid numerical overflow the power terms that prefix the series and
continued fraction parts are collected together into:
[$../equations/beta8.png]
where la, lb and lc are the integration limits used for a, b, and a+b.
There are a few special cases worth mentioning:
When /a/ or /b/ are less than one, we can use the recurrence relations:
[$../equations/beta4.png]
[$../equations/beta5.png]
To move to a more favorable region where they are both greater than 1.
In addition:
[$../equations/beta7.png]
[endsect]

View File

@@ -1,724 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>Boost Arbitrary-length Whole-number Library</title>
</head>
<body>
<h1><img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="middle" width="277" height="86">Arbitrary-length Whole-number Library</h1>
<p>The headers <cite><a href="../../../boost/math/big_whole_core.hpp">boost/math/big_whole_core.hpp</a></cite> and <cite><a href="../../../boost/math/big_whole.hpp">boost/math/big_whole.hpp</a></cite> cover the definition of and operations for unlimited-length nonnegative integers (only memory constraints should limit the numbers supported).</p>
<h2><a name="contents">Contents</a></h2>
<ol>
<li><a href="#contents">Contents</a></li>
<li><a href="#rationale">Rationale</a></li>
<li><a href="#core">Core Definition and Routines</a>
<ul>
<li><a href="#c_header">Header Synopsis</a></li>
<li><a href="#c_bigwhole">Unlimited-Length Nonnegative Integer Type</a>
<ul>
<li><a href="#c_bw_ctr">Constructors</a></li>
<li><a href="#c_bw_observe">Observer Member Functions</a></li>
<li><a href="#c_bw_mutate">Mutating Member Functions</a></li>
<li><a href="#c_bw_ops">Operators</a></li>
</ul></li>
<li><a href="#c_nm_funcs">Non-Member Functions &amp; Operators</a>
<ul>
<li><a href="#c_nm_ops">Operators</a></li>
</ul></li>
<li><a href="#c_limits">Numeric Limits</a></li>
</ul></li>
<li><a href="#additional">Additional Routines</a>
<ul>
<li><a href="#a_header">Header Synopsis</a></li>
<li><a href="#a_bit_conv">Bit-String Conversion Functions</a></li>
<li><a href="#a_io_ops">Input &amp; Output Operators</a></li>
</ul></li>
<li><a href="#refer">References</a></li>
<li><a href="#credits">Credits</a>
<ul>
<li><a href="#contributors">Contributors</a></li>
<li><a href="#history">History</a></li>
</ul></li>
</ol>
<h2><a name="rationale">Rationale</a></h2>
<p>Various &quot;bignum&quot; classes provide objects that model numbers beyond the limits of the built-in numeric types. The class provided in this library gives a portable implementation of nonnegative integers (also known as &quot;whole&quot; numbers). The implementation tries to lean towards good performance, but it's probably not as good as the various highly-refined &quot;bignum&quot; types available.</p>
<h2><a name="core">Core Definition and Routines</a></h2>
<p>The <cite><a href="../../../boost/math/big_whole_core.hpp">boost/math/big_whole_core.hpp</a></cite> header contains the declaration for the unlimited-length nonnegative integer type and declarations for various core routines.</p>
<h3><a name="c_header">Header Synopsis</a></h3>
<blockquote><pre>
#include &lt;limits&gt; <i>// for std::numeric_limits</i>
namespace boost
{
namespace math
{
class big_whole;
void swap( big_whole &amp;a, big_whole &amp;b );
big_whole and_not( big_whole const &amp;a, big_whole const &amp;b );
big_whole abs( big_whole const &amp;w );
short sgn( big_whole const &amp;w );
big_whole operator !( big_whole const &amp;w );
big_whole operator +( big_whole const &amp;w );
big_whole operator -( big_whole const &amp;w );
big_whole operator ++( big_whole &amp;w, int );
big_whole operator --( big_whole &amp;w, int );
bool operator ==( big_whole const &amp;lhs, big_whole const &amp;rhs );
bool operator !=( big_whole const &amp;lhs, big_whole const &amp;rhs );
bool operator &lt; ( big_whole const &amp;lhs, big_whole const &amp;rhs );
bool operator &gt; ( big_whole const &amp;lhs, big_whole const &amp;rhs );
bool operator &lt;=( big_whole const &amp;lhs, big_whole const &amp;rhs );
bool operator &gt;=( big_whole const &amp;lhs, big_whole const &amp;rhs );
big_whole operator &amp;( big_whole const &amp;lhs, big_whole const &amp;rhs );
big_whole operator |( big_whole const &amp;lhs, big_whole const &amp;rhs );
big_whole operator ^( big_whole const &amp;lhs, big_whole const &amp;rhs );
big_whole operator &gt;&gt;( big_whole const &amp;value, big_whole const &amp;shift );
big_whole operator &lt;&lt;( big_whole const &amp;value, big_whole const &amp;shift );
big_whole operator +( big_whole const &amp;augend, big_whole const &amp;addend );
big_whole operator -( big_whole const &amp;minuend, big_whole const &amp;subtrahend );
big_whole &amp; operator &amp;=( big_whole &amp;lhs, big_whole const &amp;rhs );
big_whole &amp; operator |=( big_whole &amp;lhs, big_whole const &amp;rhs );
big_whole &amp; operator ^=( big_whole &amp;lhs, big_whole const &amp;rhs );
big_whole &amp; operator &gt;&gt;=( big_whole &amp;lhs, big_whole const &amp;rhs );
big_whole &amp; operator &lt;&lt;=( big_whole &amp;lhs, big_whole const &amp;rhs );
big_whole &amp; operator +=( big_whole &amp;lhs, big_whole const &amp;rhs );
big_whole &amp; operator -=( big_whole &amp;lhs, big_whole const &amp;rhs );
}
}
namespace std
{
template &lt; &gt; class numeric_limits&lt; boost::math::big_whole &gt;;
}
</pre></blockquote>
<h3><a name="c_bigwhole">Unlimited-Length Nonnegative Integer Type</a></h3>
<p>Objects from the <code>boost::math::big_whole</code> class represent unlimited-length nonnegative integers. Even though the implemenation is advanced, objects from this type can be passed around like any other value-based type. The usual mathematical functions and operators are provided. These objects have a binary (<i>i.e.</i> radix-2) representation, so various bit-twiddling functions and operators are also provided.</p>
<blockquote><pre>
#include &lt;boost/cstdint.hpp&gt; <i>// for boost::uintmax_t</i>
#include &lt;cstddef&gt; <i>// for std::size_t</i>
#include &lt;valarray&gt; <i>// for std::valarray</i>
class boost::math::big_whole
{
public:
// Lifetime management
big_whole();
big_whole( big_whole const &amp;other );
big_whole( boost::uintmax_t v );
explicit big_whole( std::valarray&lt;bool&gt; const &amp;b );
explicit big_whole( std::valarray&lt;std::size_t&gt; const &amp;i );
// Object-mutating operations
void swap( big_whole &amp;other );
void assign( big_whole const &amp;other );
void assign( boost::uintmax_t v );
void reconfigure( std::valarray&lt;bool&gt; const &amp;b );
void reconfigure( std::valarray&lt;std::size_t&gt; const &amp;i );
// Value-accessing operations
uintmax_t to_uintmax() const;
std::valarray&lt;bool&gt; to_bit_vector() const;
std::valarray&lt;std::size_t&gt; to_bit_indices() const;
bool is_even() const;
// Bit-twiddling operations
void reset();
void reset( std::size_t from, std::size_t to );
void reset( std::size_t i );
void set( std::size_t from, std::size_t to );
void set( std::size_t i );
void flip( std::size_t from, std::size_t to );
void flip( std::size_t i );
void bit_assign( std::size_t from, std::size_t to, bool value );
void bit_assign( std::size_t i, bool value );
void bits_assign( std::size_t from, std::size_t to, big_whole const &amp;values );
// Bit-inspecting operations
std::size_t length() const;
std::size_t count() const;
bool any() const;
bool none() const;
bool test( std::size_t i ) const;
big_whole tests( std::size_t from, std::size_t to ) const;
big_whole reverse( std::size_t cap ) const;
big_whole reverse() const;
std::size_t search_tested_bit( std::size_t from, bool value, bool increase_indices ) const;
std::size_t next_tested_bit( std::size_t from, bool value ) const;
std::size_t previous_tested_bit( std::size_t from, bool value ) const;
std::size_t next_set_bit( std::size_t from ) const;
std::size_t next_reset_bit( std::size_t from ) const;
std::size_t previous_set_bit( std::size_t from ) const;
std::size_t previous_reset_bit( std::size_t from ) const;
// Self-operator mutators
void not_self();
void same_self();
void negate_self();
// Object-accessing operations
int compare( big_whole const &amp;other ) const;
bool intersects( big_whole const &amp;other ) const;
std::size_t scale() const;
// Operators
big_whole &amp; operator =( big_whole const &amp;rhs );
operator <em>bool_type</em>() const;
big_whole &amp; operator ++();
big_whole &amp; operator --();
};
</pre></blockquote>
<h4><a name="c_bw_ctr">Constructors</a></h4>
<p><strong>Note:</strong> the automatically-defined destructor is used.</p>
<dl>
<dt><code>big_whole();</code>
<dd>
<strong>Effects:</strong> sets the internal state such that the stored numerical value is zero (using a minimal amount of memory)<br>
<strong>Rationale:</strong> standard default-state creation
<dt><code>big_whole( big_whole &amp;other );</code>
<dd>
<strong>Effects:</strong> sets the internal state such that the stored numerical value is the same as the numerical value stored in <var>other</var><br>
<strong>Rationale:</strong> standard creation via copying
<dt><code>big_whole( boost::uintmax_t v );</code>
<dd>
<strong>Effects:</strong> sets the internal state such that the stored numerical value is the same as <var>v</var><br>
<strong>Rationale:</strong> creation via conversion
<dt><code>explicit big_whole( std::valarray&lt;bool&gt; const &amp;b );</code>
<dd>
<strong>Effects:</strong> sets the internal state such that the stored numerical value has the same bit pattern as <var>b</var><br>
<strong>Rationale:</strong> creation via bit-pattern
<dt><code>explicit big_whole( std::valarray&lt;std::size_t&gt; const &amp;i );</code>
<dd>
<strong>Effects:</strong> sets the internal state such that the stored numerical value has its set bits at the positions given by <var>i</var><br>
<strong>Rationale:</strong> creation via set-bit-location specification
</dl>
<h4><a name="c_bw_observe">Observer Member Functions</a></h4>
<dl>
<dt><code>boost::uintmax_t to_uintmax() const;</code>
<dd>
<strong>Returns:</strong> the numeric value stored in <code>*this</code>, reduced modulo 2<sup><code>std::numeric_limits&lt; boost::uintmax_t &gt;::digits</code></sup><br>
<strong>Rationale:</strong> explicit reverse conversion
<dt><code>std::valarray&lt;bool&gt; to_bit_vector() const;</code>
<dd>
<strong>Returns:</strong> the bit pattern for the numeric value stored in <code>*this</code><br>
<strong>Rationale:</strong> break down to a bit pattern
<dt><code>std::valarray&lt;std::size_t&gt; to_bit_indices() const;</code>
<dd>
<strong>Returns:</strong> the places of the set bits for the numeric value stored in <code>*this</code><br>
<strong>Rationale:</strong> break down to a set-bit index list
<dt><code>bool is_even() const;</code>
<dd>
<strong>Returns:</strong> whether the numeric value stored in <code>*this</code> is even (or odd if not)<br>
<strong>Note:</strong> same as <code>*this % 2 == 0</code>, but is probably implemented more efficiently<br>
<strong>Rationale:</strong> simple even/odd test
<dt><code>std::size_t length() const;</code>
<dd>
<strong>Returns:</strong> the smallest nonnegative integer, <var>n</var>, such that 2<sup><var>n</var></sup> is greater than the numeric value stored in <code>*this</code> (returns 0 if <code>*this</code> represents zero)<br>
<strong>Note:</strong> same as <code>this-&gt;to_bit_vector().size()</code> or (for nonzero length) <code>1 + this-&gt;to_bit_indices().max()</code>, but is probably implemented more efficiently<br>
<strong>Rationale:</strong> size of bit-pattern vector
<dt><code>std::size_t count() const;</code>
<dd>
<strong>Returns:</strong> the number of set bits in the numeric value stored in <code>*this</code><br>
<strong>Note:</strong> same as <code>this-&gt;to_bit_indices().size()</code>, but is probably implemented more efficiently<br>
<strong>Rationale:</strong> size of set-bit index list
<dt><code>bool any() const;</code>
<dd>
<strong>Returns:</strong> whether any bits in the numeric value stored in <code>*this</code> are set<br>
<strong>Note:</strong> same as <code>this-&gt;count() &gt; 0</code>, but is probably implemented more efficiently<br>
<strong>Rationale:</strong> reversed zero test
<dt><code>bool none() const;</code>
<dd>
<strong>Returns:</strong> whether no bits in the numeric value stored in <code>*this</code> are set<br>
<strong>Note:</strong> same as <code>!this-&gt;any()</code><br>
<strong>Rationale:</strong> zero test
<dt><code>bool test( std::size_t i ) const;</code>
<dd>
<strong>Returns:</strong> whether the bit corresponding to the 2<sup><var>i</var></sup> place for the numeric value stored in <code>*this</code> is set<br>
<strong>Rationale:</strong> inspect a specific bit
<dt><code>big_whole tests( std::size_t from, std::size_t to ) const;</code>
<dd>
<strong>Precondition:</strong> <code>from &lt;= to</code><br>
<strong>Returns:</strong> states of the bits corresponding between the 2<sup><var>from</var></sup> and 2<sup><var>to</var></sup> places (inclusive) for the numeric value stored in <code>*this</code>; equivalent to <code>(*this % 2<sup><var>to</var> + 1</sup>) / 2<sup><var>from</var></sup></code><br>
<strong>Rationale:</strong> inspect a set of bits at once
<dt><code>big_whole reverse( std::size_t cap ) const;</code>
<dd>
<strong>Returns:</strong> a copy of the lowest <var>cap</var> + 1 bits (<i>i.e.</i> apply a modulo 2<sup><var>cap</var> + 1</sup>) of <code>*this</code> in reverse order (<i>e.g.</i> for <var>n</var> ranging from 0 to <var>cap</var>, the bit in the 2<sup><var>n</var></sup> place now appears in the 2<sup><var>cap</var> - <var>n</var></sup> place)<br>
<strong>Rationale:</strong> generate bit-pattern palidromes
<dt><code>big_whole reverse() const;</code>
<dd>
<strong>Returns:</strong> 0 if <code>*this</code> represents zero; otherwise, <code>this-&gt;reverse( this-&gt;length() - 1 )</code><br>
<strong>Rationale:</strong> shorthand for the most common case of bit-order reversal (minimal amount for all significant bits)
<dt><code>std::size_t search_tested_bit( std::size_t from, bool value, bool increase_indices ) const;</code>
<dd>
<strong>Returns:</strong> if <var>increase_indices</var> is TRUE, then <code>this-&gt;next_tested_bit( <var>from</var>, <var>value</var> )</code>, else <code>this-&gt;previous_tested_bit( <var>from</var>, <var>value</var> )</code><br>
<strong>Rationale:</strong> most general bit-searching routine
<dt><code>std::size_t next_tested_bit( std::size_t from, bool value ) const;</code>
<dd>
<strong>Returns:</strong> the index of the first bit after <var>from</var> that is equal to <var>value</var>, 0 if such a bit cannot be found<br>
<strong>Rationale:</strong> forward searching for a specific bit value
<dt><code>std::size_t previous_tested_bit( std::size_t from, bool value ) const;</code>
<dd>
<strong>Returns:</strong> the index of the first bit before <var>from</var> that is equal to <var>value</var>, the maximum <code>std::size_t</code> value if such a bit cannot be found<br>
<strong>Rationale:</strong> backward searching for a specific bit value
<dt><code>std::size_t next_set_bit( std::size_t from ) const;</code>
<dd>
<strong>Returns:</strong> <code>this-&gt;next_tested_bit( <var>from</var>, true )</code><br>
<strong>Rationale:</strong> forward searching for a TRUE bit
<dt><code>std::size_t next_reset_bit( std::size_t from ) const;</code>
<dd>
<strong>Returns:</strong> <code>this-&gt;next_tested_bit( <var>from</var>, false )</code><br>
<strong>Rationale:</strong> forward searching for a FALSE bit
<dt><code>std::size_t previous_set_bit( std::size_t from ) const;</code>
<dd>
<strong>Returns:</strong> <code>this-&gt;previous_tested_bit( <var>from</var>, true )</code><br>
<strong>Rationale:</strong> backward searching for a TRUE bit
<dt><code>std::size_t previous_reset_bit( std::size_t from ) const;</code>
<dd>
<strong>Returns:</strong> <code>this-&gt;previous_tested_bit( <var>from</var>, false )</code><br>
<strong>Rationale:</strong> backward searching for a FALSE bit
<dt><code>int compare( big_whole const &amp;other ) const;</code>
<dd>
<strong>Returns:</strong> zero if <code>*this</code> and <var>other</var> represent the same value, a positive number if <code>*this</code> is the greater, and a negative number if <code>*this</code> is the lesser (<i>i.e.</i> <var>other</var> is the greater)<br>
<strong>Rationale:</strong> equality/ordered comparison core routine
<dt><code>bool intersects( big_whole const &amp;other ) const;</code>
<dd>
<strong>Returns:</strong> whether there is at least one bit place that is set in both <code>*this</code> and <var>other</var><br>
<strong>Note:</strong> same as <code>(*this &amp; <var>other</var>) != 0</code>, but is probably implemented more efficiently<br>
<strong>Rationale:</strong> simple bit-set intersection test
<dt><code>std::size_t scale() const;</code>
<dd>
<strong>Returns:</strong> zero if <code>*this</code> represents zero, otherwise the smallest nonnegative integer <var>x</var> such that <code>*this &gt;&gt; <var>x</var></code> is odd<br>
<strong>Rationale:</strong> find number of trailing zeroes
</dl>
<h4><a name="c_bw_mutate">Mutating Member Functions</a></h4>
<dl>
<dt><code>void swap( big_whole &amp;other );</code>
<dd>
<strong>Effects:</strong> <code>*this</code> takes ownership of <var>other</var>'s state; <var>other</var> takes ownership of the state <code>*this</code> had before this member function call<br>
<strong>Rationale:</strong> standard class-type-specific swap member-function refinement
<dt><code>void assign( big_whole const &amp;other );</code>
<dd>
<strong>Effects:</strong> sets the internal state to a copy of <var>other</var>'s state<br>
<strong>Postconditions:</strong> <code>*this == <var>other</var></code><br>
<strong>Rationale:</strong> member-function repackaging of copy operation
<dt><code>void assign( uintmax_t v );</code>
<dd>
<strong>Effects:</strong> sets the internal state to give a numeric value equivalent to <var>v</var><br>
<strong>Postconditions:</strong> <code>*this == big_whole( <var>v</var> )</code><br>
<strong>Rationale:</strong> converting copy operation
<dt><code>void reconfigure( std::valarray&lt;bool&gt; const &amp;b );</code>
<dd>
<strong>Effects:</strong> sets the internal state to give a numeric value that has the bit pattern given by <var>b</var><br>
<strong>Postconditions:</strong> <code>*this == big_whole( <var>b</var> )</code><br>
<strong>Rationale:</strong> re-configuring copy operation with a bit pattern
<dt><code>void reconfigure( std::valarray&lt;std::size_t&gt; const &amp;i );</code>
<dd>
<strong>Effects:</strong> sets the internal state to give a numeric value that has only the bit positions given by <var>i</var> set<br>
<strong>Postconditions:</strong> <code>*this == big_whole( <var>i</var> )</code><br>
<strong>Rationale:</strong> re-configuring copy operation with a list of the set bits
<dt><code>void reset();</code><br>
<code>void reset( std::size_t from, std::size_t to );</code><br>
<code>void reset( std::size_t i );</code>
<dd>
<strong>Effects:</strong> changes the internal state so some set of the bits of the represented value become zero; the zero-argument version affects all bits, the two-argument version affects the bits between the 2<sup><var>from</var></sup> and 2<sup><var>to</var></sup> places (inclusive), the one-argument version affects the bit at the 2<sup><var>i</var></sup> place<br>
<strong>Rationale:</strong> specific-bit(s) assignment, unsetting
<dt><code>void set( std::size_t from, std::size_t to );</code><br>
<code>void set( std::size_t i );</code>
<dd>
<strong>Effects:</strong> changes the internal state so some set of the bits of the represented value become one; the two-argument version affects the bits between the 2<sup><var>from</var></sup> and 2<sup><var>to</var></sup> places (inclusive), the one-argument version affects the bit at the 2<sup><var>i</var></sup> place<br>
<strong>Rationale:</strong> specific-bit(s) assignment, setting
<dt><code>void flip( std::size_t from, std::size_t to );</code><br>
<code>void flip( std::size_t i );</code>
<dd>
<strong>Effects:</strong> changes the internal state so some set of the bits of the represented value become inverted (zeroes become ones, ones become zeroes); the two-argument version affects the bits between the 2<sup><var>from</var></sup> and 2<sup><var>to</var></sup> places (inclusive), the one-argument version affects the bit at the 2<sup><var>i</var></sup> place<br>
<strong>Rationale:</strong> specific-bit(s) assignment, inverting
<dt><code>void bit_assign( std::size_t from, std::size_t to, bool value );</code><br>
<code>void bit_assign( std::size_t i, bool value );</code>
<dd>
<strong>Effects:</strong> changes the internal state so some set of the bits of the represented value become <var>value</var>; the three-argument version affects the bits between the 2<sup><var>from</var></sup> and 2<sup><var>to</var></sup> places (inclusive), the two-argument version affects the bit at the 2<sup><var>i</var></sup> place<br>
<strong>Rationale:</strong> specific-bit(s) assignment, user-defined constant value
<dt><code>void bits_assign( std::size_t from, std::size_t to, big_whole const &amp;values );</code>
<dd>
<strong>Precondition:</strong> <code>from &lt;= to</code><br>
<strong>Effects:</strong> changes the internal state so the set of bits between the 2<sup><var>from</var></sup> and 2<sup><var>to</var></sup> places (inclusive) of the represented value become (the lowest <var>to</var> - <var>from</var> + 1 bits of) <var>values</var>; in other words, <code>*this ^= (((*this / 2<sup><var>from</var></sup>) ^ <var>values</var>) * 2<sup><var>from</var></sup>) % 2<sup><var>to</var> + 1</sup></code><br>
<strong>Rationale:</strong> specific-bit(s) assignment, user-defined specific values
<dt><code>void not_self();</code>
<dd>
<strong>Effects:</strong> changes the internal state so a value of zero becomes one and any nonzero value becomes zero<br>
<strong>Rationale:</strong> doing <code>x = !x</code> without the copying
<dt><code>void same_self();</code>
<dd>
<strong>Effects:</strong> none (may secretly optimize storage....)<br>
<strong>Rationale:</strong> doing <code>x = +x</code> without the copying
<dt><code>void negate_self();</code>
<dd>
<strong>Effects:</strong> changes the internal value to its additive inverse<br>
<strong>Throws:</strong> <code>std::range_error</code> if the inverse cannot be represented<br>
<strong>Note:</strong> since this type can only store nonnegative values, all stored positive values will throw; the sole representable nonpositive value, zero, is the only one that does not throw (but it transforms to itself)<br>
<strong>Rationale:</strong> doing <code>x = -x</code> without the copying
</dl>
<h4><a name="c_bw_ops">Operators</a></h4>
<dl>
<dt><code>big_whole &amp; operator =( big_whole const &amp;rhs );</code>
<dd>
<strong>Effects:</strong> calls <code>this-&gt;assign( <var>rhs</var> )</code><br>
<strong>Returns:</strong> <code>*this</code><br>
<strong>Rationale:</strong> standard copy-assignment operation
<dt><code>operator <em>bool_type</em>() const;</code>
<dd>
<strong>Returns:</strong> if <code>this-&gt;any()</code>, then some non-zero/non-null/true value, otherwise a zero/null/false value<br>
<strong>Note:</strong> <code><em>bool_type</em></code> is an unspecified built-in type that supports Boolean semantics and should have a minimum of common non-Boolean semantics (this probably excludes <code>bool</code> since that type [mistakenly?] fully participates in integral and/or numeric operations)<br>
<strong>Rationale:</strong> Boolean (output) conversion
<dt><code>big_whole &amp; operator ++();</code>
<dd>
<strong>Effects:</strong> increases the internal value by one<br>
<strong>Returns:</strong> <code>*this</code><br>
<strong>Rationale:</strong> pre-increment
<dt><code>big_whole &amp; operator --();</code>
<dd>
<strong>Effects:</strong> decreases the internal value by one<br>
<strong>Returns:</strong> <code>*this</code><br>
<strong>Throws:</strong> <code>std::range_error</code> if the internal value is currently zero (because the next lower value, -1, cannot be represented by this type)<br>
<strong>Rationale:</strong> pre-decrement
</dl>
<h3><a name="c_nm_funcs">Non-Member Functions &amp; Operators</a></h3>
<blockquote><pre>
void
boost::math::swap( boost::math::big_whole &amp;a, boost::math::big_whole &amp;b );
</pre></blockquote>
<p><strong>Effects:</strong> calls <code><var>a</var>.swap( <var>b</var> )</code></p>
<p><strong>Postconditions:</strong> <var>a</var> has the state that <var>b</var> had before the function call; <var>b</var> has the state <var>a</var> had before the function call</p>
<p><strong>Rationale:</strong> exchanges the state of two objects; can use in standard(-like) algorithms with ADL</p>
<blockquote><pre>
boost::math::big_whole
boost::math::and_not( boost::math::big_whole const &amp;a, boost::math::big_whole const &amp;b );
</pre></blockquote>
<p><strong>Returns:</strong> an object with a set of bits such that a particular bit is set only if the corresponding bit in <var>a</var> is set and the corresponding bit in <var>b</var> is <em>un</em>set</p>
<p><strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code></p>
<p><strong>Rationale:</strong> a method to compute <code><var>a</var> &amp; ~<var>b</var></code> without the need for the bitwise-complement operator (<code>big_whole</code> cannot have that operator because it gives a result approaching infinity for any input)</p>
<blockquote><pre>
boost::math::big_whole
boost::math::abs( boost::math::big_whole const &amp;w );
</pre></blockquote>
<p><strong>Returns:</strong> the absolute value of <var>w</var></p>
<p><strong>Note:</strong> since <code>big_whole</code> only supports nonnegative values, this function always returns a copy of <var>w</var></p>
<p><strong>Rationale:</strong> finding the absolute value with a function profile used in the standard</p>
<blockquote><pre>
short
boost::math::sgn( boost::math::big_whole const &amp;w );
</pre></blockquote>
<p><strong>Returns:</strong> -1, 0, or +1 depending on <var>w</var> being negative, zero, or positive, respectively</p>
<p><strong>Note:</strong> since <code>big_whole</code> only supports nonnegative values, this function only returns zero or one</p>
<p><strong>Rationale:</strong> finding the sign of a number</p>
<h4><a name="c_nm_ops">Operators</a></h4>
<dl>
<dt><code>boost::math::big_whole boost::math::operator !( boost::math::big_whole const &amp;w );</code>
<dd>
<strong>Returns:</strong> 1 if <var>w</var> represents zero, 0 otherwise<br>
<strong>Note:</strong> calls <code>big_whole::not_self()</code>
<dt><code>boost::math::big_whole boost::math::operator +( boost::math::big_whole const &amp;w );</code>
<dd>
<strong>Returns:</strong> <var>w</var><br>
<strong>Note:</strong> calls <code>big_whole::same_self()</code>
<dt><code>boost::math::big_whole boost::math::operator -( boost::math::big_whole const &amp;w );</code>
<dd>
<strong>Returns:</strong> the additive inverse of <var>w</var>, if it is representable<br>
<strong>Throws:</strong> <code>std::range_error</code> if the inverse cannot be represented (which is true for any nonzero value since <code>big_whole</code> can only store nonnegative values)<br>
<strong>Note:</strong> calls <code>big_whole::negate_self()</code>
<dt><code>boost::math::big_whole boost::math::operator ++( boost::math::big_whole &amp;w, int );</code><br>
<code>boost::math::big_whole boost::math::operator --( boost::math::big_whole &amp;w, int );</code>
<dd>
<strong>Effects:</strong> for operator <code><var>$$</var></code>, calls <code><var>w</var>.operator <var>$$</var>()</code><br>
<strong>Returns:</strong> a copy of <var>w</var> before the change
<dt><code>bool boost::math::operator ==( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>bool boost::math::operator !=( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>bool boost::math::operator &lt;( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>bool boost::math::operator &gt;( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>bool boost::math::operator &lt;=( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>bool boost::math::operator &gt;=( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code>
<dd>
<strong>Returns:</strong> whether the given relation applies to <var>lhs</var> and <var>rhs</var><br>
<strong>Note:</strong> calls <code>big_whole::compare()</code>
<dt><code>boost::math::big_whole boost::math::operator &amp;( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code>
<dd>
<strong>Returns:</strong> an object produced by a bitwise-AND combination of the bits in <var>lhs</var> and <var>rhs</var> (a bit in the result is set if both the corresponding bits in <var>lhs</var> and <var>rhs</var> are set, otherwise the bit is unset)<br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole boost::math::operator |( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code>
<dd>
<strong>Returns:</strong> an object produced by a bitwise-OR combination of the bits in <var>lhs</var> and <var>rhs</var> (a bit in the result is set if at least one of the corresponding bits in <var>lhs</var> or <var>rhs</var> is set, otherwise the bit is unset)<br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole boost::math::operator ^( boost::math::big_whole const &amp;lhs, boost::math::big_whole const &amp;rhs );</code>
<dd>
<strong>Returns:</strong> an object produced by a bitwise-XOR combination of the bits in <var>lhs</var> and <var>rhs</var> (a bit in the result is set if the corresponding bits in <var>lhs</var> and <var>rhs</var> differ, otherwise the bit is unset)<br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole boost::math::operator &gt;&gt;( boost::math::big_whole const &amp;value, boost::math::big_whole const &amp;shift );</code>
<dd>
<strong>Returns:</strong> floor( <var>value</var> / 2<sup><var>shift</var></sup> )<br>
<strong>Throws:</strong> <code>std::length_error</code> if <var>shift</var> cannot be completely represented by a <code>std::size_t</code> object<br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole boost::math::operator &lt;&lt;( boost::math::big_whole const &amp;value, boost::math::big_whole const &amp;shift );</code>
<dd>
<strong>Returns:</strong> <var>value</var> * 2<sup><var>shift</var></sup><br>
<strong>Throws:</strong> <code>std::length_error</code> if <var>shift</var> cannot be completely represented by a <code>std::size_t</code> object; <code>std::overflow_error</code> if any of the set bits in the returned object would have a bit-place index beyond <code>std::size_t</code>'s maximum value<br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole boost::math::operator +( boost::math::big_whole const &amp;augend, boost::math::big_whole const &amp;addend );</code>
<dd>
<strong>Returns:</strong> the sum of <var>augend</var> and <var>addend</var><br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole boost::math::operator -( boost::math::big_whole const &amp;minuend, boost::math::big_whole const &amp;subtrahend );</code>
<dd>
<strong>Returns:</strong> the difference between <var>minuend</var> and <var>subtrahend</var><br>
<strong>Throws:</strong> <code>std::range_error</code> if the difference cannot be represented, <i>i.e.</i> the <var>minuend</var> is less than the <var>subtrahend</var><br>
<strong>Note:</strong> <code>friend</code>ly with <code>big_whole</code>
<dt><code>boost::math::big_whole &amp; boost::math::operator &amp;=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>boost::math::big_whole &amp; boost::math::operator |=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>boost::math::big_whole &amp; boost::math::operator ^=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>boost::math::big_whole &amp; boost::math::operator &gt;&gt;=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>boost::math::big_whole &amp; boost::math::operator &lt;&lt;=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>boost::math::big_whole &amp; boost::math::operator +=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code><br>
<code>boost::math::big_whole &amp; boost::math::operator -=( boost::math::big_whole &amp;lhs, boost::math::big_whole const &amp;rhs );</code>
<dd>
<strong>Effects:</strong> for <code>operator <var>$$</var>=</code>, calls <code><var>lhs</var> = <var>lhs</var> <var>$$</var> <var>rhs</var></code><br>
<strong>Returns:</strong> <var>lhs</var>
</dl>
<h3><a name="c_limits">Numeric Limits</a></h3>
<p>A <code>std::numeric_limits&lt; boost::math::big_whole &gt;</code> specialization is provided, with the appropiate entries filled.</p>
<h2><a name="additional">Additional Routines</a></h2>
<p>The <cite><a href="../../../boost/math/big_whole.hpp">boost/math/big_whole.hpp</a></cite> header includes the core header and contains the declarations for routines that work with unlimited-length nonnegative integers but are not needed for pure computation contexts (like the input and output routines).</p>
<h3><a name="a_header">Header Synopsis</a></h3>
<blockquote><pre>
#include &lt;iosfwd&gt; <i>// for std::basic_ostream and std::basic_istream (declarations)</i>
#include &lt;string&gt; <i>// for std::basic_string</i>
#include &lt;boost/math/big_whole_core.hpp&gt; <i>// for boost::math::big_whole</i>
namespace boost
{
namespace math
{
template &lt; typename Ch, class Tr, class Al &gt;
std::basic_string&lt;Ch, Tr, Al&gt; bigwhole_to_bitstring( big_whole const &amp;w, Ch zero_char, Ch one_char );
template &lt; typename Ch, class Tr, class Al &gt;
void copy_bigwhole_to_bitstring( std::basic_string&lt;Ch, Tr, Al&gt; &amp;s, big_whole const &amp;w, Ch zero_char, Ch one_char );
template &lt; typename Ch, class Tr &gt;
std::basic_ostream&lt;Ch, Tr&gt; &amp; operator &lt;&lt;( std::basic_ostream&lt;Ch, Tr&gt; &amp;os, big_whole const &amp;w );
template &lt; typename Ch, class Tr &gt;
std::basic_istream&lt;Ch, Tr&gt; &amp; operator &gt;&gt;( std::basic_istream&lt;Ch, Tr&gt; &amp;is, big_whole &amp;w );
}
}
</pre></blockquote>
<h3><a name="a_bit_conv">Bit-String Conversion Functions</a></h3>
<blockquote><pre>
template &lt; typename Ch, class Tr, class Al &gt;
std::basic_string&lt;Ch, Tr, Al&gt;
boost::math::bigwhole_to_bitstring( boost::math::big_whole const &amp;w, Ch zero_char, Ch one_char );
</pre></blockquote>
<p><strong>Returns:</strong> a minimal-length string for the base-2 representation of <var>w</var>, where <var>zero_char</var> and <var>one_char</var> are used to represent the unset and set bits, respectively</p>
<p><strong>Rationale:</strong> provides a base-2 representation of a <code>big_whole</code> object which is suitable for text processing</p>
<blockquote><pre>
template &lt; typename Ch, class Tr, class Al &gt;
void
boost::math::copy_bigwhole_to_bitstring
(
std::basic_string&lt;Ch, Tr, Al&gt; &amp;s,
boost::math::big_whole const &amp;w,
Ch zero_char,
Ch one_char
);
</pre></blockquote>
<p><strong>Effects:</strong> assigns to <var>s</var> the result of <code>bigwhole_to_bitstring</code> using <var>w</var>, <var>zero_char</var>, and <var>one_char</var> as parameters</p>
<p><strong>Rationale:</strong> same as <code>bigwhole_to_bitstring</code>, but without the need to explicitly specify the template parameters</p>
<h3><a name="a_io_ops">Input &amp; Output Operators</a></h3>
<blockquote><pre>
template &lt; typename Ch, class Tr &gt;
std::basic_ostream&lt;Ch, Tr&gt; &amp;
boost::math::operator &lt;&lt;( std::basic_ostream&lt;Ch, Tr&gt; &amp;os, boost::math::big_whole const &amp;w );
</pre></blockquote>
<p><strong>Effects:</strong> writes characters, forming a string representation of the nonnegative integer <var>w</var>, to <var>os</var>; should use the standard numeric I/O options</p>
<p><strong>Returns:</strong> <var>os</var></p>
<p><strong>Rationale:</strong> enables <code>big_whole</code> objects to be written by streaming</p>
<blockquote><pre>
template &lt; typename Ch, class Tr &gt;
std::basic_istream&lt;Ch, Tr&gt; &amp;
boost::math::operator &gt;&gt;( std::basic_istream&lt;Ch, Tr&gt; &amp;is, boost::math::big_whole &amp;w );
</pre></blockquote>
<p><strong>Effects:</strong> reads characters, hopefully forming a string representation of a nonnegative integer, from <var>is</var>, saving any successful result in <var>w</var>; should use the standard numeric I/O options</p>
<p><strong>Returns:</strong> <var>is</var></p>
<p><strong>Rationale:</strong> enables <code>big_whole</code> objects to be read by streaming</p>
<h2><a name="refer">References</a></h2>
<ul>
<li>The arbitrary-length whole-number library core routine header: <cite><a href="../../../boost/math/big_whole_core.hpp">boost/math/big_whole_core.hpp</a></cite></li>
<li>The arbitrary-length whole-number library extra routine header: <cite><a href="../../../boost/math/big_whole.hpp">boost/math/big_whole.hpp</a></cite></li>
<li>Some test code: <cite><a href="../test/big_whole_test.cpp">big_whole_test.cpp</a></cite></li>
</ul>
<h2><a name="credits">Credits</a></h2>
<h3><a name="contributors">Contributors</a></h3>
<dl>
<dt><a href="../../../people/daryle_walker.html">Daryle Walker</a>
<dd>Started the library.
</dl>
<h3><a name="history">History</a></h3>
<dl>
<dt>30 Jan 2004, Daryle Walker
<dd>Initial version
</dl>
<hr>
<p>Revised: 16 February 2004</p>
<p>Copyright 2004 Daryle Walker. Use, modification, and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or a copy at &lt;<a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>&gt;.)</p>
</body>
</html>

3
doc/boost-build.jam Normal file
View File

@@ -0,0 +1,3 @@
boost-build ../../../../develop/boost/tools/build/v2 ;

66
doc/concepts.qbk Normal file
View File

@@ -0,0 +1,66 @@
[section Using With NTL]
The special functions and tools in this library can be used with NTL::RR and
to a lesser extent with NTL::quad_float. In order to do so you will need to
apply the following patch to NTL: libs/math/tools/ntl.diff
This patch adds trivial converting constructors to NTL::RR and NTL::quad_float,
and forces conversions to RR to proceed via `long double` rather than `double`.
The latter change is essential to accurately measure relative errors between
high precision calculations (using NTL::RR) and fixed precision calculations
(using `long double`). These occur, if for example, you are generating additional
__lanczos's.
You will also need to include NTL via the header `<boost/math/tools/ntl.hpp>`
and include that header /before/ you include any of the special function headers.
Rationale: the header `<boost/math/tools/ntl.hpp>` includes some traits classes
and boilerplate code (mostly runtime substitutes for numeric_limits) that are
required by the special functions. Unfortunately, some of the stricter compilers
require these definitions to be seen before the templates that will use them are
parsed.
Finally there is a high precision __lanczos suitable for use with NTL::RR, when
used at 1000-bit precision in libs/math/tools/ntl_rr_lanczos.hpp. The approximation
has a theoretical precision of > 90 decimal digits, and an experimental precision
of > 100 decimal digits. To use that approximation, just include that header, before
any of the special function headers (if you don't use it, you'll get a slower, but
fully generic implementation for all of the gamma-like functions).
[endsect]
[section Using With Boost.Interval]
There are currently problems comparing two intervals that make it hard to use
Boost.Interval with this library. It should be just about possible to make it
work "as is", but this needs more investigation, and a simple, easy to use solution.
[endsect]
[section Conceptual Requirements]
TODO.
See boost/math/concepts/real_concept.hpp for the current concept-architype
test case.
Basically requires:
* The usual arithmetic operations.
* The usual comparison operations.
* The usual math functions (those in <cmath>).
* Either `std::numeric_limits` support (the easy way), or a small number
helper functions that provide the same functionality at runtime
rather than compile time (see boost/math/tools/precision.hpp).
* Promotion from the builtin floating point types to T, and the function
`real_cast` that converts from T to a narrower floating point type
(see boost/math/tools/real_cast.hpp).
For efficient and accurate results, a __lanczos is also highly desireable.
You may be able to adapt an existing approximation from
boost/math/special_functions/lanczos.hpp: you will need change
static_cast's to lexical_cast's, and the constants to /strings/
(in order to ensure the coefficients aren't truncated
to long double) and then specialise lanczos_traits for type T. Otherwise
you may have to hack libs/math/tools/lanczos_generator.cpp to find a suitable
approximation for your type T.
[endsect]

517
doc/equations/beta.xml Normal file
View File

@@ -0,0 +1,517 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>a</mi>
</mrow>
</mfenced>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>b</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</msup>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mi>b</mi>
</msup>
<msqrt>
<mrow>
<mfrac>
<mi>e</mi>
<mrow>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfrac>
</mrow>
</msqrt>
<mfrac>
<mrow>
<mi>L</mi>
<mfenced>
<mrow>
<mi>a</mi>
</mrow>
</mfenced>
<mi>L</mi>
<mfenced>
<mrow>
<mi>b</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>L</mi>
<mfenced>
<mrow>
<mi>c</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mi>b</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</msup>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
<mfenced>
<mrow>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
</mrow>
<mrow>
<msup>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
<mn>2</mn>
</msup>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mi>b</mi>
</msup>
<msqrt>
<mrow>
<mfrac>
<mi>e</mi>
<mrow>
<mi>b</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfrac>
</mrow>
</msqrt>
<mfrac>
<mrow>
<mi>L</mi>
<mfenced>
<mrow>
<mi>a</mi>
</mrow>
</mfenced>
<mi>L</mi>
<mfenced>
<mrow>
<mi>b</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>L</mi>
<mfenced>
<mrow>
<mi>c</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mi>b</mi>
</mfrac>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>a</mi>
<mi>b</mi>
</mrow>
</mfrac>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mn>1,</mn>
<mi>b</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>i</mi>
<mi>f</mi>
<mspace width="1em"/>
<mi>a</mi>
<mo>&Gt;</mo>
<mi>b</mi>
<mspace width="1em"/>
<mi>a</mi>
<mi>n</mi>
<mi>d</mi>
<mspace width="1em"/>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
<mo>=</mo>
<mi>a</mi>
<mspace width="1em"/>
<mspace width="1em"/>
<mi>t</mi>
<mi>h</mi>
<mi>e</mi>
<mi>n</mi>
<mo>:</mo>
<mspace width="1em"/>
<mspace width="1em"/>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>b</mi>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>i</mi>
<mi>f</mi>
<mspace width="1em"/>
<mi>a</mi>
<mo>=</mo>
<mn>1</mn>
<mspace width="1em"/>
<mspace width="1em"/>
<mi>t</mi>
<mi>h</mi>
<mi>e</mi>
<mi>n</mi>
<mo>:</mo>
<mspace width="1em"/>
<mspace width="1em"/>
<mi>b</mi>
<mi>e</mi>
<mi>t</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mi>b</mi>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup>
<mi>e</mi>
<mrow>
<mi>l</mi>
<mi>c</mi>
<mo>&minus;</mo>
<mi>l</mi>
<mi>a</mi>
<mo>&minus;</mo>
<mi>l</mi>
<mi>b</mi>
</mrow>
</msup>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mi>l</mi>
<mi>a</mi>
</mrow>
<mrow>
<mi>l</mi>
<mi>c</mi>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mi>a</mi>
</msup>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mi>l</mi>
<mi>b</mi>
</mrow>
<mrow>
<mi>l</mi>
<mi>c</mi>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mi>b</mi>
</msup>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/beta1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

BIN
doc/equations/beta2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
doc/equations/beta3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
doc/equations/beta4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

BIN
doc/equations/beta5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

BIN
doc/equations/beta6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

BIN
doc/equations/beta7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

BIN
doc/equations/beta8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

72
doc/equations/erf.xml Normal file
View File

@@ -0,0 +1,72 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>erf</mtext>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mn>2</mn>
<mrow>
<msqrt>
<mi>&pi;</mi>
</msqrt>
</mrow>
</mfrac>
<munderover>
<mo>&Integral;</mo>
<mrow>
<mn>0</mn>
</mrow>
<mi>z</mi>
</munderover>
<msup>
<mi>e</mi>
<mrow>
<mo>&minus;</mo>
<msup>
<mi>t</mi>
<mn>2</mn>
</msup>
</mrow>
</msup>
<mi>d</mi>
<mi>t</mi>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>erfc</mtext>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mn>1</mn>
<mo>&minus;</mo>
<mtext>erf</mtext>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/erf1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

BIN
doc/equations/erf2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

41
doc/equations/error.xml Normal file
View File

@@ -0,0 +1,41 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>max</mi>
<mfenced>
<mrow>
<mo>|</mo>
<mfrac>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mi>v</mi>
</mrow>
<mi>a</mi>
</mfrac>
<mo>|</mo>
<mo>,</mo>
<mo>|</mo>
<mfrac>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mi>v</mi>
</mrow>
<mi>v</mi>
</mfrac>
<mo>|</mo>
</mrow>
</mfenced>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/error1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

BIN
doc/equations/fraction1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

BIN
doc/equations/fraction2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

BIN
doc/equations/fraction3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

BIN
doc/equations/fraction4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

BIN
doc/equations/gamm1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

BIN
doc/equations/gamm2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
doc/equations/gamm3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

BIN
doc/equations/gamm4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

BIN
doc/equations/gamm5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

299
doc/equations/gamma.xml Normal file
View File

@@ -0,0 +1,299 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>g</mi>
<mi>a</mi>
<mi>m</mi>
<mi>m</mi>
<mi>a</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<munderover>
<mo>&Integral;</mo>
<mrow>
<mn>0</mn>
</mrow>
<mi>&infin;</mi>
</munderover>
<msup>
<mi>t</mi>
<mrow>
<mi>z</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<msup>
<mi>e</mi>
<mrow>
<mo>&minus;</mo>
<mi>t</mi>
</mrow>
</msup>
<mi>d</mi>
<mi>t</mi>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfenced>
<mrow>
<msup>
<mi>l</mi>
<mi>a</mi>
</msup>
<msup>
<mi>e</mi>
<mrow>
<mo>&minus;</mo>
<mi>l</mi>
</mrow>
</msup>
</mrow>
</mfenced>
<mfenced>
<mrow>
<munderover>
<mo>&Sum;</mo>
<mrow>
<mn>0</mn>
</mrow>
<mi>&infin;</mi>
</munderover>
<mrow>
<mfrac>
<msup>
<mi>l</mi>
<mi>n</mi>
</msup>
<msup>
<mi>a</mi>
<mrow>
<mover>
<mi>n</mi>
<mo>&minus;</mo>
</mover>
</mrow>
</msup>
</mfrac>
</mrow>
<mo>+</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mfrac>
<msub>
<mi>c</mi>
<mn>1</mn>
</msub>
<mrow>
<msub>
<mi>d</mi>
<mn>1</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>c</mi>
<mn>2</mn>
</msub>
<mrow>
<msub>
<mi>d</mi>
<mn>2</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>c</mi>
<mn>3</mn>
</msub>
<mrow>
<msub>
<mi>d</mi>
<mn>3</mn>
</msub>
<mo>+</mo>
<mo>&hellip;</mo>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mo>;</mo>
<msub>
<mi>c</mi>
<mi>k</mi>
</msub>
<mo>=</mo>
<mo>&minus;</mo>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>k</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mo>&and;</mo>
<msub>
<mi>d</mi>
<mi>k</mi>
</msub>
<mo>=</mo>
<mi>a</mi>
<mo>+</mo>
<mi>k</mi>
<mo>+</mo>
<mi>l</mi>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>c</mi>
<mi>k</mi>
</msub>
<mo>=</mo>
<mo>&minus;</mo>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>k</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mo>,</mo>
<msub>
<mi>d</mi>
<mi>k</mi>
</msub>
<mo>=</mo>
<mi>a</mi>
<mo>+</mo>
<mi>k</mi>
<mo>+</mo>
<mi>l</mi>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mrow>
<mi>z</mi>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<munder>
<mi>lim</mi>
<mrow>
<mi>z</mi>
<mo>&RightArrow;</mo>
<mn>0</mn>
</mrow>
</munder>
<mfenced>
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mi>z</mi>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mo>&minus;</mo>
<mfrac>
<mi>&pi;</mi>
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mi>sin</mi>
<mfenced>
<mrow>
<mi>&pi;</mi>
<mi>z</mi>
</mrow>
</mfenced>
<mi>z</mi>
</mrow>
</mfrac>
</mrow>
</math>
</body>
</html>

244
doc/equations/ibeta.xml Normal file
View File

@@ -0,0 +1,244 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>beta</mtext>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>B</mi>
<mi>x</mi>
</msub>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msubsup>
<mo>&Integral;</mo>
<mrow>
<mn>0</mn>
</mrow>
<mi>x</mi>
</msubsup>
<msup>
<mi>t</mi>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<msup>
<mfenced>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mi>t</mi>
</mrow>
</mfenced>
<mrow>
<mi>b</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<mi>d</mi>
<mi>t</mi>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>betac</mtext>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mn>1</mn>
<mo>&minus;</mo>
<msub>
<mi>B</mi>
<mi>x</mi>
</msub>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>B</mi>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>b</mi>
<mo>,</mo>
<mi>a</mi>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>ibeta</mtext>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>I</mi>
<mi>x</mi>
</msub>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mn>1</mn>
<mrow>
<mtext>beta</mtext>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
<msubsup>
<mo>&Integral;</mo>
<mrow>
<mn>0</mn>
</mrow>
<mi>x</mi>
</msubsup>
<msup>
<mi>t</mi>
<mrow>
<mi>a</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<msup>
<mfenced>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mi>t</mi>
</mrow>
</mfenced>
<mrow>
<mi>b</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<mi>d</mi>
<mi>t</mi>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>ibetac</mtext>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mn>1</mn>
<mo>&minus;</mo>
<msub>
<mi>I</mi>
<mi>x</mi>
</msub>
<mfenced>
<mrow>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>I</mi>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>b</mi>
<mo>,</mo>
<mi>a</mi>
</mrow>
</mfenced>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/ibeta1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

BIN
doc/equations/ibeta2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

BIN
doc/equations/ibeta3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

BIN
doc/equations/ibeta4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

1076
doc/equations/igamma.xml Normal file

File diff suppressed because it is too large Load Diff

BIN
doc/equations/igamma1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

BIN
doc/equations/igamma10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 B

BIN
doc/equations/igamma11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
doc/equations/igamma11b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
doc/equations/igamma12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

BIN
doc/equations/igamma13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
doc/equations/igamma2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

BIN
doc/equations/igamma3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

BIN
doc/equations/igamma4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 B

BIN
doc/equations/igamma5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

BIN
doc/equations/igamma6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

BIN
doc/equations/igamma7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

BIN
doc/equations/igamma8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

BIN
doc/equations/igamma9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 B

797
doc/equations/lanczos.xml Normal file
View File

@@ -0,0 +1,797 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msqrt>
<mrow>
<mn>2</mn>
<mi>&pi;</mi>
</mrow>
</msqrt>
<msup>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mi>g</mi>
<mo>+</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mn>0.5</mn>
</mrow>
</msup>
<msup>
<mi>e</mi>
<mrow>
<mo>&minus;</mo>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mi>g</mi>
<mo>+</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
</mrow>
</msup>
<msub>
<mi>S</mi>
<mi>g</mi>
</msub>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>S</mi>
<mi>g</mi>
</msub>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mo>[</mo>
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
<msub>
<mi>a</mi>
<mn>0</mn>
</msub>
<mo>+</mo>
<msub>
<mi>a</mi>
<mn>1</mn>
</msub>
<mfrac>
<mi>z</mi>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfrac>
<mo>+</mo>
<msub>
<mi>a</mi>
<mn>2</mn>
</msub>
<mfrac>
<mrow>
<mi>z</mi>
<mfenced>
<mrow>
<mi>z</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mrow>
<mrow>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mn>2</mn>
</mrow>
</mfenced>
</mrow>
</mfrac>
<mo>+</mo>
<mo>&hellip;</mo>
<mo>]</mo>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>a</mi>
<mi>k</mi>
</msub>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>k</mi>
</msup>
<msqrt>
<mrow>
<mfrac>
<mn>2</mn>
<mi>&pi;</mi>
</mfrac>
</mrow>
</msqrt>
<msup>
<mi>e</mi>
<mi>g</mi>
</msup>
<mi>k</mi>
<munderover>
<mo>&Sum;</mo>
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mi>k</mi>
</munderover>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>j</mi>
</msup>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>k</mi>
<mo>+</mo>
<mi>j</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
<mrow>
<mfenced>
<mrow>
<mi>k</mi>
<mo>&minus;</mo>
<mi>j</mi>
</mrow>
</mfenced>
<mo>!</mo>
<mi>j</mi>
<mo>!</mo>
</mrow>
</mfrac>
<msup>
<mfenced>
<mrow>
<mfrac>
<mi>e</mi>
<mrow>
<mi>j</mi>
<mo>+</mo>
<mi>g</mi>
<mo>+</mo>
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mrow>
<mi>j</mi>
<mo>+</mo>
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mrow>
</msup>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<mfrac>
<msup>
<mfenced>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
<mrow>
<mi>z</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</msup>
<msup>
<mi>e</mi>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</msup>
</mfrac>
<msub>
<mi>L</mi>
<mi>g</mi>
</msub>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>;</mo>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>L</mi>
<mi>g</mi>
</msub>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<msub>
<mi>C</mi>
<mn>0</mn>
</msub>
<mo>+</mo>
<munderover>
<mo>&Sum;</mo>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</munderover>
<mfrac>
<msub>
<mi>C</mi>
<mi>N</mi>
</msub>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mi>k</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>D</mi>
<mrow>
<mi>i</mi>
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mo>{</mo>
<mtable>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>i</mi>
<mo>&NotEqual;</mo>
<mi>j</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>i</mi>
<mo>=</mo>
<mi>j</mi>
<mo>=</mo>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mo>&minus;</mo>
<mn>1</mn>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>i</mi>
<mo>=</mo>
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mfrac>
<mrow>
<msub>
<mi>D</mi>
<mrow>
<mi>i</mi>
<mo>&minus;</mo>
<mn>1,</mn>
<mi>i</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msub>
<mn>2</mn>
<mfenced>
<mrow>
<mn>2</mn>
<mi>i</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>i</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfrac>
</mtd>
<mtd>
<mspace width="1em"/>
</mtd>
<mtd>
<mi>o</mi>
<mi>t</mi>
<mi>h</mi>
<mi>e</mi>
<mi>r</mi>
<mi>w</mi>
<mi>i</mi>
<mi>s</mi>
<mi>e</mi>
</mtd>
</mtr>
</mtable>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>B</mi>
<mrow>
<mi>i</mi>
<mo>,</mo>
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mo>{</mo>
<mtable>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>i</mi>
<mo>=</mo>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mo>&minus;</mo>
<msup>
<mn>1</mn>
<mrow>
<mi>j</mi>
<mo>&minus;</mo>
<mi>i</mi>
</mrow>
</msup>
<mi>X</mi>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>i</mi>
<mo>></mo>
<mn>0</mn>
</mtd>
<mtd>
<mi>j</mi>
<mo>&GreaterEqual;</mo>
<mi>i</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mspace width="1em"/>
</mtd>
<mtd>
<mi>o</mi>
<mi>t</mi>
<mi>h</mi>
<mi>e</mi>
<mi>r</mi>
<mi>w</mi>
<mi>i</mi>
<mi>s</mi>
<mi>e</mi>
</mtd>
</mtr>
</mtable>
<mspace width="1em"/>
<mspace width="1em"/>
<mo>;</mo>
<mspace width="1em"/>
<mspace width="1em"/>
<mi>X</mi>
<mo>=</mo>
<mfenced>
<mrow>
<mtable>
<mtr>
<mtd>
<mi>i</mi>
<mo>+</mo>
<mi>j</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>j</mi>
<mo>&minus;</mo>
<mi>i</mi>
</mtd>
</mtr>
</mtable>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>C</mi>
<mrow>
<mi>i</mi>
<mo>,</mo>
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mo>{</mo>
<mtable>
<mtr>
<mtd>
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>i</mi>
<mo>=</mo>
<mi>j</mi>
<mo>=</mo>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mi>i</mi>
<mi>f</mi>
</mtd>
<mtd>
<mi>j</mi>
<mo>></mo>
<mi>i</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mo>&minus;</mo>
<msup>
<mn>1</mn>
<mrow>
<mi>i</mi>
<mo>&minus;</mo>
<mi>j</mi>
</mrow>
</msup>
<mi>S</mi>
</mtd>
<mtd>
<mspace width="1em"/>
</mtd>
<mtd>
<mi>o</mi>
<mi>t</mi>
<mi>h</mi>
<mi>e</mi>
<mi>r</mi>
<mi>w</mi>
<mi>i</mi>
<mi>s</mi>
<mi>e</mi>
</mtd>
</mtr>
</mtable>
<mspace width="1em"/>
<mspace width="1em"/>
<mo>;</mo>
<mspace width="1em"/>
<mspace width="1em"/>
<mi>S</mi>
<mo>=</mo>
<mrow>
<munderover>
<mo>&Sum;</mo>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mi>i</mi>
</munderover>
<mfenced>
<mrow>
<mtable>
<mtr>
<mtd>
<mn>2</mn>
<mi>i</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>2</mn>
<mi>k</mi>
</mtd>
</mtr>
</mtable>
</mrow>
</mfenced>
<mfenced>
<mrow>
<mtable>
<mtr>
<mtd>
<mi>k</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>k</mi>
<mo>+</mo>
<mi>j</mi>
<mo>&minus;</mo>
<mi>i</mi>
</mtd>
</mtr>
</mtable>
</mrow>
</mfenced>
</mrow>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>F</mi>
<mi>i</mi>
</msub>
<mo>=</mo>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mn>2</mn>
<mi>i</mi>
</mrow>
</mfenced>
<mo>!</mo>
<msup>
<mi>e</mi>
<mrow>
<mi>i</mi>
<mo>+</mo>
<mi>g</mi>
<mo>+</mo>
<mn>0.5</mn>
</mrow>
</msup>
</mrow>
<mrow>
<mi>i</mi>
<mo>!</mo>
<msup>
<mn>2</mn>
<mrow>
<mn>2</mn>
<mi>i</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<msup>
<mfenced>
<mrow>
<mi>i</mi>
<mo>+</mo>
<mi>g</mi>
<mo>+</mo>
<mn>0.5</mn>
</mrow>
</mfenced>
<mrow>
<mi>i</mi>
<mo>+</mo>
<mn>0.5</mn>
</mrow>
</msup>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>&Gamma;</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>=</mo>
<msup>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mi>z</mi>
<mo>+</mo>
<mi>g</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
<mi>e</mi>
</mfrac>
</mrow>
</mfenced>
<mrow>
<mi>z</mi>
<mo>&minus;</mo>
<mn>0.5</mn>
</mrow>
</msup>
<msub>
<mi>L</mi>
<mrow>
<mi>g</mi>
<mo>,</mo>
<mi>e</mi>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mo>;</mo>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/lanczos0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

BIN
doc/equations/lanczos0a.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

BIN
doc/equations/lanczos0b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
doc/equations/lanczos1.emf Normal file

Binary file not shown.

BIN
doc/equations/lanczos1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

BIN
doc/equations/lanczos2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

BIN
doc/equations/lanczos3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 B

BIN
doc/equations/lanczos4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
doc/equations/lanczos5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
doc/equations/lanczos6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

BIN
doc/equations/lanczos7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

BIN
doc/equations/lgamm1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

BIN
doc/equations/lgamm2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
doc/equations/lgamm3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

BIN
doc/equations/lgamm4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

BIN
doc/equations/lgamm5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
doc/equations/lgamm6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
doc/equations/lgamma.xml Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

200
doc/equations/roots.xml Normal file
View File

@@ -0,0 +1,200 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>x</mi>
<mrow>
<mi>N</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>x</mi>
<mi>N</mi>
</msub>
<mo>&minus;</mo>
<mfrac>
<mrow>
<mi>f</mi>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>f</mi>
<mo>&prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>x</mi>
<mrow>
<mi>N</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>x</mi>
<mi>N</mi>
</msub>
<mo>&minus;</mo>
<mfrac>
<mrow>
<mn>2</mn>
<mi>f</mi>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mi>f</mi>
<mo>&prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mn>2</mn>
<msup>
<mfenced>
<mrow>
<mi>f</mi>
<mo>&prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</mfenced>
<mn>2</mn>
</msup>
<mo>&minus;</mo>
<mi>f</mi>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mi>f</mi>
<mo>&Prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>x</mi>
<mrow>
<mi>N</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>x</mi>
<mi>N</mi>
</msub>
<mo>&minus;</mo>
<mfrac>
<mrow>
<mi>f</mi>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>f</mi>
<mo>&prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</mfrac>
<mo>&minus;</mo>
<mfrac>
<mrow>
<mi>f</mi>
<mo>&Prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<msup>
<mfenced>
<mrow>
<mi>f</mi>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</mfenced>
<mn>2</mn>
</msup>
</mrow>
<mrow>
<mn>2</mn>
<msup>
<mfenced>
<mrow>
<mi>f</mi>
<mo>&prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</mfenced>
<mn>3</mn>
</msup>
</mrow>
</mfrac>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/roots1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
doc/equations/roots2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 B

BIN
doc/equations/roots3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

BIN
doc/equations/roots4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

336
doc/equations/tools.xml Normal file
View File

@@ -0,0 +1,336 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>log</mi>
<mfenced>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<munderover>
<mo>&Sum;</mo>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>&infin;</mi>
</munderover>
<mfrac>
<mrow>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mrow>
<mi>k</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msup>
<msup>
<mi>z</mi>
<mi>k</mi>
</msup>
</mrow>
<mi>k</mi>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>b</mi>
<mn>0</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>1</mn>
</msub>
<mrow>
<msub>
<mi>b</mi>
<mn>1</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>2</mn>
</msub>
<mrow>
<msub>
<mi>b</mi>
<mn>2</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>3</mn>
</msub>
<mrow>
<msub>
<mi>b</mi>
<mn>3</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>4</mn>
</msub>
<msub>
<mi>b</mi>
<mn>4</mn>
</msub>
</mfrac>
<mo>+</mo>
<mo>&hellip;</mo>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mfrac>
<msub>
<mi>a</mi>
<mn>1</mn>
</msub>
<mrow>
<msub>
<mi>b</mi>
<mn>1</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>2</mn>
</msub>
<mrow>
<msub>
<mi>b</mi>
<mn>2</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>3</mn>
</msub>
<mrow>
<msub>
<mi>b</mi>
<mn>3</mn>
</msub>
<mo>+</mo>
<mfrac>
<msub>
<mi>a</mi>
<mn>4</mn>
</msub>
<msub>
<mi>b</mi>
<mn>4</mn>
</msub>
</mfrac>
<mo>+</mo>
<mo>&hellip;</mo>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>Golden Ratio</mtext>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mn>1</mn>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mo>&hellip;</mo>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>tan</mi>
<mfenced>
<mrow>
<mi>z</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mi>z</mi>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mfrac>
<msup>
<mi>z</mi>
<mn>2</mn>
</msup>
<mrow>
<mn>3</mn>
<mo>&minus;</mo>
<mfrac>
<msup>
<mi>z</mi>
<mn>2</mn>
</msup>
<mrow>
<mn>5</mn>
<mo>&minus;</mo>
<mfrac>
<msup>
<mi>z</mi>
<mn>2</mn>
</msup>
<mrow>
<mn>7</mn>
<mo>&minus;</mo>
<mfrac>
<msup>
<mi>z</mi>
<mn>2</mn>
</msup>
<mrow>
<mn>9</mn>
<mo>&minus;</mo>
<mo>&hellip;</mo>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtable>
<mtr>
<mtd>
<mi>f</mi>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mtd>
<mtd>
<mo>=</mo>
</mtd>
<mtd>
<msup>
<mi>x</mi>
<mn>3</mn>
</msup>
<mo>&minus;</mo>
<mi>a</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>f</mi>
<mo>&prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mtd>
<mtd>
<mo>=</mo>
</mtd>
<mtd>
<mn>3</mn>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>f</mi>
<mo>&Prime;</mo>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mtd>
<mtd>
<mo>=</mo>
</mtd>
<mtd>
<mn>6</mn>
<mi>x</mi>
</mtd>
</mtr>
</mtable>
</mrow>
</math>
</body>
</html>

132
doc/erf.qbk Normal file
View File

@@ -0,0 +1,132 @@
[section The Error Functions]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/erf.hpp>
``
namespace boost{ namespace math{
template <class T>
T erf(T z);
template <class T>
T erfc(T z);
}} // namespaces
[h4 Description]
template <class T>
T erf(T z);
Returns the error function of z:
[$../equations/erf1.png]
[$../graphs/erf1.png]
template <class T>
T erfc(T z);
Returns the complement of the error function of z:
[$../equations/erf2.png]
[$../graphs/erf2.png]
[h4 Accuracy]
[table Errors In the Function erf(z)
[[Mantissa Size] [Platform and Compiler] [z < 0.5] [0.5 < z < 8] [z > 8]]
[[53] [Win32, Visual C++ 8] [Peek=0 Mean=0\n\n GSL Peek=2.0 Mean=0.3 \n\nCephes Peek=1.1 Mean=0.7] [Peek=0.9 Mean=0.09 \n\nGSL Peek=2.3 Mean=0.3 \n\nCephes Peek=1.3 Mean=0.2] [Peek=0 Mean=0\n\nGSL Peek=0 Mean=0 \n\nCephes Peek=0 Mean=0]]
[[64] [RedHat Linux IA32, gcc-3.3] [Peek=0.7 Mean=0.07\n\n Native Peek=0.9 Mean=0.2] [Peek=0.9 Mean=0.2\n\n Native Peek=0.9 Mean=0.07] [Peek=0 Mean=0\n\n Native Peek=0 Mean=0]]
[[64] [Redhat Linux IA64, gcc-3.4.4] [Peek=0.7 Mean=0.07\n\n Native Peek=0 Mean=0] [Peek=0.9 Mean=0.1\n\n Native Peek=0.5 Mean=0.03] [Peek=0 Mean=0\n\n Native Peek=0 Mean=0]]
[[113] [HPUX IA64, aCC A.06.06] [Peek=0.8 Mean=0.1\n\n Native Peek=0.9 Mean=0.2] [Peek=0.9 Mean=0.1\n\n Native Peek=0.5 Mean=0.02] [Peek=0 Mean=0\n\n Native Peek=0 Mean=0]]
]
[table Errors In the Function erfc(z)
[[Mantissa Size] [Platform and Compiler] [z < 0.5] [0.5 < z < 8] [z > 8]]
[[53] [Win32, Visual C++ 8] [Peek=0.7 Mean=0.06 \n\nGSL Peek=1.0 Mean=0.4 \n\nCephes Peek=0.7 Mean=0.06] [Peek=0.99 Mean=0.3\n\nGSL Peek=2.6 Mean=0.6 \n\nCephes Peek=3.6 Mean=0.7] [Peek=1.0 Mean=0.2\n\nGSL Peek=3.9 Mean=0.4 \n\nCephes Peek=2.7 Mean=0.4]]
[[64] [RedHat Linux IA32, gcc-3.3] [Peek=0 Mean=0\n\n Native Peek=0 Mean=0] [Peek=1.4 Mean=0.3\n\n Native Peek=1.3 Mean=0.3] [Peek=1.6 Mean=0.4\n\n Native Peek=1.3 Mean=0.4]]
[[64] [Redhat Linux IA64, gcc-3.4.4] [Peek=0 Mean=0\n\n Native Peek=0 Mean=0] [Peek=1.4 Mean=0.3\n\n Native Peek=0 Mean=0] [Peek=1.5 Mean=0.4\n\n Native Peek=0 Mean=0] ]
[[113] [HPUX IA64, aCC A.06.06] [Peek=0 Mean=0\n\n Native Peek=0 Mean=0] [Peek=1.5 Mean=0.3\n\n Native Peek=0.9 Mean=0.08] [Peek=1.6 Mean=0.4\n\n Native Peek=0.9 Mean=0.1]]
]
[h4 Testing]
The tests for these functions come in two parts: basic sanity checks uses
spot values calculated using Mathworld's online calculator, while accuracy
checks use high-precision test values calculated at 1000-bit precision with
NTL::RR and this implementation. Note that the generic and type-specific
versions of these functions use differing implementations internally, so this
gives us reasonably independent test data. Using our test data to test other
known "good" implementations also provides an additional sanity check.
One
should note that our tests rely on decimal to binary conversion of floating
point numbers, and assume that the result will be correctly rounded. In practice
it appears that in a few very rare cases the test data may be incorrect in the last bit:
this depends upon the compiler and standard library used, and means that the
relative errors quoted above have to treated somewhat circumspectly. Using
binary or hexadecimal coded test data would remove this issue (or at least
confirm whether it is actually an issue or not), but would make the test data
unportable, so is not used at present.
[h4 Implementation]
All versions of these functions first use the usual reflection formulas
to make their arguments positive:
erf(-z) = 1 - erf(z);
erfc(-z) = 2 - erfc(z); // prefered when -z < -0.5
erfc(-z) = 1 + erf(z); // prefered when -0.5 <= -z < 0
The generic versions of these functions are implemented in terms of
the incomplete gamma function.
When the mantissa size is recognised (currently for 53, 64 and 113-bit reals,
plus single precision handled via promotion to double)
then a series of rational approximations are used.
For `z <= 0.5` then a rational approximation to erf is used, based on the
observation that:
erf(z)/z ~ 1.12....
Therefore erf is calculated using:
erf(z) = z * (1.125F + R(z));
Where the rational approximation R(z) is optimised for absolute error: as
long as it's absolute error is small enough compared to 1.125 then any
roundoff error incured during the computation of R(z) will effectively
dissappear from the result. As a result the error for erf and erfc in this
region is very low: the last bit is incorrect in only a very small number of
cases.
For `z > 0.5` we observe that over a small interval [a, b) then:
erfc(z) * exp(z*z) * z ~ c
for some constant c.
Therefore for `z > 0.5` we calculate erfc using:
erfc(z) = exp(-z*z) * (c + R(z)) / z;
Again R(z) is optimised for absolute error, and the constant `c` is
the average of `erfc(z) * exp(z*z) * z` taken at the endpoints of the range.
Once again as long as the absolute error in R(z) is small
compared to `c` then `c + R(z)` will be correctly rounded, and the error
in the result will depend only on the accuracy of the exp function. In practice
in all but a very small number of cases the error is confined to the last bit
of the result.
[endsect]

70
doc/erf_inv.qbk Normal file
View File

@@ -0,0 +1,70 @@
[section The Error Function Inverses]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/erf.hpp>
``
namespace boost{ namespace math{
template <class T>
T erf_inv(T p);
template <class T>
T erfc_inv(T p);
}} // namespaces
[h4 Description]
template <class T>
T erf_inv(T z);
Returns the inverse error function of z, that is a value x such that:
p = erf(x);
[$../graphs/erf_inv1.png]
template <class T>
T erfc_inv(T z);
Returns the inverse of the complement of the error function of z, that is a
value x such that:
p = erfc(x);
[$../graphs/erf_inv2.png]
[h4 Accuracy]
These functions are deliberately "detuned" to be not too accurate in order to avoid
undue iterations during their calculation. The relative error in these functions
will be similar for all types T at around 3 to 15 epsilon.
[h4 Testing]
There are two sets of tests:
* Basic sanity checks attempt to "round-trip" from
/x/ to /p/ and back again. These tests have quite
generous tolerances: in general both the error functions and their
inverses change so rapidly in some places, that round tripping to more than a couple
of significant digits isn't possible. This is especially true when
/p/ is very near one: in this case there isn't enough
"information content" in the input to the inverse function to get
back where you started.
* Accuracy checks using high precision test values. These measure
the accuracy of the result, given /exact/ input values.
[h4 Implementation]
These functions use a rational approximation to calculate an initial
approximation to the result, then clean up the value using Halley iteration.
No more than 3 iterations are required in practice.
[endsect]

58
doc/error.qbk Normal file
View File

@@ -0,0 +1,58 @@
[section Relative Error]
[caution __caution ]
Given an actual value /a/ and a found value /v/ the relative error can be
calculated from:
[$../equations/error1.png]
Special care needs to be taken when one value is zero: we could either take the
absolute error in this case (but that's cheating as the absolute error is likely
to be very small), or we could assign a value of either 1 or infinity to the
relative error in this special case. In the test cases for the special functions
in this library, everything below a threshold is regarded as "effectively zero",
otherwise the relative error is assigned the value of 1 if only one of the terms
is zero. The threshold is currently set at `std::numeric_limits<>::min()`, in other words all
denormalised numbers are regarded as a zero.
All the test programs calculate /quantised relative error/ whereas the graphs
in this manual are produced with the /actual error/. The difference is as
follows: in the test programs the test data is rounded to the target type
under test when
the program is compiled, the error observed will then be a whole number of
/units in the last place/ either rounded up from the actual error, or rounded
down (possibly to zero). In contrast the /true error/ is obtained by extending
the precision of the calculated value, and then comparing to the actual value:
in this case the calculated error may be some fraction of /units in the last place/.
Note that throughout this manual and the test programs the relative error is
usually quoted in units of epsilon. However, remember that /units in the last place/
more accurately reflect the number of contaminated digits, and that relative
error can /"wobble"/ by a factor of 2 compared to /units in the last place/.
In other words: two implementations of the same function, whose
maximum relative errors differ by a factor of 2, can actually be accurate
to the same number of binary digits. You have been warned!
[#zero_error][h4 The Impossibility of Zero Error]
For many of the functions in this library, it's assumed that the error is
"effectively zero" if the computation can be done with a number of guard
digits. However it should be remembered that if the result is a
/transcendental number/
then as a point of principle we can never be sure that the result is accurate
to more than 1ulp. This is an example of /the table makers dilemma/: consider what
happens if the first guard digit is a one, and the remaining guard digits are all zero.
Do we have a tie or not? Since the only thing we can tell about a transcendental number
is that it's digits have no particular pattern, we can never tell if we have a tie,
no matter how many guard digits we have. Therefore we can never be completely sure
that the result has been rounded in the right direction. Of course transcendental
numbers that just happen to be a tie - for however many guard digits we have - are
extremely rare, and get rarer the more guard digits we have, but even so....
Refer to the classic text
[@http://docs.sun.com/source/806-3568/ncg_goldberg.html What Every Computer Scientist Should Know About Floating-Point Arithmetic]
for more information.
[endsect]

89
doc/fpclassify.qbk Normal file
View File

@@ -0,0 +1,89 @@
[section Floating Point Classification: Infinities and NaN's]
[h4 Synopsis]
#define FP_ZERO /* implementation specific value */
#define FP_NORMAL /* implementation specific value */
#define FP_INFINITE /* implementation specific value */
#define FP_NAN /* implementation specific value */
#define FP_SUBNORMAL /* implementation specific value */
template <class T>
int fpclassify(T t);
template <class T>
bool isfinite(T z);
template <class T>
bool isinf(T t);
template <class T>
bool isnan(T t);
template <class T>
bool isnormal(T t);
[h4 Description]
These functions provide the same functionality as the macros with the same
name in C99, indeed if the C99 macros are available, then these functions
are implemented in terms of them, otherwise they rely on std::numeric_limits<>
to function.
Note that the definition of these functions ['does not suppress the definition
of these names as macros by math.h] on those platforms that already provide
these as macros. That mean that the following have differing meanings:
using namespace boost::math;
// This might call a global macro if defined,
// might not work if the type of z is unsupported
// by the std lib:
isnan(z);
//
// This calls the boost version, works for any type
// that has numeric_limits support :
(isnan)(z);
//
// As above but with namespace qualification.
(boost::math::isnan)(z);
//
// This will cause a compiler error is isnan is a native macro:
boost::math::isnan(z);
Detailed descriptions for each of these functions follows:
template <class T>
int fpclassify(T t);
Returns an integer value that classifies the value /t/:
[table
[[FP_ZERO] [If /t/ is zero.]]
[[FP_NORMAL] [If /t/ is a non-zero, non-denormalised finite value.]]
[[FP_INFINITE] [If /t/ is plus or minus infinity.]]
[[FP_NAN] [If /t/ is a NaN.]]
[[FP_SUBNORMAL] [If /t/ is a denormalised number.]]
]
template <class T>
bool isfinite(T z);
Returns true only if /z/ is not an infinity or a NaN.
template <class T>
bool isinf(T t);
Returns true only if /z/ is plus or minus infinity.
template <class T>
bool isnan(T t);
Returns true only if /z/ is a NaN.
template <class T>
bool isnormal(T t);
Returns true only if /z/ is a normal number (not zero, infinite, NaN, or denomalised).
[endsect]

147
doc/fraction.qbk Normal file
View File

@@ -0,0 +1,147 @@
[section Continued Fraction Evaluation]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/tools/fraction.hpp>
``
namespace boost{ namespace math{ namespace tools{
template <class Gen>
typename detail::fraction_traits<Gen>::result_type
continued_fraction_b(Gen& g, int bits);
template <class Gen>
typename detail::fraction_traits<Gen>::result_type
continued_fraction_b(Gen& g, int bits, boost::uintmax_t& max_terms);
template <class Gen>
typename detail::fraction_traits<Gen>::result_type
continued_fraction_a(Gen& g, int bits);
template <class Gen>
typename detail::fraction_traits<Gen>::result_type
continued_fraction_a(Gen& g, int bits, boost::uintmax_t& max_terms);
}}} // namespaces
[h4 Description]
These functions all evaluate the continued fraction described by the /generator/
type argument. The functions with an "_a" suffix evaluate the fraction:
[$../equations/fraction2.png]
and those with a "_b" suffix evaluate the fraction:
[$../equations/fraction1.png]
This latter form is somewhat more natural in that it corresponds with the usual
definition of a continued fraction, but note that the first /a/ value returned by
the generator is discarded. Further, often the first /a/ and /b/ values in a
continued fraction have different defining equations to the remaining terms, which
may make the "_a" suffixed form more appropriate.
The generator type should be a function object which supports the following
operations:
[table
[[Expression] [Description]]
[[Gen::result_type] [The type that is the result of invoking operator().
This can be either an arithmetic type, or a std::pair<> of arithmetic types.]]
[[g()] [Returns an object of type Gen::result_type.\n
Each time this operator is called then the next pair of /a/ and /b/
values is returned. Or, if result_type is an arithmetic type,
then the next /b/ value is returned and all the /a/ values
are assumed to 1.]]
]
In all the continued fraction evaluation functions the /bits/ parameter is the
number of bits precision desired in the result, evaluation of the fraction will
continue until the last term evaluated leaves the first /bits/ bits in the result
unchanged.
If the optional /max_terms/ parameter is specified then no more than /max_terms/
calls to the generator will be made, and on output,
/max_terms/ will be set to actual number of
calls made. This facility is particularly useful when profiling a continued
fraction for convergence.
[h4 Implementation]
Internally these algorithms all use the modified Lentz algorithm: refer to
Numeric Recipes, chapter 5 for more information, also
Lentz, W.J. 1976, Applied Optics, vol. 15, pp. 668-671.
[h4 Examples]
The golden ratio can be computed from the simplest continued fraction of all:
[$../equations/fraction3.png]
We begin by defining a generator function:
template <class T>
struct golden_ratio_fraction
{
typedef T result_type;
result_type operator()
{
return 1;
}
};
The golden ration can then be computed to double precision using:
continued_fraction_a(
golden_ratio_fraction<double>(),
std::numeric_limits<double>::digits);
It's more usual though to have to define both the /a/'s and the /b/'s
when evaluating special functions by continued fractions, for example
the tan function is defined by:
[$../equations/fraction4.png]
So it's generator object would look like:
template <class T>
struct tan_fraction
{
private:
T a, b;
public:
tan_fraction(T v)
: a(-v*v), b(-1)
{}
typedef std::pair<T,T> result_type;
std::pair<T,T> operator()()
{
b += 2;
return std::make_pair(a, b);
}
};
Notice that if the continuant is subtracted from the /b/ terms,
as is the case here, then all the /a/ terms returned by the generator
will be negative. The tangent function can now be evaluated using:
template <class T>
T tan(T a)
{
tan_fraction<T> fract(a);
return a / continued_fraction_b(fract, std::numeric_limits<T>::digits);
}
Notice that this time we're using the "_b" suffixed version to evaluate
the fraction: we're removing the leading /a/ term during fraction evaluation
as it's different from all the others.
[endsect]

BIN
doc/graphs/beta-small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

5345
doc/graphs/beta-small.rgd Normal file

File diff suppressed because it is too large Load Diff

BIN
doc/graphs/beta.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

4459
doc/graphs/beta.rgd Normal file

File diff suppressed because it is too large Load Diff

545
doc/graphs/erf.rgd Normal file
View File

@@ -0,0 +1,545 @@
[RJS Graph Data File]
[Header]
Version=3
Revision=1
[End Header]
[Data]
Row 1 Col 1="-5"
Row 1 Col 2="-1"
Row 2 Col 1="-4.9"
Row 2 Col 2="-1"
Row 3 Col 1="-4.8"
Row 3 Col 2="-1"
Row 4 Col 1="-4.7"
Row 4 Col 2="-1"
Row 5 Col 1="-4.6"
Row 5 Col 2="-1"
Row 6 Col 1="-4.5"
Row 6 Col 2="-1"
Row 7 Col 1="-4.4"
Row 7 Col 2="-1"
Row 8 Col 1="-4.3"
Row 8 Col 2="-1"
Row 9 Col 1="-4.2"
Row 9 Col 2="-1"
Row 10 Col 1="-4.1"
Row 10 Col 2="-1"
Row 11 Col 1="-4"
Row 11 Col 2="-1"
Row 12 Col 1="-3.9"
Row 12 Col 2="-1"
Row 13 Col 1="-3.8"
Row 13 Col 2="-1"
Row 14 Col 1="-3.7"
Row 14 Col 2="-1"
Row 15 Col 1="-3.6"
Row 15 Col 2="-1"
Row 16 Col 1="-3.5"
Row 16 Col 2="-0.999999"
Row 17 Col 1="-3.4"
Row 17 Col 2="-0.999998"
Row 18 Col 1="-3.3"
Row 18 Col 2="-0.999997"
Row 19 Col 1="-3.2"
Row 19 Col 2="-0.999994"
Row 20 Col 1="-3.1"
Row 20 Col 2="-0.999988"
Row 21 Col 1="-3"
Row 21 Col 2="-0.999978"
Row 22 Col 1="-2.9"
Row 22 Col 2="-0.999959"
Row 23 Col 1="-2.8"
Row 23 Col 2="-0.999925"
Row 24 Col 1="-2.7"
Row 24 Col 2="-0.999866"
Row 25 Col 1="-2.6"
Row 25 Col 2="-0.999764"
Row 26 Col 1="-2.5"
Row 26 Col 2="-0.999593"
Row 27 Col 1="-2.4"
Row 27 Col 2="-0.999311"
Row 28 Col 1="-2.3"
Row 28 Col 2="-0.998857"
Row 29 Col 1="-2.2"
Row 29 Col 2="-0.998137"
Row 30 Col 1="-2.1"
Row 30 Col 2="-0.997021"
Row 31 Col 1="-2"
Row 31 Col 2="-0.995322"
Row 32 Col 1="-1.9"
Row 32 Col 2="-0.99279"
Row 33 Col 1="-1.8"
Row 33 Col 2="-0.98909"
Row 34 Col 1="-1.7"
Row 34 Col 2="-0.98379"
Row 35 Col 1="-1.6"
Row 35 Col 2="-0.976348"
Row 36 Col 1="-1.5"
Row 36 Col 2="-0.966105"
Row 37 Col 1="-1.4"
Row 37 Col 2="-0.952285"
Row 38 Col 1="-1.3"
Row 38 Col 2="-0.934008"
Row 39 Col 1="-1.2"
Row 39 Col 2="-0.910314"
Row 40 Col 1="-1.1"
Row 40 Col 2="-0.880205"
Row 41 Col 1="-1"
Row 41 Col 2="-0.842701"
Row 42 Col 1="-0.9"
Row 42 Col 2="-0.796908"
Row 43 Col 1="-0.8"
Row 43 Col 2="-0.742101"
Row 44 Col 1="-0.7"
Row 44 Col 2="-0.677801"
Row 45 Col 1="-0.6"
Row 45 Col 2="-0.603856"
Row 46 Col 1="-0.5"
Row 46 Col 2="-0.5205"
Row 47 Col 1="-0.4"
Row 47 Col 2="-0.428392"
Row 48 Col 1="-0.3"
Row 48 Col 2="-0.328627"
Row 49 Col 1="-0.2"
Row 49 Col 2="-0.222703"
Row 50 Col 1="-0.0999999"
Row 50 Col 2="-0.112463"
Row 51 Col 1="0.0000000745058"
Row 51 Col 2="0.0000000840708"
Row 52 Col 1="0.1"
Row 52 Col 2="0.112463"
Row 53 Col 1="0.2"
Row 53 Col 2="0.222703"
Row 54 Col 1="0.3"
Row 54 Col 2="0.328627"
Row 55 Col 1="0.4"
Row 55 Col 2="0.428392"
Row 56 Col 1="0.5"
Row 56 Col 2="0.5205"
Row 57 Col 1="0.6"
Row 57 Col 2="0.603856"
Row 58 Col 1="0.7"
Row 58 Col 2="0.677801"
Row 59 Col 1="0.8"
Row 59 Col 2="0.742101"
Row 60 Col 1="0.9"
Row 60 Col 2="0.796908"
Row 61 Col 1="1"
Row 61 Col 2="0.842701"
Row 62 Col 1="1.1"
Row 62 Col 2="0.880205"
Row 63 Col 1="1.2"
Row 63 Col 2="0.910314"
Row 64 Col 1="1.3"
Row 64 Col 2="0.934008"
Row 65 Col 1="1.4"
Row 65 Col 2="0.952285"
Row 66 Col 1="1.5"
Row 66 Col 2="0.966105"
Row 67 Col 1="1.6"
Row 67 Col 2="0.976348"
Row 68 Col 1="1.7"
Row 68 Col 2="0.98379"
Row 69 Col 1="1.8"
Row 69 Col 2="0.989091"
Row 70 Col 1="1.9"
Row 70 Col 2="0.99279"
Row 71 Col 1="2"
Row 71 Col 2="0.995322"
Row 72 Col 1="2.1"
Row 72 Col 2="0.997021"
Row 73 Col 1="2.2"
Row 73 Col 2="0.998137"
Row 74 Col 1="2.3"
Row 74 Col 2="0.998857"
Row 75 Col 1="2.4"
Row 75 Col 2="0.999311"
Row 76 Col 1="2.5"
Row 76 Col 2="0.999593"
Row 77 Col 1="2.6"
Row 77 Col 2="0.999764"
Row 78 Col 1="2.7"
Row 78 Col 2="0.999866"
Row 79 Col 1="2.8"
Row 79 Col 2="0.999925"
Row 80 Col 1="2.9"
Row 80 Col 2="0.999959"
Row 81 Col 1="3"
Row 81 Col 2="0.999978"
Row 82 Col 1="3.1"
Row 82 Col 2="0.999988"
Row 83 Col 1="3.2"
Row 83 Col 2="0.999994"
Row 84 Col 1="3.3"
Row 84 Col 2="0.999997"
Row 85 Col 1="3.4"
Row 85 Col 2="0.999998"
Row 86 Col 1="3.5"
Row 86 Col 2="0.999999"
Row 87 Col 1="3.6"
Row 87 Col 2="1"
Row 88 Col 1="3.7"
Row 88 Col 2="1"
Row 89 Col 1="3.8"
Row 89 Col 2="1"
Row 90 Col 1="3.9"
Row 90 Col 2="1"
Row 91 Col 1="4"
Row 91 Col 2="1"
Row 92 Col 1="4.1"
Row 92 Col 2="1"
Row 93 Col 1="4.2"
Row 93 Col 2="1"
Row 94 Col 1="4.3"
Row 94 Col 2="1"
Row 95 Col 1="4.4"
Row 95 Col 2="1"
Row 96 Col 1="4.5"
Row 96 Col 2="1"
Row 97 Col 1="4.6"
Row 97 Col 2="1"
Row 98 Col 1="4.7"
Row 98 Col 2="1"
Row 99 Col 1="4.8"
Row 99 Col 2="1"
Row 100 Col 1="4.9"
Row 100 Col 2="1"
[End Data]
[Titles]
Title="The Error Function"
Heading=""
XAxisTitle="z"
YAxisTitle="erf(z)"
[End Titles]
[Title Options]
Title="00000000000000000024Arial"
Heading="00000000000000000016Arial"
YAxisTitle="00000000000000014.25Arial"
XAxisTitle="00000000000000014.25Arial"
YAxisVertical="1"
[End Title Options]
[Background]
Graph Background=16777215
Page Colour=16777215
Print Graph Background=1
Print Page Colour=0
[End Background]
[Axis]
XMin=-3
XMax=3
YMin=0
YMax=10
MaxMinOptions="111100"
Axis Style=1
Logarithmic X Axis=0
Logarithmic Y Axis=0
Border Style=0
[End Axis]
[Data Lines]
Options="117000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216"
[End Data Lines]
[Data Markers]
Size 1=5
Size 2=5
Size 3=5
Size 4=5
Size 5=5
Size 6=5
[End Data Markers]
[Data Labels]
Options="000100"
Primary Font="00000000000000000010Arial"
Secondary Font="00000000000000000010Arial"
Spacing X Primary=1
Spacing Y Primary=1
Spacing X Secondary=1
Spacing Y Secondary=1
Spacing Adjustment=1
[End Data Labels]
[Axis Markers]
Options 1=1
Spacing 1=1
Colour 1="00000000"
Options 2=1
Spacing 2=1
Colour 2="00000000"
Options 3=0
Spacing 3=1
Colour 3="00000000"
Options 4=0
Spacing 4=1
Colour 4="00000000"
Style=1
[End Axis Markers]
[Gridlines]
Options="100000"
Spacing X Primary=1
Spacing Y Primary=1
Spacing X Secondary=1
Spacing Y Secondary=1
Colour 1="00000000"
Colour 2="00000000"
Colour 3="14671839"
Colour 4="14671839"
[End Gridlines]
[Legend]
X Position=22
Y Position=10
Style=2
Font="00000000000000000010Arial"
[End Legend]
[Best Fit Line 1]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 1]
[Best Fit Line 2]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 2]
[Best Fit Line 3]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 3]
[Best Fit Line 4]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 4]
[Best Fit Line 5]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 5]
[Best Fit Line 6]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 6]
[Best Fit Data 1]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=5
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 1]
[Best Fit Data 2]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=8
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 2]
[Best Fit Data 3]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=11
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 3]
[Best Fit Data 4]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=14
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 4]
[Best Fit Data 5]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=17
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 5]
[Best Fit Data 6]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=20
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 6]
[Equations]
Equation 1=""
Equation 2=""
Equation 3=""
Equation 4=""
Equation 5=""
Equation 6=""
Equation 7=""
Equation 8=""
Equation 9=""
Equation 10=""
Equation 11=""
Equation 12=""
Angle Measurement=0
[End Equations]
[Equation Options]
Equation 1="0100000000"
Equation 2="0100000000"
Equation 3="0100000000"
Equation 4="0100000000"
Equation 5="0100000000"
Equation 6="0100000000"
Equation 7="0100000000"
Equation 8="0100000000"
Equation 9="0100000000"
Equation 10="0100000000"
Equation 11="0100000000"
Equation 12="0100000000"
[End Equation Options]
[Print Setup & Margins]
Paper Size=9
Orientation=2
Left=2.5
Right=2.5
Top=2.5
Bottom=2.5
[End Print Setup & Margins]
[Datasheet]
Column Width 1=1500
Column Width 2=1500
Column Width 3=1500
Column Width 4=1500
Column Width 5=1500
Column Width 6=1500
Column Width 7=1500
Data Titles 1="Y1 Data"
Data Titles 2="Y2 Data"
Data Titles 3="Y3 Data"
Data Titles 4="Y4 Data"
Data Titles 5="Y5 Data"
Data Titles 6="Y6 Data"
[End Datasheet]
[Other Graph Options]
Zoom Factor=1
Auto Redraw=1
[End Other Graph Options]
[End]

BIN
doc/graphs/erf1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
doc/graphs/erf2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

545
doc/graphs/erfc.rgd Normal file
View File

@@ -0,0 +1,545 @@
[RJS Graph Data File]
[Header]
Version=3
Revision=1
[End Header]
[Data]
Row 1 Col 1="-5"
Row 1 Col 3="2"
Row 2 Col 1="-4.9"
Row 2 Col 3="2"
Row 3 Col 1="-4.8"
Row 3 Col 3="2"
Row 4 Col 1="-4.7"
Row 4 Col 3="2"
Row 5 Col 1="-4.6"
Row 5 Col 3="2"
Row 6 Col 1="-4.5"
Row 6 Col 3="2"
Row 7 Col 1="-4.4"
Row 7 Col 3="2"
Row 8 Col 1="-4.3"
Row 8 Col 3="2"
Row 9 Col 1="-4.2"
Row 9 Col 3="2"
Row 10 Col 1="-4.1"
Row 10 Col 3="2"
Row 11 Col 1="-4"
Row 11 Col 3="2"
Row 12 Col 1="-3.9"
Row 12 Col 3="2"
Row 13 Col 1="-3.8"
Row 13 Col 3="2"
Row 14 Col 1="-3.7"
Row 14 Col 3="2"
Row 15 Col 1="-3.6"
Row 15 Col 3="2"
Row 16 Col 1="-3.5"
Row 16 Col 3="2"
Row 17 Col 1="-3.4"
Row 17 Col 3="2"
Row 18 Col 1="-3.3"
Row 18 Col 3="2"
Row 19 Col 1="-3.2"
Row 19 Col 3="1.99999"
Row 20 Col 1="-3.1"
Row 20 Col 3="1.99999"
Row 21 Col 1="-3"
Row 21 Col 3="1.99998"
Row 22 Col 1="-2.9"
Row 22 Col 3="1.99996"
Row 23 Col 1="-2.8"
Row 23 Col 3="1.99992"
Row 24 Col 1="-2.7"
Row 24 Col 3="1.99987"
Row 25 Col 1="-2.6"
Row 25 Col 3="1.99976"
Row 26 Col 1="-2.5"
Row 26 Col 3="1.99959"
Row 27 Col 1="-2.4"
Row 27 Col 3="1.99931"
Row 28 Col 1="-2.3"
Row 28 Col 3="1.99886"
Row 29 Col 1="-2.2"
Row 29 Col 3="1.99814"
Row 30 Col 1="-2.1"
Row 30 Col 3="1.99702"
Row 31 Col 1="-2"
Row 31 Col 3="1.99532"
Row 32 Col 1="-1.9"
Row 32 Col 3="1.99279"
Row 33 Col 1="-1.8"
Row 33 Col 3="1.98909"
Row 34 Col 1="-1.7"
Row 34 Col 3="1.98379"
Row 35 Col 1="-1.6"
Row 35 Col 3="1.97635"
Row 36 Col 1="-1.5"
Row 36 Col 3="1.96611"
Row 37 Col 1="-1.4"
Row 37 Col 3="1.95229"
Row 38 Col 1="-1.3"
Row 38 Col 3="1.93401"
Row 39 Col 1="-1.2"
Row 39 Col 3="1.91031"
Row 40 Col 1="-1.1"
Row 40 Col 3="1.88021"
Row 41 Col 1="-1"
Row 41 Col 3="1.8427"
Row 42 Col 1="-0.9"
Row 42 Col 3="1.79691"
Row 43 Col 1="-0.8"
Row 43 Col 3="1.7421"
Row 44 Col 1="-0.7"
Row 44 Col 3="1.6778"
Row 45 Col 1="-0.6"
Row 45 Col 3="1.60386"
Row 46 Col 1="-0.5"
Row 46 Col 3="1.5205"
Row 47 Col 1="-0.4"
Row 47 Col 3="1.42839"
Row 48 Col 1="-0.3"
Row 48 Col 3="1.32863"
Row 49 Col 1="-0.2"
Row 49 Col 3="1.2227"
Row 50 Col 1="-0.0999999"
Row 50 Col 3="1.11246"
Row 51 Col 1="0.0000000745058"
Row 51 Col 3="1"
Row 52 Col 1="0.1"
Row 52 Col 3="0.887537"
Row 53 Col 1="0.2"
Row 53 Col 3="0.777297"
Row 54 Col 1="0.3"
Row 54 Col 3="0.671373"
Row 55 Col 1="0.4"
Row 55 Col 3="0.571608"
Row 56 Col 1="0.5"
Row 56 Col 3="0.4795"
Row 57 Col 1="0.6"
Row 57 Col 3="0.396144"
Row 58 Col 1="0.7"
Row 58 Col 3="0.322199"
Row 59 Col 1="0.8"
Row 59 Col 3="0.257899"
Row 60 Col 1="0.9"
Row 60 Col 3="0.203092"
Row 61 Col 1="1"
Row 61 Col 3="0.157299"
Row 62 Col 1="1.1"
Row 62 Col 3="0.119795"
Row 63 Col 1="1.2"
Row 63 Col 3="0.089686"
Row 64 Col 1="1.3"
Row 64 Col 3="0.065992"
Row 65 Col 1="1.4"
Row 65 Col 3="0.0477149"
Row 66 Col 1="1.5"
Row 66 Col 3="0.0338948"
Row 67 Col 1="1.6"
Row 67 Col 3="0.0236516"
Row 68 Col 1="1.7"
Row 68 Col 3="0.0162095"
Row 69 Col 1="1.8"
Row 69 Col 3="0.0109095"
Row 70 Col 1="1.9"
Row 70 Col 3="0.00720957"
Row 71 Col 1="2"
Row 71 Col 3="0.00467773"
Row 72 Col 1="2.1"
Row 72 Col 3="0.00297946"
Row 73 Col 1="2.2"
Row 73 Col 3="0.00186285"
Row 74 Col 1="2.3"
Row 74 Col 3="0.00114318"
Row 75 Col 1="2.4"
Row 75 Col 3="0.000688514"
Row 76 Col 1="2.5"
Row 76 Col 3="0.000406952"
Row 77 Col 1="2.6"
Row 77 Col 3="0.000236034"
Row 78 Col 1="2.7"
Row 78 Col 3="0.000134333"
Row 79 Col 1="2.8"
Row 79 Col 3="0.0000750131"
Row 80 Col 1="2.9"
Row 80 Col 3="0.0000410979"
Row 81 Col 1="3"
Row 81 Col 3="0.0000220905"
Row 82 Col 1="3.1"
Row 82 Col 3="0.0000116486"
Row 83 Col 1="3.2"
Row 83 Col 3="0.00000602576"
Row 84 Col 1="3.3"
Row 84 Col 3="0.00000305771"
Row 85 Col 1="3.4"
Row 85 Col 3="0.00000152199"
Row 86 Col 1="3.5"
Row 86 Col 3="0.000000743097"
Row 87 Col 1="3.6"
Row 87 Col 3="0.000000355863"
Row 88 Col 1="3.7"
Row 88 Col 3="0.000000167151"
Row 89 Col 1="3.8"
Row 89 Col 3="0.0000000770038"
Row 90 Col 1="3.9"
Row 90 Col 3="0.0000000347922"
Row 91 Col 1="4"
Row 91 Col 3="0.0000000154173"
Row 92 Col 1="4.1"
Row 92 Col 3="0.00000000670003"
Row 93 Col 1="4.2"
Row 93 Col 3="0.00000000285549"
Row 94 Col 1="4.3"
Row 94 Col 3="0.00000000119347"
Row 95 Col 1="4.4"
Row 95 Col 3="0.000000000489171"
Row 96 Col 1="4.5"
Row 96 Col 3="0.000000000196616"
Row 97 Col 1="4.6"
Row 97 Col 3="7.74957E-11"
Row 98 Col 1="4.7"
Row 98 Col 3="2.99525E-11"
Row 99 Col 1="4.8"
Row 99 Col 3="1.13521E-11"
Row 100 Col 1="4.9"
Row 100 Col 3="4.21893E-12"
[End Data]
[Titles]
Title="The Complementary Error Function"
Heading=""
XAxisTitle="z"
YAxisTitle="erfc(z)"
[End Titles]
[Title Options]
Title="00000000000000000024Arial"
Heading="00000000000000000016Arial"
YAxisTitle="00000000000000014.25Arial"
XAxisTitle="00000000000000014.25Arial"
YAxisVertical="1"
[End Title Options]
[Background]
Graph Background=16777215
Page Colour=16777215
Print Graph Background=1
Print Page Colour=0
[End Background]
[Axis]
XMin=-3
XMax=3
YMin=0
YMax=10
MaxMinOptions="111100"
Axis Style=1
Logarithmic X Axis=0
Logarithmic Y Axis=0
Border Style=0
[End Axis]
[Data Lines]
Options="611000000000000000016777216117000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216"
[End Data Lines]
[Data Markers]
Size 1=5
Size 2=5
Size 3=5
Size 4=5
Size 5=5
Size 6=5
[End Data Markers]
[Data Labels]
Options="000100"
Primary Font="00000000000000000010Arial"
Secondary Font="00000000000000000010Arial"
Spacing X Primary=1
Spacing Y Primary=1
Spacing X Secondary=1
Spacing Y Secondary=1
Spacing Adjustment=1
[End Data Labels]
[Axis Markers]
Options 1=1
Spacing 1=1
Colour 1="00000000"
Options 2=1
Spacing 2=1
Colour 2="00000000"
Options 3=0
Spacing 3=1
Colour 3="00000000"
Options 4=0
Spacing 4=1
Colour 4="00000000"
Style=1
[End Axis Markers]
[Gridlines]
Options="100000"
Spacing X Primary=1
Spacing Y Primary=1
Spacing X Secondary=1
Spacing Y Secondary=1
Colour 1="00000000"
Colour 2="00000000"
Colour 3="14671839"
Colour 4="14671839"
[End Gridlines]
[Legend]
X Position=22
Y Position=10
Style=2
Font="00000000000000000010Arial"
[End Legend]
[Best Fit Line 1]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 1]
[Best Fit Line 2]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 2]
[Best Fit Line 3]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 3]
[Best Fit Line 4]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 4]
[Best Fit Line 5]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 5]
[Best Fit Line 6]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 6]
[Best Fit Data 1]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=5
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 1]
[Best Fit Data 2]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=8
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 2]
[Best Fit Data 3]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=11
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 3]
[Best Fit Data 4]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=14
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 4]
[Best Fit Data 5]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=17
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 5]
[Best Fit Data 6]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=20
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 6]
[Equations]
Equation 1=""
Equation 2=""
Equation 3=""
Equation 4=""
Equation 5=""
Equation 6=""
Equation 7=""
Equation 8=""
Equation 9=""
Equation 10=""
Equation 11=""
Equation 12=""
Angle Measurement=0
[End Equations]
[Equation Options]
Equation 1="0100000000"
Equation 2="0100000000"
Equation 3="0100000000"
Equation 4="0100000000"
Equation 5="0100000000"
Equation 6="0100000000"
Equation 7="0100000000"
Equation 8="0100000000"
Equation 9="0100000000"
Equation 10="0100000000"
Equation 11="0100000000"
Equation 12="0100000000"
[End Equation Options]
[Print Setup & Margins]
Paper Size=9
Orientation=2
Left=2.5
Right=2.5
Top=2.5
Bottom=2.5
[End Print Setup & Margins]
[Datasheet]
Column Width 1=1500
Column Width 2=1500
Column Width 3=1500
Column Width 4=1500
Column Width 5=1500
Column Width 6=1500
Column Width 7=1500
Data Titles 1="Y1 Data"
Data Titles 2="Y2 Data"
Data Titles 3="Y3 Data"
Data Titles 4="Y4 Data"
Data Titles 5="Y5 Data"
Data Titles 6="Y6 Data"
[End Datasheet]
[Other Graph Options]
Zoom Factor=1
Auto Redraw=1
[End Other Graph Options]
[End]

BIN
doc/graphs/gamma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

2545
doc/graphs/gamma.rgd Normal file

File diff suppressed because it is too large Load Diff

2845
doc/graphs/gamma_P.rgd Normal file

File diff suppressed because it is too large Load Diff

2845
doc/graphs/gamma_Q.rgd Normal file

File diff suppressed because it is too large Load Diff

BIN
doc/graphs/gamma_p.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
doc/graphs/gamma_q.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,861 @@
[RJS Graph Data File]
[Header]
Version=3
Revision=1
[End Header]
[Data]
Row 1 Col 1="0.573658"
Row 1 Col 2="1.06179"
Row 2 Col 1="0.936799"
Row 2 Col 2="0.087223"
Row 3 Col 1="0.966649"
Row 3 Col 2="1.17713"
Row 4 Col 1="1.6287"
Row 4 Col 2="0.128814"
Row 5 Col 1="2.3903"
Row 5 Col 2="0.563205"
Row 6 Col 1="2.71769"
Row 6 Col 2="0.910891"
Row 7 Col 1="3.09053"
Row 7 Col 2="0.397122"
Row 8 Col 1="3.31395"
Row 8 Col 2="1.7688"
Row 9 Col 1="3.5646"
Row 9 Col 2="0.161767"
Row 10 Col 1="3.69998"
Row 10 Col 2="0.49558"
Row 11 Col 1="5.85376"
Row 11 Col 2="0.420313"
Row 12 Col 1="6.37625"
Row 12 Col 2="0.295316"
Row 13 Col 1="6.66338"
Row 13 Col 2="0.081716"
Row 14 Col 1="6.87312"
Row 14 Col 2="0.223833"
Row 15 Col 1="6.89887"
Row 15 Col 2="0.044851"
Row 16 Col 1="7.15198"
Row 16 Col 2="0.326014"
Row 17 Col 1="7.29789"
Row 17 Col 2="0.392902"
Row 18 Col 1="8.10382"
Row 18 Col 2="0.206294"
Row 19 Col 1="8.4204"
Row 19 Col 2="0.185776"
Row 20 Col 1="8.61433"
Row 20 Col 2="0.509063"
Row 21 Col 1="9.02146"
Row 21 Col 2="0.157917"
Row 22 Col 1="9.24382"
Row 22 Col 2="0.185161"
Row 23 Col 1="9.59838"
Row 23 Col 2="0.158553"
Row 24 Col 1="9.94039"
Row 24 Col 2="0.218269"
Row 25 Col 1="10.2528"
Row 25 Col 2="0.353454"
Row 26 Col 1="10.64"
Row 26 Col 2="0.188359"
Row 27 Col 1="10.7995"
Row 27 Col 2="0.128287"
Row 28 Col 1="11.9653"
Row 28 Col 2="0.293258"
Row 29 Col 1="13.5284"
Row 29 Col 2="0.233092"
Row 30 Col 1="15.1801"
Row 30 Col 2="0.0988051"
Row 31 Col 1="15.2026"
Row 31 Col 2="0.0927671"
Row 32 Col 1="15.5206"
Row 32 Col 2="0.0810414"
Row 33 Col 1="15.6443"
Row 33 Col 2="0.0480217"
Row 34 Col 1="16.2343"
Row 34 Col 2="0.040413"
Row 35 Col 1="16.7734"
Row 35 Col 2="0.0771824"
Row 36 Col 1="16.8963"
Row 36 Col 2="0.223413"
Row 37 Col 1="17.1123"
Row 37 Col 2="0.118707"
Row 38 Col 1="17.9737"
Row 38 Col 2="0.479824"
Row 39 Col 1="19.0801"
Row 39 Col 2="0.0531117"
Row 40 Col 1="19.2999"
Row 40 Col 2="0.301643"
Row 41 Col 1="19.4354"
Row 41 Col 2="0.421435"
Row 42 Col 1="19.5171"
Row 42 Col 2="0.0421818"
Row 43 Col 1="20.1567"
Row 43 Col 2="0.400188"
Row 44 Col 1="21.3395"
Row 44 Col 2="0.26028"
Row 45 Col 1="21.6213"
Row 45 Col 2="0.0930471"
Row 46 Col 1="21.9813"
Row 46 Col 2="0.282799"
Row 47 Col 1="22.2327"
Row 47 Col 2="0.134362"
Row 48 Col 1="22.2494"
Row 48 Col 2="0.033424"
Row 49 Col 1="22.5018"
Row 49 Col 2="0.196203"
Row 50 Col 1="22.6474"
Row 50 Col 2="0.0320561"
Row 51 Col 1="23.4924"
Row 51 Col 2="0.0263858"
Row 52 Col 1="23.8083"
Row 52 Col 2="0.159562"
Row 53 Col 1="23.9182"
Row 53 Col 2="0.0256019"
Row 54 Col 1="24.6726"
Row 54 Col 2="0.134197"
Row 55 Col 1="25.0453"
Row 55 Col 2="0.191212"
Row 56 Col 1="25.1881"
Row 56 Col 2="0.286848"
Row 57 Col 1="25.4061"
Row 57 Col 2="0.0800683"
Row 58 Col 1="25.978"
Row 58 Col 2="0.00380955"
Row 59 Col 1="25.9899"
Row 59 Col 2="0.220575"
Row 60 Col 1="26.4033"
Row 60 Col 2="0.288751"
Row 61 Col 1="26.6079"
Row 61 Col 2="0.257547"
Row 62 Col 1="26.7559"
Row 62 Col 2="0.015267"
Row 63 Col 1="27.104"
Row 63 Col 2="0.124461"
Row 64 Col 1="27.2223"
Row 64 Col 2="0.140792"
Row 65 Col 1="27.6089"
Row 65 Col 2="0.146549"
Row 66 Col 1="27.7335"
Row 66 Col 2="0.120615"
Row 67 Col 1="28.0374"
Row 67 Col 2="0.24716"
Row 68 Col 1="28.3858"
Row 68 Col 2="0.455321"
Row 69 Col 1="28.9995"
Row 69 Col 2="0.463621"
Row 70 Col 1="29.1163"
Row 70 Col 2="0.00778465"
Row 71 Col 1="29.5743"
Row 71 Col 2="0.415616"
Row 72 Col 1="29.8313"
Row 72 Col 2="0.387994"
Row 73 Col 1="29.8673"
Row 73 Col 2="0.359266"
Row 74 Col 1="30.4841"
Row 74 Col 2="0.11361"
Row 75 Col 1="30.8961"
Row 75 Col 2="0.22163"
Row 76 Col 1="31.531"
Row 76 Col 2="0.310734"
Row 77 Col 1="31.6199"
Row 77 Col 2="0.268465"
Row 78 Col 1="32.4448"
Row 78 Col 2="0.354224"
Row 79 Col 1="32.4741"
Row 79 Col 2="0.0234717"
Row 80 Col 1="32.5307"
Row 80 Col 2="0.14024"
Row 81 Col 1="32.5828"
Row 81 Col 2="0.161276"
Row 82 Col 1="33.1381"
Row 82 Col 2="0.20756"
Row 83 Col 1="33.5195"
Row 83 Col 2="0.185495"
Row 84 Col 1="33.8063"
Row 84 Col 2="0.055221"
Row 85 Col 1="34.1499"
Row 85 Col 2="0.0584111"
Row 86 Col 1="34.2456"
Row 86 Col 2="0.0929564"
Row 87 Col 1="34.7813"
Row 87 Col 2="0.283671"
Row 88 Col 1="36.3228"
Row 88 Col 2="0.201649"
Row 89 Col 1="36.3776"
Row 89 Col 2="0.321063"
Row 90 Col 1="36.7104"
Row 90 Col 2="0.0483707"
Row 91 Col 1="36.7897"
Row 91 Col 2="0.183286"
Row 92 Col 1="36.9714"
Row 92 Col 2="0.279589"
Row 93 Col 1="37.3827"
Row 93 Col 2="0.301593"
Row 94 Col 1="37.6845"
Row 94 Col 2="0.116046"
Row 95 Col 1="37.7991"
Row 95 Col 2="0.338908"
Row 96 Col 1="38.9071"
Row 96 Col 2="0.0219319"
Row 97 Col 1="38.9609"
Row 97 Col 2="0.0536227"
Row 98 Col 1="39.3271"
Row 98 Col 2="0.232647"
Row 99 Col 1="39.9182"
Row 99 Col 2="0.229211"
Row 100 Col 1="39.9826"
Row 100 Col 2="0.175173"
Row 101 Col 1="41.5564"
Row 101 Col 2="0.125688"
Row 102 Col 1="41.6215"
Row 102 Col 2="0.191173"
Row 103 Col 1="42.0497"
Row 103 Col 2="0.0926172"
Row 104 Col 1="42.0683"
Row 104 Col 2="0.0358085"
Row 105 Col 1="42.3927"
Row 105 Col 2="0.069999"
Row 106 Col 1="42.7624"
Row 106 Col 2="0.0675815"
Row 107 Col 1="43.4554"
Row 107 Col 2="0.0337531"
Row 108 Col 1="44.2146"
Row 108 Col 2="0.0192197"
Row 109 Col 1="44.3571"
Row 109 Col 2="0.231524"
Row 110 Col 1="44.6918"
Row 110 Col 2="0.0840526"
Row 111 Col 1="44.7701"
Row 111 Col 2="0.160911"
Row 112 Col 1="45.1921"
Row 112 Col 2="0.187088"
Row 113 Col 1="45.5406"
Row 113 Col 2="0.130933"
Row 114 Col 1="45.8031"
Row 114 Col 2="0.342276"
Row 115 Col 1="46.0389"
Row 115 Col 2="0.377617"
Row 116 Col 1="46.1053"
Row 116 Col 2="0.292506"
Row 117 Col 1="46.9636"
Row 117 Col 2="0.4589"
Row 118 Col 1="47.4643"
Row 118 Col 2="0.236163"
Row 119 Col 1="47.9081"
Row 119 Col 2="0.376537"
Row 120 Col 1="47.9908"
Row 120 Col 2="0.450429"
Row 121 Col 1="47.9981"
Row 121 Col 2="0.454063"
Row 122 Col 1="48.0228"
Row 122 Col 2="0.178327"
Row 123 Col 1="48.3458"
Row 123 Col 2="0.247015"
Row 124 Col 1="48.7126"
Row 124 Col 2="0.320847"
Row 125 Col 1="48.8352"
Row 125 Col 2="0.422674"
Row 126 Col 1="49.577"
Row 126 Col 2="0.19531"
Row 127 Col 1="50.2243"
Row 127 Col 2="0.304229"
Row 128 Col 1="50.5987"
Row 128 Col 2="0.172321"
Row 129 Col 1="50.8639"
Row 129 Col 2="0.406702"
Row 130 Col 1="51.0265"
Row 130 Col 2="0.0224364"
Row 131 Col 1="51.5091"
Row 131 Col 2="0.07219"
Row 132 Col 1="51.6204"
Row 132 Col 2="0.384749"
Row 133 Col 1="51.6666"
Row 133 Col 2="0.244284"
Row 134 Col 1="51.9815"
Row 134 Col 2="0.0423492"
Row 135 Col 1="52.4497"
Row 135 Col 2="0.118127"
Row 136 Col 1="52.5038"
Row 136 Col 2="0.264395"
Row 137 Col 1="52.6016"
Row 137 Col 2="0.218379"
Row 138 Col 1="52.7679"
Row 138 Col 2="0.344669"
Row 139 Col 1="53.1915"
Row 139 Col 2="0.132533"
Row 140 Col 1="54.5579"
Row 140 Col 2="0.11858"
Row 141 Col 1="55.2123"
Row 141 Col 2="0.306625"
Row 142 Col 1="55.3918"
Row 142 Col 2="0.272723"
Row 143 Col 1="55.7069"
Row 143 Col 2="0.186475"
Row 144 Col 1="56.3326"
Row 144 Col 2="0.154419"
Row 145 Col 1="56.5418"
Row 145 Col 2="0.239766"
Row 146 Col 1="57.1749"
Row 146 Col 2="0.226001"
Row 147 Col 1="57.5681"
Row 147 Col 2="0.194197"
Row 148 Col 1="59.2712"
Row 148 Col 2="0.000307107"
Row 149 Col 1="59.3422"
Row 149 Col 2="0.342057"
Row 150 Col 1="59.4129"
Row 150 Col 2="0.173638"
Row 151 Col 1="59.9733"
Row 151 Col 2="0.299951"
Row 152 Col 1="60.2563"
Row 152 Col 2="0.301622"
Row 153 Col 1="60.3724"
Row 153 Col 2="0.201645"
Row 154 Col 1="60.3896"
Row 154 Col 2="0.044565"
Row 155 Col 1="60.7298"
Row 155 Col 2="0.334822"
Row 156 Col 1="61.2768"
Row 156 Col 2="0.248754"
Row 157 Col 1="61.6403"
Row 157 Col 2="0.160511"
Row 158 Col 1="62.2273"
Row 158 Col 2="0.119294"
Row 159 Col 1="62.2499"
Row 159 Col 2="0.205075"
Row 160 Col 1="62.5085"
Row 160 Col 2="0.100179"
Row 161 Col 1="63.3169"
Row 161 Col 2="0.211769"
Row 162 Col 1="63.4267"
Row 162 Col 2="0.0530162"
Row 163 Col 1="63.7625"
Row 163 Col 2="0.262992"
Row 164 Col 1="64.5089"
Row 164 Col 2="0.178713"
Row 165 Col 1="64.9995"
Row 165 Col 2="0.220863"
Row 166 Col 1="66.4963"
Row 166 Col 2="0.16069"
Row 167 Col 1="67.4312"
Row 167 Col 2="0.114761"
Row 168 Col 1="67.5505"
Row 168 Col 2="0.153904"
Row 169 Col 1="68.0505"
Row 169 Col 2="0.101985"
Row 170 Col 1="68.0837"
Row 170 Col 2="0.171501"
Row 171 Col 1="68.7745"
Row 171 Col 2="0.181391"
Row 172 Col 1="68.7925"
Row 172 Col 2="0.268341"
Row 173 Col 1="68.8721"
Row 173 Col 2="0.14794"
Row 174 Col 1="69.2532"
Row 174 Col 2="0.0695778"
Row 175 Col 1="70.0033"
Row 175 Col 2="0.166476"
Row 176 Col 1="70.1519"
Row 176 Col 2="0.119376"
Row 177 Col 1="70.197"
Row 177 Col 2="0.252533"
Row 178 Col 1="70.3384"
Row 178 Col 2="0.0321113"
Row 179 Col 1="70.559"
Row 179 Col 2="0.26156"
Row 180 Col 1="70.6382"
Row 180 Col 2="0.0101029"
Row 181 Col 1="70.9341"
Row 181 Col 2="0.248346"
Row 182 Col 1="71.2755"
Row 182 Col 2="0.110266"
Row 183 Col 1="72.1785"
Row 183 Col 2="0.14937"
Row 184 Col 1="72.2652"
Row 184 Col 2="0.0346589"
Row 185 Col 1="72.6437"
Row 185 Col 2="0.0329968"
Row 186 Col 1="73.7032"
Row 186 Col 2="0.251412"
Row 187 Col 1="73.8557"
Row 187 Col 2="0.113831"
Row 188 Col 1="75.7063"
Row 188 Col 2="0.110486"
Row 189 Col 1="75.7281"
Row 189 Col 2="0.0187061"
Row 190 Col 1="75.89"
Row 190 Col 2="0.143127"
Row 191 Col 1="76.0954"
Row 191 Col 2="0.0302385"
Row 192 Col 1="76.3179"
Row 192 Col 2="0.0933785"
Row 193 Col 1="76.4728"
Row 193 Col 2="0.235934"
Row 194 Col 1="77.1482"
Row 194 Col 2="0.379216"
Row 195 Col 1="77.4653"
Row 195 Col 2="0.050798"
Row 196 Col 1="77.7201"
Row 196 Col 2="0.19563"
Row 197 Col 1="77.7291"
Row 197 Col 2="0.398262"
Row 198 Col 1="77.9539"
Row 198 Col 2="0.288536"
Row 199 Col 1="78.4515"
Row 199 Col 2="0.0357685"
Row 200 Col 1="78.4702"
Row 200 Col 2="0.172303"
Row 201 Col 1="78.724"
Row 201 Col 2="0.158785"
Row 202 Col 1="78.9877"
Row 202 Col 2="0.315181"
Row 203 Col 1="79.7537"
Row 203 Col 2="0.451458"
Row 204 Col 1="79.9625"
Row 204 Col 2="0.106829"
Row 205 Col 1="80.3676"
Row 205 Col 2="0.0483834"
Row 206 Col 1="80.7884"
Row 206 Col 2="0.0457137"
Row 207 Col 1="80.8477"
Row 207 Col 2="0.393377"
Row 208 Col 1="81.0022"
Row 208 Col 2="0.00199631"
Row 209 Col 1="81.7499"
Row 209 Col 2="0.0410965"
Row 210 Col 1="81.7521"
Row 210 Col 2="0.0662272"
Row 211 Col 1="82.5392"
Row 211 Col 2="0.427823"
Row 212 Col 1="83.4592"
Row 212 Col 2="0.157679"
Row 213 Col 1="84.0438"
Row 213 Col 2="0.3317"
Row 214 Col 1="84.358"
Row 214 Col 2="0.0834512"
Row 215 Col 1="84.4233"
Row 215 Col 2="0.367495"
Row 216 Col 1="84.6388"
Row 216 Col 2="0.435108"
Row 217 Col 1="84.8391"
Row 217 Col 2="0.211916"
Row 218 Col 1="86.0472"
Row 218 Col 2="0.0749485"
Row 219 Col 1="86.2885"
Row 219 Col 2="0.212192"
Row 220 Col 1="87.0548"
Row 220 Col 2="0.385465"
Row 221 Col 1="87.1454"
Row 221 Col 2="0.0129429"
Row 222 Col 1="87.1774"
Row 222 Col 2="0.155138"
Row 223 Col 1="87.2291"
Row 223 Col 2="0.224448"
Row 224 Col 1="87.739"
Row 224 Col 2="0.277629"
Row 225 Col 1="87.7545"
Row 225 Col 2="0.302834"
Row 226 Col 1="87.7796"
Row 226 Col 2="0.00100196"
Row 227 Col 1="88.2503"
Row 227 Col 2="0.265075"
Row 228 Col 1="88.5412"
Row 228 Col 2="0.356072"
Row 229 Col 1="89.1228"
Row 229 Col 2="0.0324637"
Row 230 Col 1="89.3623"
Row 230 Col 2="0.176288"
Row 231 Col 1="89.5224"
Row 231 Col 2="0.176766"
Row 232 Col 1="89.9167"
Row 232 Col 2="0.303121"
Row 233 Col 1="90.1138"
Row 233 Col 2="0.109479"
Row 234 Col 1="90.1902"
Row 234 Col 2="0.112221"
Row 235 Col 1="91.212"
Row 235 Col 2="0.332107"
Row 236 Col 1="91.6032"
Row 236 Col 2="0.33158"
Row 237 Col 1="91.7048"
Row 237 Col 2="0.162844"
Row 238 Col 1="91.7752"
Row 238 Col 2="0.367326"
Row 239 Col 1="92.5002"
Row 239 Col 2="0.185224"
Row 240 Col 1="93.8834"
Row 240 Col 2="0.24186"
Row 241 Col 1="94.19"
Row 241 Col 2="0.165762"
Row 242 Col 1="94.3966"
Row 242 Col 2="0.3373"
Row 243 Col 1="94.6083"
Row 243 Col 2="0.241734"
Row 244 Col 1="94.663"
Row 244 Col 2="0.280881"
Row 245 Col 1="94.957"
Row 245 Col 2="0.376938"
Row 246 Col 1="95.3328"
Row 246 Col 2="0.258449"
Row 247 Col 1="97.0803"
Row 247 Col 2="0.0446931"
Row 248 Col 1="97.3635"
Row 248 Col 2="0.265776"
Row 249 Col 1="97.5189"
Row 249 Col 2="0.0702773"
Row 250 Col 1="97.7269"
Row 250 Col 2="0.0498009"
Row 251 Col 1="97.7287"
Row 251 Col 2="0.119658"
Row 252 Col 1="97.8556"
Row 252 Col 2="0.267283"
Row 253 Col 1="97.958"
Row 253 Col 2="0.32148"
Row 254 Col 1="98.0654"
Row 254 Col 2="0.0780807"
Row 255 Col 1="98.1229"
Row 255 Col 2="0.092767"
Row 256 Col 1="98.1779"
Row 256 Col 2="0.0262787"
Row 257 Col 1="98.4935"
Row 257 Col 2="0.273011"
Row 258 Col 1="98.6704"
Row 258 Col 2="0.279605"
[End Data]
[Titles]
Title="Errors in the lgamma Function"
Heading=""
XAxisTitle="z"
YAxisTitle="Error / Epsilon"
[End Titles]
[Title Options]
Title="00000000000000000024Arial"
Heading="00000000000000000016Arial"
YAxisTitle="00000000000000014.25Arial"
XAxisTitle="00000000000000014.25Arial"
YAxisVertical="1"
[End Title Options]
[Background]
Graph Background=16777215
Page Colour=16777215
Print Graph Background=1
Print Page Colour=0
[End Background]
[Axis]
XMin=0
XMax=10
YMin=0
YMax=10
MaxMinOptions="000000"
Axis Style=1
Logarithmic X Axis=0
Logarithmic Y Axis=0
Border Style=0
[End Axis]
[Data Lines]
Options="61D000000000842163116777216611000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216611000000000000000016777216"
[End Data Lines]
[Data Markers]
Size 1=2
Size 2=5
Size 3=5
Size 4=5
Size 5=5
Size 6=5
[End Data Markers]
[Data Labels]
Options="000100"
Primary Font="00000000000000000010Arial"
Secondary Font="00000000000000000010Arial"
Spacing X Primary=10
Spacing Y Primary=1
Spacing X Secondary=1
Spacing Y Secondary=1
Spacing Adjustment=1
[End Data Labels]
[Axis Markers]
Options 1=1
Spacing 1=10
Colour 1="00000000"
Options 2=1
Spacing 2=1
Colour 2="00000000"
Options 3=0
Spacing 3=1
Colour 3="00000000"
Options 4=0
Spacing 4=1
Colour 4="00000000"
Style=1
[End Axis Markers]
[Gridlines]
Options="010011"
Spacing X Primary=10
Spacing Y Primary=1
Spacing X Secondary=1
Spacing Y Secondary=1
Colour 1="00000000"
Colour 2="00000000"
Colour 3="14671839"
Colour 4="14671839"
[End Gridlines]
[Legend]
X Position=22
Y Position=10
Style=2
Font="00000000000000000010Arial"
[End Legend]
[Best Fit Line 1]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 1]
[Best Fit Line 2]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 2]
[Best Fit Line 3]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 3]
[Best Fit Line 4]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 4]
[Best Fit Line 5]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 5]
[Best Fit Line 6]
Options1="0100000000"
Options2="0100000000"
Options3="0100000000"
Options4="0100000000"
Options5="0100000000"
Options6="0100000000"
Options7="0100000000"
Options8="0100000000"
Options9="0100000000"
[End Best Fit Line 6]
[Best Fit Data 1]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=5
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 1]
[Best Fit Data 2]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=8
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 2]
[Best Fit Data 3]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=11
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 3]
[Best Fit Data 4]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=14
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 4]
[Best Fit Data 5]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=17
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 5]
[Best Fit Data 6]
Options1=0
Options2=0
Options3=0
Options4=0
Options5=0
Options6=0
X Position=20
Y Position=5
Style=1
Font="00000000000000000010Arial"
Correlation Coefficient=0
Accuracy=8
SF Or DP=0
Display Accuracy=0
Display Trailing Zeros=0
[End Best Fit Data 6]
[Equations]
Equation 1=""
Equation 2=""
Equation 3=""
Equation 4=""
Equation 5=""
Equation 6=""
Equation 7=""
Equation 8=""
Equation 9=""
Equation 10=""
Equation 11=""
Equation 12=""
Angle Measurement=0
[End Equations]
[Equation Options]
Equation 1="0100000000"
Equation 2="0100000000"
Equation 3="0100000000"
Equation 4="0100000000"
Equation 5="0100000000"
Equation 6="0100000000"
Equation 7="0100000000"
Equation 8="0100000000"
Equation 9="0100000000"
Equation 10="0100000000"
Equation 11="0100000000"
Equation 12="0100000000"
[End Equation Options]
[Print Setup & Margins]
Paper Size=9
Orientation=2
Left=2.5
Right=2.5
Top=2.5
Bottom=2.5
[End Print Setup & Margins]
[Datasheet]
Column Width 1=1500
Column Width 2=1500
Column Width 3=1500
Column Width 4=1500
Column Width 5=1500
Column Width 6=1500
Column Width 7=1500
Data Titles 1="Y1 Data"
Data Titles 2="Y2 Data"
Data Titles 3="Y3 Data"
Data Titles 4="Y4 Data"
Data Titles 5="Y5 Data"
Data Titles 6="Y6 Data"
[End Datasheet]
[Other Graph Options]
Zoom Factor=1
Auto Redraw=1
[End Other Graph Options]
[End]

BIN
doc/graphs/lgamma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

2293
doc/graphs/lgamma.rgd Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More