| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> |
| <title>Conceptual Requirements for Real Number Types</title> |
| <link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.74.0"> |
| <link rel="home" href="../../index.html" title="Math Toolkit"> |
| <link rel="up" href="../using_udt.html" title="Use with User-Defined Floating-Point Types"> |
| <link rel="prev" href="use_mpfr.html" title="Using With MPFR / GMP - a High-Precision Floating-Point Library"> |
| <link rel="next" href="dist_concept.html" title="Conceptual Requirements for Distribution Types"> |
| </head> |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
| <table cellpadding="2" width="100%"><tr> |
| <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> |
| <td align="center"><a href="../../../../../../../index.html">Home</a></td> |
| <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> |
| <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> |
| <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> |
| <td align="center"><a href="../../../../../../../more/index.htm">More</a></td> |
| </tr></table> |
| <hr> |
| <div class="spirit-nav"> |
| <a accesskey="p" href="use_mpfr.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_udt.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dist_concept.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| <div class="section" lang="en"> |
| <div class="titlepage"><div><div><h3 class="title"> |
| <a name="math_toolkit.using_udt.concepts"></a><a class="link" href="concepts.html" title="Conceptual Requirements for Real Number Types"> Conceptual Requirements |
| for Real Number Types</a> |
| </h3></div></div></div> |
| <p> |
| The functions, and statistical distributions in this library can be used |
| with any type <span class="emphasis"><em>RealType</em></span> that meets the conceptual requirements |
| given below. All the built in floating point types will meet these requirements. |
| User defined types that meet the requirements can also be used. For example, |
| with <a class="link" href="use_ntl.html" title="Using With NTL - a High-Precision Floating-Point Library">a thin wrapper class</a> |
| one of the types provided with <a href="http://shoup.net/ntl/" target="_top">NTL (RR)</a> |
| can be used. Submissions of binding to other extended precision types would |
| also be most welcome! |
| </p> |
| <p> |
| The guiding principal behind these requirements, is that a <span class="emphasis"><em>RealType</em></span> |
| behaves just like a built in floating point type. |
| </p> |
| <a name="math_toolkit.using_udt.concepts.basic_arithmetic_requirements"></a><h5> |
| <a name="id1229795"></a> |
| <a class="link" href="concepts.html#math_toolkit.using_udt.concepts.basic_arithmetic_requirements">Basic |
| Arithmetic Requirements</a> |
| </h5> |
| <p> |
| These requirements are common to all of the functions in this library. |
| </p> |
| <p> |
| In the following table <span class="emphasis"><em>r</em></span> is an object of type <code class="computeroutput"><span class="identifier">RealType</span></code>, <span class="emphasis"><em>cr</em></span> and |
| <span class="emphasis"><em>cr2</em></span> are objects of type <code class="computeroutput"><span class="keyword">const</span> |
| <span class="identifier">RealType</span></code>, and <span class="emphasis"><em>ca</em></span> |
| is an object of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">type</span></code> (arithmetic types include all the |
| built in integers and floating point types). |
| </p> |
| <div class="informaltable"><table class="table"> |
| <colgroup> |
| <col> |
| <col> |
| <col> |
| </colgroup> |
| <thead><tr> |
| <th> |
| <p> |
| Expression |
| </p> |
| </th> |
| <th> |
| <p> |
| Result Type |
| </p> |
| </th> |
| <th> |
| <p> |
| Notes |
| </p> |
| </th> |
| </tr></thead> |
| <tbody> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RealType</span><span class="special">(</span><span class="identifier">cr</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType is copy constructible. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RealType</span><span class="special">(</span><span class="identifier">ca</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType is copy constructible from the arithmetic types. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Assignment operator. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Assignment operator from the arithmetic types. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">+=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Adds cr to r. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">+=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Adds ar to r. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">-=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Subtracts cr from r. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">-=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Subtracts ca from r. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">*=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Multiplies r by cr. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">*=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Multiplies r by ca. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">/=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Divides r by cr. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">r</span> <span class="special">/=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Divides r by ca. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="special">-</span><span class="identifier">r</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Unary Negation. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="special">+</span><span class="identifier">r</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType& |
| </p> |
| </td> |
| <td> |
| <p> |
| Identity Operation. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">+</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Addition |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">+</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Addition |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">+</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Addition |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">-</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Subtraction |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">-</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Subtraction |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">-</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Subtraction |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">*</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Multiplication |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">*</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Multiplication |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">*</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Multiplication |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">/</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Subtraction |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">/</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Subtraction |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">/</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| Binary Subtraction |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">==</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Equality Comparison |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">==</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Equality Comparison |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">==</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Equality Comparison |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">!=</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Inequality Comparison |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">!=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Inequality Comparison |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">!=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Inequality Comparison |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special"><=</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Less than equal to. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special"><=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Less than equal to. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special"><=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Less than equal to. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">>=</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Greater than equal to. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">>=</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Greater than equal to. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">>=</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Greater than equal to. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special"><</span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Less than comparison. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special"><</span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Less than comparison. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special"><</span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Less than comparison. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">></span> |
| <span class="identifier">cr2</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Greater than comparison. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cr</span> <span class="special">></span> |
| <span class="identifier">ca</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Greater than comparison. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ca</span> <span class="special">></span> |
| <span class="identifier">cr</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| bool |
| </p> |
| </td> |
| <td> |
| <p> |
| Greater than comparison. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">digits</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| int |
| </p> |
| </td> |
| <td> |
| <p> |
| The number of digits in the significand of RealType. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">max_value</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| The largest representable number by type RealType. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">min_value</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| The smallest representable number by type RealType. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">log_max_value</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| The natural logarithm of the largest representable number by type |
| RealType. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">log_min_value</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| The natural logarithm of the smallest representable number by type |
| RealType. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">epsilon</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| <td> |
| <p> |
| The machine epsilon of RealType. |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| Note that: |
| </p> |
| <div class="orderedlist"><ol type="1"> |
| <li> |
| The functions <code class="computeroutput"><span class="identifier">log_max_value</span></code> |
| and <code class="computeroutput"><span class="identifier">log_min_value</span></code> can |
| be synthesised from the others, and so no explicit specialisation is |
| required. |
| </li> |
| <li> |
| The function <code class="computeroutput"><span class="identifier">epsilon</span></code> |
| can be synthesised from the others, so no explicit specialisation is |
| required provided the precision of RealType does not vary at runtime |
| (see the header <a href="../../../../../../../boost/math/bindings/rr.hpp" target="_top">boost/math/bindings/rr.hpp</a> |
| for an example where the precision does vary at runtime). |
| </li> |
| <li> |
| The functions <code class="computeroutput"><span class="identifier">digits</span></code>, |
| <code class="computeroutput"><span class="identifier">max_value</span></code> and <code class="computeroutput"><span class="identifier">min_value</span></code>, all get synthesised automatically |
| from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>. However, if <code class="computeroutput"><span class="identifier">numeric_limits</span></code> is not specialised for |
| type RealType, then you will get a compiler error when code tries to |
| use these functions, <span class="emphasis"><em>unless</em></span> you explicitly specialise |
| them. For example if the precision of RealType varies at runtime, then |
| <code class="computeroutput"><span class="identifier">numeric_limits</span></code> support |
| may not be appropriate, see <a href="../../../../../../../boost/math/bindings/rr.hpp" target="_top">boost/math/bindings/rr.hpp</a> |
| for examples. |
| </li> |
| </ol></div> |
| <div class="warning"><table border="0" summary="Warning"> |
| <tr> |
| <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td> |
| <th align="left">Warning</th> |
| </tr> |
| <tr><td align="left" valign="top"> |
| <p> |
| If <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><></span></code> |
| is <span class="bold"><strong>not specialized</strong></span> for type <span class="emphasis"><em>RealType</em></span> |
| then the default float precision of 6 decimal digits will be used by other |
| Boost programs including: |
| </p> |
| <p> |
| Boost.Test: giving misleading error messages like |
| </p> |
| <p> |
| <span class="emphasis"><em>"difference between {9.79796} and {9.79796} exceeds 5.42101e-19%".</em></span> |
| </p> |
| <p> |
| Boost.LexicalCast and Boost.Serialization when converting the number to |
| a string, causing potentially serious loss of accuracy on output. |
| </p> |
| <p> |
| Although it might seem obvious that RealType should require <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> to be specialized, this |
| is not sensible for <code class="computeroutput"><span class="identifier">NTL</span><span class="special">::</span><span class="identifier">RR</span></code> |
| and similar classes where the number of digits is a runtime parameter (where |
| as for <code class="computeroutput"><span class="identifier">numeric_limits</span></code> it |
| has to be fixed at compile time). |
| </p> |
| </td></tr> |
| </table></div> |
| <a name="math_toolkit.using_udt.concepts.standard_library_support_requirements"></a><h5> |
| <a name="id1233610"></a> |
| <a class="link" href="concepts.html#math_toolkit.using_udt.concepts.standard_library_support_requirements">Standard |
| Library Support Requirements</a> |
| </h5> |
| <p> |
| Many (though not all) of the functions in this library make calls to standard |
| library functions, the following table summarises the requirements. Note |
| that most of the functions in this library will only call a small subset |
| of the functions listed here, so if in doubt whether a user defined type |
| has enough standard library support to be useable the best advise is to try |
| it and see! |
| </p> |
| <p> |
| In the following table <span class="emphasis"><em>r</em></span> is an object of type <code class="computeroutput"><span class="identifier">RealType</span></code>, <span class="emphasis"><em>cr1</em></span> and |
| <span class="emphasis"><em>cr2</em></span> are objects of type <code class="computeroutput"><span class="keyword">const</span> |
| <span class="identifier">RealType</span></code>, and <span class="emphasis"><em>i</em></span> |
| is an object of type <code class="computeroutput"><span class="keyword">int</span></code>. |
| </p> |
| <div class="informaltable"><table class="table"> |
| <colgroup> |
| <col> |
| <col> |
| </colgroup> |
| <thead><tr> |
| <th> |
| <p> |
| Expression |
| </p> |
| </th> |
| <th> |
| <p> |
| Result Type |
| </p> |
| </th> |
| </tr></thead> |
| <tbody> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">fabs</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">abs</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ceil</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">floor</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">exp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">pow</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span> |
| <span class="identifier">cr2</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">log</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">frexp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span> |
| <span class="special">&</span><span class="identifier">i</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ldexp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span> |
| <span class="identifier">i</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">cos</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">sin</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">asin</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">tan</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">atan</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">fmod</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">round</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">iround</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| int |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">trunc</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| RealType |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">itrunc</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| int |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| Note that the table above lists only those standard library functions known |
| to be used (or likely to be used in the near future) by this library. The |
| following functions: <code class="computeroutput"><span class="identifier">acos</span></code>, |
| <code class="computeroutput"><span class="identifier">atan2</span></code>, <code class="computeroutput"><span class="identifier">fmod</span></code>, |
| <code class="computeroutput"><span class="identifier">cosh</span></code>, <code class="computeroutput"><span class="identifier">sinh</span></code>, |
| <code class="computeroutput"><span class="identifier">tanh</span></code>, <code class="computeroutput"><span class="identifier">log10</span></code>, |
| <code class="computeroutput"><span class="identifier">lround</span></code>, <code class="computeroutput"><span class="identifier">llround</span></code>, |
| ltrunc<code class="computeroutput"><span class="special">,</span> </code>lltrunc<code class="computeroutput"> <span class="keyword">and</span> </code>modf` are not currently used, but may |
| be if further special functions are added. |
| </p> |
| <p> |
| Note that the <code class="computeroutput"><span class="identifier">round</span></code>, <code class="computeroutput"><span class="identifier">trunc</span></code> and <code class="computeroutput"><span class="identifier">modf</span></code> |
| functions are not part of the current C++ standard: they are part of the |
| additions added to C99 which will likely be in the next C++ standard. There |
| are Boost versions of these provided as a backup, and the functions are always |
| called unqualified so that argument-dependent-lookup can take place. |
| </p> |
| <p> |
| In addition, for efficient and accurate results, a <a class="link" href="../backgrounders/lanczos.html" title="The Lanczos Approximation">Lanczos |
| approximation</a> is highly desirable. You may be able to adapt an existing |
| approximation from <a href="../../../../../../../boost/math/special_functions/lanczos.hpp" target="_top">boost/math/special_functions/lanczos.hpp</a> |
| or <a href="../../../../../../../boost/math/bindings/detail/big_lanczos.hpp" target="_top">boost/math/bindings/detail/big_lanczos.hpp</a>: |
| in the former case you will need change static_cast's to lexical_cast's, |
| and the constants to <span class="emphasis"><em>strings</em></span> (in order to ensure the |
| coefficients aren't truncated to long double) and then specialise <code class="computeroutput"><span class="identifier">lanczos_traits</span></code> for type T. Otherwise you |
| may have to hack <a href="../../../../../tools/lanczos_generator.cpp" target="_top">libs/math/tools/lanczos_generator.cpp</a> |
| to find a suitable approximation for your RealType. The code will still compile |
| if you don't do this, but both accuracy and efficiency will be greatly compromised |
| in any function that makes use of the gamma/beta/erf family of functions. |
| </p> |
| </div> |
| <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> |
| <td align="left"></td> |
| <td align="right"><div class="copyright-footer">Copyright © 2006 , 2007, 2008, 2009, 2010 John Maddock, Paul A. Bristow, |
| Hubert Holin, Xiaogang Zhang, Bruno Lalande, Johan Råde, Gautam Sewani and |
| Thijs van den Berg<p> |
| Distributed under the Boost Software License, Version 1.0. (See accompanying |
| file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) |
| </p> |
| </div></td> |
| </tr></table> |
| <hr> |
| <div class="spirit-nav"> |
| <a accesskey="p" href="use_mpfr.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_udt.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dist_concept.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| </body> |
| </html> |