mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			1129 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1129 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <html>
 | |
| <head>
 | |
| <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
 | |
| <title>Error Handling</title>
 | |
| <link rel="stylesheet" href="../math.css" type="text/css">
 | |
| <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 | |
| <link rel="home" href="../index.html" title="Math Toolkit 2.5.1">
 | |
| <link rel="up" href="../overview.html" title="Chapter 1. Overview">
 | |
| <link rel="prev" href="result_type.html" title="Calculation of the Type of the Result">
 | |
| <link rel="next" href="compilers_overview.html" title="Compilers">
 | |
| </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="result_type.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.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="compilers_overview.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 | |
| </div>
 | |
| <div class="section">
 | |
| <div class="titlepage"><div><div><h2 class="title" style="clear: both">
 | |
| <a name="math_toolkit.error_handling"></a><a class="link" href="error_handling.html" title="Error Handling">Error Handling</a>
 | |
| </h2></div></div></div>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h0"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.quick_reference"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.quick_reference">Quick
 | |
|       Reference</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       Handling of errors by this library is split into two orthogonal parts:
 | |
|     </p>
 | |
| <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
 | |
| <li class="listitem">
 | |
|           What kind of error has been raised?
 | |
|         </li>
 | |
| <li class="listitem">
 | |
|           What should be done when the error is raised?
 | |
|         </li>
 | |
| </ul></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>
 | |
|         The default error actions are to throw an exception with an informative error
 | |
|         message. If you do not try to catch the exception, you will not see the message!
 | |
|       </p></td></tr>
 | |
| </table></div>
 | |
| <p>
 | |
|       The kinds of errors that can be raised are:
 | |
|     </p>
 | |
| <div class="variablelist">
 | |
| <p class="title"><b></b></p>
 | |
| <dl class="variablelist">
 | |
| <dt><span class="term">Domain Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when one or more arguments to a function are out of range.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Pole Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when the particular arguments cause the function to be evaluated
 | |
|             at a pole with no well defined residual value. For example if <a class="link" href="sf_gamma/tgamma.html" title="Gamma">tgamma</a>
 | |
|             is evaluated at exactly -2, the function approaches different limiting
 | |
|             values depending upon whether you approach from just above or just below
 | |
|             -2. Hence the function has no well defined value at this point and a
 | |
|             Pole Error will be raised.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Overflow Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when the result is either infinite, or too large to represent
 | |
|             in the numeric type being returned by the function.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Underflow Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when the result is not zero, but is too small to be represented
 | |
|             by any other value in the type being returned by the function.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Denormalisation Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when the returned result would be a denormalised value.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Rounding Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when the argument to one of the rounding functions <a class="link" href="rounding/trunc.html" title="Truncation Functions">trunc</a>,
 | |
|             <a class="link" href="rounding/round.html" title="Rounding Functions">round</a> and <a class="link" href="rounding/modf.html" title="Integer and Fractional Part Splitting (modf)">modf</a>
 | |
|             can not be represented as an integer type, is outside the range of the
 | |
|             result type.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Evaluation Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs if no method of evaluation is known, or when an internal error
 | |
|             occurred that prevented the result from being evaluated: this should
 | |
|             never occur, but if it does, then it's likely to be due to an iterative
 | |
|             method not converging fast enough.
 | |
|           </p></dd>
 | |
| <dt><span class="term">Indeterminate Result Error</span></dt>
 | |
| <dd><p>
 | |
|             Occurs when the result of a function is not defined for the values that
 | |
|             were passed to it.
 | |
|           </p></dd>
 | |
| </dl>
 | |
| </div>
 | |
| <p>
 | |
|       The action undertaken by each error condition is determined by the current
 | |
|       <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> in effect. This can be changed program-wide
 | |
|       by setting some configuration macros, or at namespace scope, or at the call
 | |
|       site (by specifying a specific policy in the function call).
 | |
|     </p>
 | |
| <p>
 | |
|       The available actions are:
 | |
|     </p>
 | |
| <div class="variablelist">
 | |
| <p class="title"><b></b></p>
 | |
| <dl class="variablelist">
 | |
| <dt><span class="term">throw_on_error</span></dt>
 | |
| <dd><p>
 | |
