]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/math/doc/html/math_toolkit/pol_ref/error_handling_policies.html
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / math / doc / html / math_toolkit / pol_ref / error_handling_policies.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Error Handling Policies</title>
5 <link rel="stylesheet" href="../../math.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
7 <link rel="home" href="../../index.html" title="Math Toolkit 2.5.1">
8 <link rel="up" href="../pol_ref.html" title="Policy Reference">
9 <link rel="prev" href="../pol_ref.html" title="Policy Reference">
10 <link rel="next" href="internal_promotion.html" title="Internal Floating-point Promotion Policies">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../pol_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../pol_ref.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="internal_promotion.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="math_toolkit.pol_ref.error_handling_policies"></a><a class="link" href="error_handling_policies.html" title="Error Handling Policies">Error Handling
28 Policies</a>
29 </h3></div></div></div>
30 <p>
31 There are two orthogonal aspects to error handling:
32 </p>
33 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
34 <li class="listitem">
35 What to do (if anything) with the error.
36 </li>
37 <li class="listitem">
38 What kind of error is being raised.
39 </li>
40 </ul></div>
41 <h5>
42 <a name="math_toolkit.pol_ref.error_handling_policies.h0"></a>
43 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.available_actions_when_an_error_"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.available_actions_when_an_error_">Available
44 Actions When an Error is Raised</a>
45 </h5>
46 <p>
47 What to do with the error is encapsulated by an enumerated type:
48 </p>
49 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">policies</span> <span class="special">{</span>
50
51 <span class="keyword">enum</span> <span class="identifier">error_policy_type</span>
52 <span class="special">{</span>
53 <span class="identifier">throw_on_error</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="comment">// throw an exception.</span>
54 <span class="identifier">errno_on_error</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="comment">// set ::errno &amp; return 0, NaN, infinity or best guess.</span>
55 <span class="identifier">ignore_error</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="comment">// return 0, NaN, infinity or best guess.</span>
56 <span class="identifier">user_error</span> <span class="special">=</span> <span class="number">3</span> <span class="comment">// call a user-defined error handler.</span>
57 <span class="special">};</span>
58
59 <span class="special">}}}</span> <span class="comment">// namespaces</span>
60 </pre>
61 <p>
62 The various enumerated values have the following meanings:
63 </p>
64 <h6>
65 <a name="math_toolkit.pol_ref.error_handling_policies.h1"></a>
66 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.throw_on_error"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.throw_on_error">throw_on_error</a>
67 </h6>
68 <p>
69 Will throw one of the following exceptions, depending upon the type of the
70 error:
71 </p>
72 <div class="informaltable"><table class="table">
73 <colgroup>
74 <col>
75 <col>
76 </colgroup>
77 <thead><tr>
78 <th>
79 <p>
80 Error Type
81 </p>
82 </th>
83 <th>
84 <p>
85 Exception
86 </p>
87 </th>
88 </tr></thead>
89 <tbody>
90 <tr>
91 <td>
92 <p>
93 Domain Error
94 </p>
95 </td>
96 <td>
97 <p>
98 std::domain_error
99 </p>
100 </td>
101 </tr>
102 <tr>
103 <td>
104 <p>
105 Pole Error
106 </p>
107 </td>
108 <td>
109 <p>
110 std::domain_error
111 </p>
112 </td>
113 </tr>
114 <tr>
115 <td>
116 <p>
117 Overflow Error
118 </p>
119 </td>
120 <td>
121 <p>
122 std::overflow_error
123 </p>
124 </td>
125 </tr>
126 <tr>
127 <td>
128 <p>
129 Underflow Error
130 </p>
131 </td>
132 <td>
133 <p>
134 std::underflow_error
135 </p>
136 </td>
137 </tr>
138 <tr>
139 <td>
140 <p>
141 Denorm Error
142 </p>
143 </td>
144 <td>
145 <p>
146 std::underflow_error
147 </p>
148 </td>
149 </tr>
150 <tr>
151 <td>
152 <p>
153 Evaluation Error
154 </p>
155 </td>
156 <td>
157 <p>
158 boost::math::evaluation_error
159 </p>
160 </td>
161 </tr>
162 <tr>
163 <td>
164 <p>
165 Indeterminate Result Error
166 </p>
167 </td>
168 <td>
169 <p>
170 std::domain_error
171 </p>
172 </td>
173 </tr>
174 </tbody>
175 </table></div>
176 <h6>
177 <a name="math_toolkit.pol_ref.error_handling_policies.h2"></a>
178 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.errno_on_error"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.errno_on_error">errno_on_error</a>
179 </h6>
180 <p>
181 Will set global <a href="http://en.wikipedia.org/wiki/Errno" target="_top"><code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code></a>
182 <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
183 to one of the following values depending upon the error type (often EDOM
184 = 33 and ERANGE = 34), and then return the same value as if the error had
185 been ignored:
186 </p>
187 <div class="informaltable"><table class="table">
188 <colgroup>
189 <col>
190 <col>
191 </colgroup>
192 <thead><tr>
193 <th>
194 <p>
195 Error Type
196 </p>
197 </th>
198 <th>
199 <p>
200 errno value
201 </p>
202 </th>
203 </tr></thead>
204 <tbody>
205 <tr>
206 <td>
207 <p>
208 Domain Error
209 </p>
210 </td>
211 <td>
212 <p>
213 EDOM
214 </p>
215 </td>
216 </tr>
217 <tr>
218 <td>
219 <p>
220 Pole Error
221 </p>
222 </td>
223 <td>
224 <p>
225 EDOM
226 </p>
227 </td>
228 </tr>
229 <tr>
230 <td>
231 <p>
232 Overflow Error
233 </p>
234 </td>
235 <td>
236 <p>
237 ERANGE
238 </p>
239 </td>
240 </tr>
241 <tr>
242 <td>
243 <p>
244 Underflow Error
245 </p>
246 </td>
247 <td>
248 <p>
249 ERANGE
250 </p>
251 </td>
252 </tr>
253 <tr>
254 <td>
255 <p>
256 Denorm Error
257 </p>
258 </td>
259 <td>
260 <p>
261 ERANGE
262 </p>
263 </td>
264 </tr>
265 <tr>
266 <td>
267 <p>
268 Evaluation Error
269 </p>
270 </td>
271 <td>
272 <p>
273 EDOM
274 </p>
275 </td>
276 </tr>
277 <tr>
278 <td>
279 <p>
280 Indeterminate Result Error
281 </p>
282 </td>
283 <td>
284 <p>
285 EDOM
286 </p>
287 </td>
288 </tr>
289 </tbody>
290 </table></div>
291 <h6>
292 <a name="math_toolkit.pol_ref.error_handling_policies.h3"></a>
293 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.ignore_error"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.ignore_error">ignore_error</a>
294 </h6>
295 <p>
296 Will return one of the values below depending on the error type (<code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code>
297 is NOT changed)::
298 </p>
299 <div class="informaltable"><table class="table">
300 <colgroup>
301 <col>
302 <col>
303 </colgroup>
304 <thead><tr>
305 <th>
306 <p>
307 Error Type
308 </p>
309 </th>
310 <th>
311 <p>
312 Returned Value
313 </p>
314 </th>
315 </tr></thead>
316 <tbody>
317 <tr>
318 <td>
319 <p>
320 Domain Error
321 </p>
322 </td>
323 <td>
324 <p>
325 std::numeric_limits&lt;T&gt;::quiet_NaN()
326 </p>
327 </td>
328 </tr>
329 <tr>
330 <td>
331 <p>
332 Pole Error
333 </p>
334 </td>
335 <td>
336 <p>
337 std::numeric_limits&lt;T&gt;::quiet_NaN()
338 </p>
339 </td>
340 </tr>
341 <tr>
342 <td>
343 <p>
344 Overflow Error
345 </p>
346 </td>
347 <td>
348 <p>
349 std::numeric_limits&lt;T&gt;::infinity()
350 </p>
351 </td>
352 </tr>
353 <tr>
354 <td>
355 <p>
356 Underflow Error
357 </p>
358 </td>
359 <td>
360 <p>
361 0
362 </p>
363 </td>
364 </tr>
365 <tr>
366 <td>
367 <p>
368 Denorm Error
369 </p>
370 </td>
371 <td>
372 <p>
373 The denormalised value.
374 </p>
375 </td>
376 </tr>
377 <tr>
378 <td>
379 <p>
380 Evaluation Error
381 </p>
382 </td>
383 <td>
384 <p>
385 The best guess (perhaps NaN) as to the result: which may be significantly
386 in error.
387 </p>
388 </td>
389 </tr>
390 <tr>
391 <td>
392 <p>
393 Indeterminate Result Error
394 </p>
395 </td>
396 <td>
397 <p>
398 Depends on the function where the error occurred
399 </p>
400 </td>
401 </tr>
402 </tbody>
403 </table></div>
404 <h6>
405 <a name="math_toolkit.pol_ref.error_handling_policies.h4"></a>
406 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.user_error"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.user_error">user_error</a>
407 </h6>
408 <p>
409 Will call a user defined error handler: these are forward declared in boost/math/policies/error_handling.hpp,
410 but the actual definitions must be provided by the user:
411 </p>
412 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">policies</span><span class="special">{</span>
413
414 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
415 <span class="identifier">T</span> <span class="identifier">user_domain_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
416
417 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
418 <span class="identifier">T</span> <span class="identifier">user_pole_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
419
420 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
421 <span class="identifier">T</span> <span class="identifier">user_overflow_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
422
423 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
424 <span class="identifier">T</span> <span class="identifier">user_underflow_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
425
426 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
427 <span class="identifier">T</span> <span class="identifier">user_denorm_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
428
429 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
430 <span class="identifier">T</span> <span class="identifier">user_rounding_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
431
432 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
433 <span class="identifier">T</span> <span class="identifier">user_evaluation_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
434
435 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
436 <span class="identifier">T</span> <span class="identifier">user_indeterminate_result_error</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> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">message</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
437
438 <span class="special">}}}</span> <span class="comment">// namespaces</span>
439 </pre>
440 <p>
441 Note that the strings <span class="emphasis"><em>function</em></span> and <span class="emphasis"><em>message</em></span>
442 may contain "%1%" format specifiers designed to be used in conjunction
443 with Boost.Format. If these strings are to be presented to the program's
444 end-user then the "%1%" format specifier should be replaced with
445 the name of type T in the <span class="emphasis"><em>function</em></span> string, and if there
446 is a %1% specifier in the <span class="emphasis"><em>message</em></span> string then it should
447 be replaced with the value of <span class="emphasis"><em>val</em></span>.
448 </p>
449 <p>
450 There is more information on user-defined error handlers in the <a class="link" href="../pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">tutorial
451 here</a>.
452 </p>
453 <h5>
454 <a name="math_toolkit.pol_ref.error_handling_policies.h5"></a>
455 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.kinds_of_error_raised"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.kinds_of_error_raised">Kinds
456 of Error Raised</a>
457 </h5>
458 <p>
459 There are six kinds of error reported by this library, which are summarised
460 in the following table:
461 </p>
462 <div class="informaltable"><table class="table">
463 <colgroup>
464 <col>
465 <col>
466 <col>
467 </colgroup>
468 <thead><tr>
469 <th>
470 <p>
471 Error Type
472 </p>
473 </th>
474 <th>
475 <p>
476 Policy Class
477 </p>
478 </th>
479 <th>
480 <p>
481 Description
482 </p>
483 </th>
484 </tr></thead>
485 <tbody>
486 <tr>
487 <td>
488 <p>
489 Domain Error
490 </p>
491 </td>
492 <td>
493 <p>
494 boost::math::policies::domain_error&lt;<span class="emphasis"><em>action</em></span>&gt;
495 </p>
496 </td>
497 <td>
498 <p>
499 Raised when more or more arguments are outside the defined range
500 of the function.
501 </p>
502 <p>
503 Defaults to <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">domain_error</span><span class="special">&lt;</span><span class="identifier">throw_on_error</span><span class="special">&gt;</span></code>
504 </p>
505 <p>
506 When the action is set to <span class="emphasis"><em>throw_on_error</em></span> then
507 throws <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code>
508 </p>
509 </td>
510 </tr>
511 <tr>
512 <td>
513 <p>
514 Pole Error
515 </p>
516 </td>
517 <td>
518 <p>
519 boost::math::policies::pole_error&lt;<span class="emphasis"><em>action</em></span>&gt;
520 </p>
521 </td>
522 <td>
523 <p>
524 Raised when more or more arguments would cause the function to
525 be evaluated at a pole.
526 </p>
527 <p>
528 Defaults to <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">pole_error</span><span class="special">&lt;</span><span class="identifier">throw_on_error</span><span class="special">&gt;</span></code>
529 </p>
530 <p>
531 When the action is <span class="emphasis"><em>throw_on_error</em></span> then throw
532 a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code>
533 </p>
534 </td>
535 </tr>
536 <tr>
537 <td>
538 <p>
539 Overflow Error
540 </p>
541 </td>
542 <td>
543 <p>
544 boost::math::policies::overflow_error&lt;<span class="emphasis"><em>action</em></span>&gt;
545 </p>
546 </td>
547 <td>
548 <p>
549 Raised when the result of the function is outside the representable
550 range of the floating point type used.
551 </p>
552 <p>
553 Defaults to <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">overflow_error</span><span class="special">&lt;</span><span class="identifier">throw_on_error</span><span class="special">&gt;</span></code>.
554 </p>
555 <p>
556 When the action is <span class="emphasis"><em>throw_on_error</em></span> then throws
557 a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>.
558 </p>
559 </td>
560 </tr>
561 <tr>
562 <td>
563 <p>
564 Underflow Error
565 </p>
566 </td>
567 <td>
568 <p>
569 boost::math::policies::underflow_error&lt;<span class="emphasis"><em>action</em></span>&gt;
570 </p>
571 </td>
572 <td>
573 <p>
574 Raised when the result of the function is too small to be represented
575 in the floating point type used.
576 </p>
577 <p>
578 Defaults to <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">underflow_error</span><span class="special">&lt;</span><span class="identifier">ignore_error</span><span class="special">&gt;</span></code>
579 </p>
580 <p>
581 When the specified action is <span class="emphasis"><em>throw_on_error</em></span>
582 then throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code>
583 </p>
584 </td>
585 </tr>
586 <tr>
587 <td>
588 <p>
589 Denorm Error
590 </p>
591 </td>
592 <td>
593 <p>
594 boost::math::policies::denorm_error&lt;<span class="emphasis"><em>action</em></span>&gt;
595 </p>
596 </td>
597 <td>
598 <p>
599 Raised when the result of the function is a denormalised value.
600 </p>
601 <p>
602 Defaults to <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">denorm_error</span><span class="special">&lt;</span><span class="identifier">ignore_error</span><span class="special">&gt;</span></code>
603 </p>
604 <p>
605 When the action is <span class="emphasis"><em>throw_on_error</em></span> then throws
606 a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code>
607 </p>
608 </td>
609 </tr>
610 <tr>
611 <td>
612 <p>
613 Rounding Error
614 </p>
615 </td>
616 <td>
617 <p>
618 boost::math::policies::rounding_error&lt;<span class="emphasis"><em>action</em></span>&gt;
619 </p>
620 </td>
621 <td>
622 <p>
623 Raised When one of the rounding functions <a class="link" href="../rounding/round.html" title="Rounding Functions">round</a>,
624 <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
625 an argument that has no integer representation, or is too large
626 to be represented in the result type
627 </p>
628 <p>
629 Defaults to <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">rounding_error</span><span class="special">&lt;</span><span class="identifier">throw_on_error</span><span class="special">&gt;</span></code>
630 </p>
631 <p>
632 When the action is <span class="emphasis"><em>throw_on_error</em></span> then throws
633 <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>
634 </p>
635 </td>
636 </tr>
637 <tr>
638 <td>
639 <p>
640 Evaluation Error
641 </p>
642 </td>
643 <td>
644 <p>
645 boost::math::policies::evaluation_error&lt;<span class="emphasis"><em>action</em></span>&gt;
646 </p>
647 </td>
648 <td>
649 <p>
650 Raised when the result of the function is well defined and finite,
651 but we were unable to compute it. Typically this occurs when an
652 iterative method fails to converge. Of course ideally this error
653 should never be raised: feel free to report it as a bug if it is!
654 </p>
655 <p>
656 Defaults to <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">evaluation_error</span><span class="special">&lt;</span><span class="identifier">throw_on_error</span><span class="special">&gt;</span></code>
657 </p>
658 <p>
659 When the action is <span class="emphasis"><em>throw_on_error</em></span> then throws
660 <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>
661 </p>
662 </td>
663 </tr>
664 <tr>
665 <td>
666 <p>
667 Indeterminate Result Error
668 </p>
669 </td>
670 <td>
671 <p>
672 boost::math::policies::indeterminate_result_error&lt;<span class="emphasis"><em>action</em></span>&gt;
673 </p>
674 </td>
675 <td>
676 <p>
677 Raised when the result of a function is not defined for the values
678 that were passed to it.
679 </p>
680 <p>
681 Defaults to <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">indeterminate_result_error</span><span class="special">&lt;</span><span class="identifier">ignore_error</span><span class="special">&gt;</span></code>
682 </p>
683 <p>
684 When the action is <span class="emphasis"><em>throw_on_error</em></span> then throws
685 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code>
686 </p>
687 </td>
688 </tr>
689 </tbody>
690 </table></div>
691 <h5>
692 <a name="math_toolkit.pol_ref.error_handling_policies.h6"></a>
693 <span class="phrase"><a name="math_toolkit.pol_ref.error_handling_policies.examples"></a></span><a class="link" href="error_handling_policies.html#math_toolkit.pol_ref.error_handling_policies.examples">Examples</a>
694 </h5>
695 <p>
696 Suppose we want a call to <code class="computeroutput"><span class="identifier">tgamma</span></code>
697 to behave in a C-compatible way and set global <code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code> rather than throw an exception, we
698 can achieve this at the call site using:
699 </p>
700 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
701 <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">tgamma</span><span class="special">;</span>
702
703 <span class="comment">//using namespace boost::math::policies; may also be convenient.</span>
704 <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">policy</span><span class="special">;</span>
705 <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">evaluation_error</span><span class="special">;</span>
706 <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">domain_error</span><span class="special">;</span>
707 <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>
708 <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">domain_error</span><span class="special">;</span>
709 <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">pole_error</span><span class="special">;</span>
710 <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">errno_on_error</span><span class="special">;</span>
711
712 <span class="comment">// Define a policy:</span>
713 <span class="keyword">typedef</span> <span class="identifier">policy</span><span class="special">&lt;</span>
714 <span class="identifier">domain_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;,</span>
715 <span class="identifier">pole_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;,</span>
716 <span class="identifier">overflow_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;,</span>
717 <span class="identifier">evaluation_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;</span>
718 <span class="special">&gt;</span> <span class="identifier">my_policy</span><span class="special">;</span>
719
720 <span class="keyword">double</span> <span class="identifier">my_value</span> <span class="special">=</span> <span class="number">0.</span><span class="special">;</span> <span class="comment">// </span>
721
722 <span class="comment">// Call the function applying my_policy:</span>
723 <span class="keyword">double</span> <span class="identifier">t1</span> <span class="special">=</span> <span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">my_value</span><span class="special">,</span> <span class="identifier">my_policy</span><span class="special">());</span>
724
725 <span class="comment">// Alternatively (and equivalently) we could use helpful function</span>
726 <span class="comment">// make_policy and define everything at the call site:</span>
727 <span class="keyword">double</span> <span class="identifier">t2</span> <span class="special">=</span> <span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">my_value</span><span class="special">,</span>
728 <span class="identifier">make_policy</span><span class="special">(</span>
729 <span class="identifier">domain_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;(),</span>
730 <span class="identifier">pole_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;(),</span>
731 <span class="identifier">overflow_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;(),</span>
732 <span class="identifier">evaluation_error</span><span class="special">&lt;</span><span class="identifier">errno_on_error</span><span class="special">&gt;()</span> <span class="special">)</span>
733 <span class="special">);</span>
734 </pre>
735 <p>
736 Suppose we want a statistical distribution to return infinities, rather than
737 throw exceptions, then we can use:
738 </p>
739 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">normal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
740 <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">normal_distribution</span><span class="special">;</span>
741
742 <span class="keyword">using</span> <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>
743
744 <span class="comment">// Define a specific policy:</span>
745 <span class="keyword">typedef</span> <span class="identifier">policy</span><span class="special">&lt;</span>
746 <span class="identifier">overflow_error</span><span class="special">&lt;</span><span class="identifier">ignore_error</span><span class="special">&gt;</span>
747 <span class="special">&gt;</span> <span class="identifier">my_policy</span><span class="special">;</span>
748
749 <span class="comment">// Define the distribution, using my_policy:</span>
750 <span class="keyword">typedef</span> <span class="identifier">normal_distribution</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">my_policy</span><span class="special">&gt;</span> <span class="identifier">my_norm</span><span class="special">;</span>
751
752 <span class="comment">// Construct a my_norm distribution, using default mean and standard deviation,</span>
753 <span class="comment">// and get a 0.05 or 5% quantile:</span>
754 <span class="keyword">double</span> <span class="identifier">q</span> <span class="special">=</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">my_norm</span><span class="special">(),</span> <span class="number">0.05</span><span class="special">);</span> <span class="comment">// = -1.64485</span>
755 </pre>
756 </div>
757 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
758 <td align="left"></td>
759 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2010, 2012-2014 Nikhar Agrawal,
760 Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert
761 Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Johan R&#229;de, Gautam Sewani,
762 Benjamin Sobotta, Thijs van den Berg, Daryle Walker and Xiaogang Zhang<p>
763 Distributed under the Boost Software License, Version 1.0. (See accompanying
764 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>)
765 </p>
766 </div></td>
767 </tr></table>
768 <hr>
769 <div class="spirit-nav">
770 <a accesskey="p" href="../pol_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../pol_ref.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="internal_promotion.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
771 </div>
772 </body>
773 </html>