|             Throws the exception most appropriate to the error condition.
 | |
|           </p></dd>
 | |
| <dt><span class="term">errno_on_error</span></dt>
 | |
| <dd><p>
 | |
|             Sets ::errno to an appropriate value, and then returns the most appropriate
 | |
|             result
 | |
|           </p></dd>
 | |
| <dt><span class="term">ignore_error</span></dt>
 | |
| <dd><p>
 | |
|             Ignores the error and simply the returns the most appropriate result.
 | |
|           </p></dd>
 | |
| <dt><span class="term">user_error</span></dt>
 | |
| <dd><p>
 | |
|             Calls a <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">user-supplied
 | |
|             error handler</a>.
 | |
|           </p></dd>
 | |
| </dl>
 | |
| </div>
 | |
| <p>
 | |
|       The following tables show all the permutations of errors and actions, with
 | |
|       the <span class="bold"><strong>default action for each error shown in bold</strong></span>:
 | |
|     </p>
 | |
| <div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_domain_erro"></a><p class="title"><b>Table 1.1. Possible Actions for Domain Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Domain Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code></strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">EDOM</span></code> and returns
 | |
|                 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">()</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">()</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_domain_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_pole_errors"></a><p class="title"><b>Table 1.2. Possible Actions for Pole Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Pole Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code></strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">EDOM</span></code> and returns
 | |
|                 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">()</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">()</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_pole_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_overflow_er"></a><p class="title"><b>Table 1.3. Possible Actions for Overflow Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Overflow Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code></strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">ERANGE</span></code> and returns
 | |
|                 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">infinity</span><span class="special">()</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">infinity</span><span class="special">()</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_overflow_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_underflow_e"></a><p class="title"><b>Table 1.4. Possible Actions for Underflow Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Underflow Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">ERANGE</span></code> and returns
 | |
|                 0.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Returns 0</strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_underflow_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_denorm_erro"></a><p class="title"><b>Table 1.5. Possible Actions for Denorm Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Denorm Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">ERANGE</span></code> and returns
 | |
|                 the denormalised value.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Returns the denormalised value.</strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_denorm_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_rounding_er"></a><p class="title"><b>Table 1.6. Possible Actions for Rounding Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Rounding Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Throws <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">rounding_error</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">ERANGE</span></code> and returns
 | |
|                 the largest representable value of the target integer type (or the
 | |
|                 most negative value if the argument to the function was less than
 | |
|                 zero).
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Returns the largest representable value of
 | |
|                 the target integer type (or the most negative value if the argument
 | |
|                 to the function was less than zero).</strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_rounding_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_internal_ev"></a><p class="title"><b>Table 1.7. Possible Actions for Internal Evaluation Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Internal Evaluation Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Throws <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">evaluation_error</span></code></strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">EDOM</span></code> and returns
 | |
|                 the closest approximation found.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the closest approximation found.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_evaluation_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><div class="table">
 | |
| <a name="math_toolkit.error_handling.possible_actions_for_indetermina"></a><p class="title"><b>Table 1.8. Possible Actions for Indeterminate Result Errors</b></p>
 | |
| <div class="table-contents"><table class="table" summary="Possible Actions for Indeterminate Result Errors">
 | |
| <colgroup>
 | |
| <col>
 | |
| <col>
 | |
| </colgroup>
 | |
| <thead><tr>
 | |
| <th>
 | |
|               <p>
 | |
|                 Action
 | |
|               </p>
 | |
|             </th>
 | |
| <th>
 | |
|               <p>
 | |
|                 Behaviour
 | |
|               </p>
 | |
|             </th>
 | |
| </tr></thead>
 | |
| <tbody>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 throw_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 errno_on_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Sets <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
 | |
|                 to <code class="computeroutput"><span class="identifier">EDOM</span></code> and returns
 | |
|                 the same value as <code class="computeroutput"><span class="identifier">ignore_error</span></code>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 ignore_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 <span class="bold"><strong>Returns a default result that depends on the
 | |
|                 function where the error occurred.</strong></span>
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>
 | |
|               <p>
 | |
|                 user_error
 | |
|               </p>
 | |
|             </td>
 | |
| <td>
 | |
|               <p>
 | |
|                 Returns the result of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">user_indeterminate_result_error</span></code>:
 | |
|                 <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">this function
 | |
|                 must be defined by the user</a>.
 | |
|               </p>
 | |
|             </td>
 | |
| </tr>
 | |
| </tbody>
 | |
| </table></div>
 | |
| </div>
 | |
| <br class="table-break"><p>
 | |
|       All these error conditions are in namespace boost::math::policies, made available,
 | |
|       for example, a by namespace declaration using <code class="computeroutput"><span class="keyword">namespace</span>
 | |
|       <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">;</span></code> or individual using declarations <code class="computeroutput"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">overflow_error</span><span class="special">;</span></code>.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h1"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.rationale"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.rationale">Rationale</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       The flexibility of the current implementation should be reasonably obvious:
 | |
|       the default behaviours were chosen based on feedback during the formal review
 | |
|       of this library. It was felt that:
 | |
|     </p>
 | |
| <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
 | |
| <li class="listitem">
 | |
|           Genuine errors should be flagged with exceptions rather than following
 | |
|           C-compatible behaviour and setting <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>.
 | |
|         </li>
 | |
| <li class="listitem">
 | |
|           Numeric underflow and denormalised results were not considered to be fatal
 | |
|           errors in most cases, so it was felt that these should be ignored.
 | |
|         </li>
 | |
| <li class="listitem">
 | |
|           If there is more than one error, only the first detected will be reported
 | |
|           in the throw message.
 | |
|         </li>
 | |
| </ul></div>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h2"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.finding_more_information"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.finding_more_information">Finding
 | |
|       More Information</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       There are some pre-processor macro defines that can be used to <a class="link" href="pol_ref/policy_defaults.html" title="Using Macros to Change the Policy Defaults">change
 | |
|       the policy defaults</a>. See also the <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">policy section</a>.
 | |
|     </p>
 | |
| <p>
 | |
|       An example is at the Policy tutorial in <a class="link" href="pol_tutorial/changing_policy_defaults.html" title="Changing the Policy Defaults">Changing
 | |
|       the Policy Defaults</a>.
 | |
|     </p>
 | |
| <p>
 | |
|       Full source code of this typical example of passing a 'bad' argument (negative
 | |
|       degrees of freedom) to Student's t distribution is <a class="link" href="stat_tut/weg/error_eg.html" title="Error Handling Example">in
 | |
|       the error handling example</a>.
 | |
|     </p>
 | |
| <p>
 | |
|       The various kind of errors are described in more detail below.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h3"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.domain_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.domain_error">Domain
 | |
|       Errors</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       When a special function is passed an argument that is outside the range of
 | |
|       values for which that function is defined, then the function returns the result
 | |
|       of:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_domain_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <span class="identifier">Val</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating-point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, Val is the value that was out of
 | |
|       range, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> is the current policy in use
 | |
|       for the function that was called.
 | |
|     </p>
 | |
| <p>
 | |
|       The default policy behaviour of this function is to throw a std::domain_error
 | |
|       C++ exception. But if the <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> is to ignore
 | |
|       the error, or set global <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>,
 | |
|       then a NaN will be returned.
 | |
|     </p>
 | |
| <p>
 | |
|       This behaviour is chosen to assist compatibility with the behaviour of <span class="emphasis"><em>ISO/IEC
 | |
|       9899:1999 Programming languages - C</em></span> and with the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">Draft
 | |
|       Technical Report on C++ Library Extensions, 2005-06-24, section 5.2.1, paragraph
 | |
|       6</a>:
 | |
|     </p>
 | |
| <div class="blockquote"><blockquote class="blockquote"><p>
 | |
|         <span class="emphasis"><em>"Each of the functions declared above shall return a NaN (Not
 | |
|         a Number) if any argument value is a NaN, but it shall not report a domain
 | |
|         error. Otherwise, each of the functions declared above shall report a domain
 | |
|         error for just those argument values for which:</em></span>
 | |
|       </p></blockquote></div>
 | |
| <div class="blockquote"><blockquote class="blockquote">
 | |
| <p>
 | |
|         <span class="emphasis"><em>"the function description's Returns clause explicitly specifies
 | |
|         a domain, and those arguments fall outside the specified domain; or</em></span>
 | |
|       </p>
 | |
| <p>
 | |
|         <span class="emphasis"><em>"the corresponding mathematical function value has a non-zero
 | |
|         imaginary component; or</em></span>
 | |
|       </p>
 | |
| <p>
 | |
|         <span class="emphasis"><em>"the corresponding mathematical function is not mathematically
 | |
|         defined.</em></span>
 | |
|       </p>
 | |
| </blockquote></div>
 | |
| <div class="blockquote"><blockquote class="blockquote"><p>
 | |
|         <span class="emphasis"><em>"Note 2: A mathematical function is mathematically defined
 | |
|         for a given set of argument values if it is explicitly defined for that set
 | |
|         of argument values or if its limiting value exists and does not depend on
 | |
|         the direction of approach."</em></span>
 | |
|       </p></blockquote></div>
 | |
| <p>
 | |
|       Note that in order to support information-rich error messages when throwing
 | |
|       exceptions, <code class="computeroutput"><span class="identifier">Message</span></code> must contain
 | |
|       a <a href="../../../../format/index.html" target="_top">Boost.Format</a> recognised format
 | |
|       specifier: the argument <code class="computeroutput"><span class="identifier">Val</span></code>
 | |
|       is inserted into the error message according to the specifier used.
 | |
|     </p>
 | |
| <p>
 | |
|       For example if <code class="computeroutput"><span class="identifier">Message</span></code> contains
 | |
|       a "%1%" then it is replaced by the value of <code class="computeroutput"><span class="identifier">Val</span></code>
 | |
|       to the full precision of T, where as "%.3g" would contain the value
 | |
|       of <code class="computeroutput"><span class="identifier">Val</span></code> to 3 digits. See the
 | |
|       <a href="../../../../format/index.html" target="_top">Boost.Format</a> documentation
 | |
|       for more details.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h4"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.pole_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.pole_error">Evaluation
 | |
|       at a pole</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       When a special function is passed an argument that is at a pole without a well
 | |
|       defined residual value, then the function returns the result of:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_pole_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <span class="identifier">Val</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, <code class="computeroutput"><span class="identifier">Val</span></code>
 | |
|       is the value of the argument that is at a pole, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a>
 | |
|       is the current policy in use for the function that was called.
 | |
|     </p>
 | |
| <p>
 | |
|       The default behaviour of this function is to throw a std::domain_error exception.
 | |
|       But <a class="link" href="pol_ref/error_handling_policies.html" title="Error Handling Policies">error handling
 | |
|       policies</a> can be used to change this, for example to <code class="computeroutput"><span class="identifier">ignore_error</span></code>
 | |
|       and return NaN.
 | |
|     </p>
 | |
| <p>
 | |
|       Note that in order to support information-rich error messages when throwing
 | |
|       exceptions, <code class="computeroutput"><span class="identifier">Message</span></code> must contain
 | |
|       a <a href="../../../../format/index.html" target="_top">Boost.Format</a> recognised format
 | |
|       specifier: the argument <code class="computeroutput"><span class="identifier">val</span></code>
 | |
|       is inserted into the error message according to the specifier used.
 | |
|     </p>
 | |
| <p>
 | |
|       For example if <code class="computeroutput"><span class="identifier">Message</span></code> contains
 | |
|       a "%1%" then it is replaced by the value of <code class="computeroutput"><span class="identifier">val</span></code>
 | |
|       to the full precision of T, where as "%.3g" would contain the value
 | |
|       of <code class="computeroutput"><span class="identifier">val</span></code> to 3 digits. See the
 | |
|       <a href="../../../../format/index.html" target="_top">Boost.Format</a> documentation
 | |
|       for more details.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h5"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.overflow_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.overflow_error">Numeric
 | |
|       Overflow</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       When the result of a special function is too large to fit in the argument floating-point
 | |
|       type, then the function returns the result of:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_overflow_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating-point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a>
 | |
|       is the current policy in use for the function that was called.
 | |
|     </p>
 | |
| <p>
 | |
|       The default policy for this function is that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
 | |
|       C++ exception is thrown. But if, for example, an <code class="computeroutput"><span class="identifier">ignore_error</span></code>
 | |
|       policy is used, then returns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">infinity</span><span class="special">()</span></code>.
 | |
|       In this situation if the type <code class="computeroutput"><span class="identifier">T</span></code>
 | |
|       doesn't support infinities, the maximum value for the type is returned.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h6"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.underflow_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.underflow_error">Numeric
 | |
|       Underflow</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       If the result of a special function is known to be non-zero, but the calculated
 | |
|       result underflows to zero, then the function returns the result of:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_underflow_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a>
 | |
|       is the current policy in use for the called function.
 | |
|     </p>
 | |
| <p>
 | |
|       The default version of this function returns zero. But with another policy,
 | |
|       like <code class="computeroutput"><span class="identifier">throw_on_error</span></code>, throws
 | |
|       an <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code> C++ exception.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h7"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.denorm_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.denorm_error">Denormalisation
 | |
|       Errors</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       If the result of a special function is a denormalised value <span class="emphasis"><em>z</em></span>
 | |
|       then the function returns the result of:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_denorm_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a>
 | |
|       is the current policy in use for the called function.
 | |
|     </p>
 | |
| <p>
 | |
|       The default version of this function returns <span class="emphasis"><em>z</em></span>. But with
 | |
|       another policy, like <code class="computeroutput"><span class="identifier">throw_on_error</span></code>
 | |
|       throws an <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code> C++ exception.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h8"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.evaluation_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.evaluation_error">Evaluation
 | |
|       Errors</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       When a special function calculates a result that is known to be erroneous,
 | |
|       or where the result is incalculable then it calls:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_evaluation_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <span class="identifier">Val</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, <code class="computeroutput"><span class="identifier">Val</span></code>
 | |
|       is the erroneous value, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> is the current
 | |
|       policy in use for the called function.
 | |
|     </p>
 | |
| <p>
 | |
|       The default behaviour of this function is to throw a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">evaluation_error</span></code>.
 | |
|     </p>
 | |
| <p>
 | |
|       Note that in order to support information rich error messages when throwing
 | |
|       exceptions, <code class="computeroutput"><span class="identifier">Message</span></code> must contain
 | |
|       a <a href="../../../../format/index.html" target="_top">Boost.Format</a> recognised format
 | |
|       specifier: the argument <code class="computeroutput"><span class="identifier">val</span></code>
 | |
|       is inserted into the error message according to the specifier used.
 | |
|     </p>
 | |
| <p>
 | |
|       For example if <code class="computeroutput"><span class="identifier">Message</span></code> contains
 | |
|       a "%1%" then it is replaced by the value of <code class="computeroutput"><span class="identifier">val</span></code>
 | |
|       to the full precision of T, where as "%.3g" would contain the value
 | |
|       of <code class="computeroutput"><span class="identifier">val</span></code> to 3 digits. See the
 | |
|       <a href="../../../../format/index.html" target="_top">Boost.Format</a> documentation
 | |
|       for more details.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h9"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.indeterminate_result_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.indeterminate_result_error">Indeterminate
 | |
|       Result Errors</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       When the result of a special function is indeterminate for the value that was
 | |
|       passed to it, then the function returns the result of:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_overflow_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <span class="identifier">Val</span><span class="special">,</span> <span class="identifier">Default</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating-point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, Val is the value for which the
 | |
|       result is indeterminate, Default is an alternative default result that must
 | |
|       be returned for <code class="computeroutput"><span class="identifier">ignore_error</span></code>
 | |
|       and <code class="computeroutput"><span class="identifier">errno_on_erro</span></code> policies,
 | |
|       and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> is the current policy in use for the
 | |
|       function that was called.
 | |
|     </p>
 | |
| <p>
 | |
|       The default policy for this function is <code class="computeroutput"><span class="identifier">ignore_error</span></code>:
 | |
|       note that this error type is reserved for situations where the result is mathematically
 | |
|       undefined or indeterminate, but there is none the less a convention for what
 | |
|       the result should be: for example the C99 standard specifies that the result
 | |
|       of 0<sup>0</sup> is 1, even though the result is actually mathematically indeterminate.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h10"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.rounding_error"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.rounding_error">Rounding
 | |
|       Errors</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       When one of the rounding functions <a class="link" href="rounding/round.html" title="Rounding Functions">round</a>,
 | |
|       <a class="link" href="rounding/trunc.html" title="Truncation Functions">trunc</a> or <a class="link" href="rounding/modf.html" title="Integer and Fractional Part Splitting (modf)">modf</a>
 | |
|       is called with an argument that has no integer representation, or is too large
 | |
|       to be represented in the result type then the value returned is the result
 | |
|       of a call to:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">raise_rounding_error</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">FunctionName</span><span class="special">,</span> <span class="identifier">Message</span><span class="special">,</span> <span class="identifier">Val</span><span class="special">,</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Where <code class="computeroutput"><span class="identifier">T</span></code> is the floating point
 | |
|       type passed to the function, <code class="computeroutput"><span class="identifier">FunctionName</span></code>
 | |
|       is the name of the function, <code class="computeroutput"><span class="identifier">Message</span></code>
 | |
|       is an error message describing the problem, <code class="computeroutput"><span class="identifier">Val</span></code>
 | |
|       is the erroneous argument, and <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> is the
 | |
|       current policy in use for the called function.
 | |
|     </p>
 | |
| <p>
 | |
|       The default behaviour of this function is to throw a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">rounding_error</span></code>.
 | |
|     </p>
 | |
| <p>
 | |
|       Note that in order to support information rich error messages when throwing
 | |
|       exceptions, <code class="computeroutput"><span class="identifier">Message</span></code> must contain
 | |
|       a <a href="../../../../format/index.html" target="_top">Boost.Format</a> recognised format
 | |
|       specifier: the argument <code class="computeroutput"><span class="identifier">val</span></code>
 | |
|       is inserted into the error message according to the specifier used.
 | |
|     </p>
 | |
| <p>
 | |
|       For example if <code class="computeroutput"><span class="identifier">Message</span></code> contains
 | |
|       a "%1%" then it is replaced by the value of <code class="computeroutput"><span class="identifier">val</span></code>
 | |
|       to the full precision of T, where as "%.3g" would contain the value
 | |
|       of <code class="computeroutput"><span class="identifier">val</span></code> to 3 digits. See the
 | |
|       <a href="../../../../format/index.html" target="_top">Boost.Format</a> documentation
 | |
|       for more details.
 | |
|     </p>
 | |
| <h4>
 | |
| <a name="math_toolkit.error_handling.h11"></a>
 | |
|       <span class="phrase"><a name="math_toolkit.error_handling.checked_narrowing_cast"></a></span><a class="link" href="error_handling.html#math_toolkit.error_handling.checked_narrowing_cast">Errors
 | |
|       from typecasts</a>
 | |
|     </h4>
 | |
| <p>
 | |
|       Many special functions evaluate their results at a higher precision than their
 | |
|       arguments in order to ensure full machine precision in the result: for example,
 | |
|       a function passed a float argument may evaluate its result using double precision
 | |
|       internally. Many of the errors listed above may therefore occur not during
 | |
|       evaluation, but when converting the result to the narrower result type. The
 | |
|       function:
 | |
|     </p>
 | |
| <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
 | |
| <span class="identifier">T</span> <span class="identifier">checked_narrowing_cast</span><span class="special">(</span><span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">function</span><span class="special">);</span>
 | |
| </pre>
 | |
| <p>
 | |
|       Is used to perform these conversions, and will call the error handlers listed
 | |
|       above on <a class="link" href="error_handling.html#math_toolkit.error_handling.overflow_error">overflow</a>,
 | |
|       <a class="link" href="error_handling.html#math_toolkit.error_handling.underflow_error">underflow</a>
 | |
|       or <a class="link" href="error_handling.html#math_toolkit.error_handling.denorm_error">denormalisation</a>.
 | |
|     </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-2010, 2012-2014 Nikhar Agrawal,
 | |
|       Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert
 | |
|       Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Johan Råde, Gautam Sewani,
 | |
|       Benjamin Sobotta, Thijs van den Berg, Daryle Walker and Xiaogang Zhang<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="result_type.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.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="compilers_overview.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 | |
| </div>
 | |
| </body>
 | |
| </html>
 |