Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / math / doc / html / math_toolkit / real_concepts.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Conceptual Requirements for Real Number Types</title>
5 <link rel="stylesheet" href="../math.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../index.html" title="Math Toolkit 2.5.2">
8 <link rel="up" href="../using_udt.html" title="Chapter&#160;14.&#160;Use with User-Defined Floating-Point Types - Boost.Multiprecision and others">
9 <link rel="prev" href="high_precision/using_test.html" title="Using without expression templates for Boost.Test and others">
10 <link rel="next" href="dist_concept.html" title="Conceptual Requirements for Distribution Types">
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="high_precision/using_test.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_udt.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dist_concept.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="math_toolkit.real_concepts"></a><a class="link" href="real_concepts.html" title="Conceptual Requirements for Real Number Types">Conceptual Requirements for
28     Real Number Types</a>
29 </h2></div></div></div>
30 <p>
31       The functions and statistical distributions in this library can be used with
32       any type <span class="emphasis"><em>RealType</em></span> that meets the conceptual requirements
33       given below. All the built-in floating-point types like <code class="computeroutput"><span class="keyword">double</span></code>
34       will meet these requirements. (Built-in types are also called <a href="http://en.cppreference.com/w/cpp/language/types" target="_top">fundamental
35       types</a>).
36     </p>
37 <p>
38       User-defined types that meet the conceptual requirements can also be used.
39       For example, with <a class="link" href="high_precision/use_ntl.html" title="Using NTL Library">a thin
40       wrapper class</a> one of the types provided with <a href="http://shoup.net/ntl/" target="_top">NTL
41       (RR)</a> can be used. But now that <a href="../../../../../libs/multiprecision/doc/html/index.html" target="_top">Boost.Multiprecision</a>
42       library is available, this has become the preferred real-number type, typically
43       <a href="../../../../../libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html" target="_top">cpp_dec_float</a>
44       or <a href="../../../../../libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html" target="_top">cpp_bin_float</a>.
45     </p>
46 <p>
47       Submissions of binding to other extended precision types would also still be
48       welcome.
49     </p>
50 <p>
51       The guiding principal behind these requirements is that a <span class="emphasis"><em>RealType</em></span>
52       behaves just like a built-in floating-point type.
53     </p>
54 <h5>
55 <a name="math_toolkit.real_concepts.h0"></a>
56       <span class="phrase"><a name="math_toolkit.real_concepts.basic_arithmetic_requirements"></a></span><a class="link" href="real_concepts.html#math_toolkit.real_concepts.basic_arithmetic_requirements">Basic Arithmetic
57       Requirements</a>
58     </h5>
59 <p>
60       These requirements are common to all of the functions in this library.
61     </p>
62 <p>
63       In the following table <span class="emphasis"><em>r</em></span> is an object of type <code class="computeroutput"><span class="identifier">RealType</span></code>, <span class="emphasis"><em>cr</em></span> and <span class="emphasis"><em>cr2</em></span>
64       are objects of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">RealType</span></code>,
65       and <span class="emphasis"><em>ca</em></span> is an object of type <code class="computeroutput"><span class="keyword">const</span>
66       <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">type</span></code> (arithmetic types include all the built
67       in integers and floating point types).
68     </p>
69 <div class="informaltable"><table class="table">
70 <colgroup>
71 <col>
72 <col>
73 <col>
74 </colgroup>
75 <thead><tr>
76 <th>
77               <p>
78                 Expression
79               </p>
80             </th>
81 <th>
82               <p>
83                 Result Type
84               </p>
85             </th>
86 <th>
87               <p>
88                 Notes
89               </p>
90             </th>
91 </tr></thead>
92 <tbody>
93 <tr>
94 <td>
95               <p>
96                 <code class="computeroutput"><span class="identifier">RealType</span><span class="special">(</span><span class="identifier">cr</span><span class="special">)</span></code>
97               </p>
98             </td>
99 <td>
100               <p>
101                 RealType
102               </p>
103             </td>
104 <td>
105               <p>
106                 RealType is copy constructible.
107               </p>
108             </td>
109 </tr>
110 <tr>
111 <td>
112               <p>
113                 <code class="computeroutput"><span class="identifier">RealType</span><span class="special">(</span><span class="identifier">ca</span><span class="special">)</span></code>
114               </p>
115             </td>
116 <td>
117               <p>
118                 RealType
119               </p>
120             </td>
121 <td>
122               <p>
123                 RealType is copy constructible from the arithmetic types.
124               </p>
125             </td>
126 </tr>
127 <tr>
128 <td>
129               <p>
130                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span>
131                 <span class="identifier">cr</span></code>
132               </p>
133             </td>
134 <td>
135               <p>
136                 RealType&amp;
137               </p>
138             </td>
139 <td>
140               <p>
141                 Assignment operator.
142               </p>
143             </td>
144 </tr>
145 <tr>
146 <td>
147               <p>
148                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span>
149                 <span class="identifier">ca</span></code>
150               </p>
151             </td>
152 <td>
153               <p>
154                 RealType&amp;
155               </p>
156             </td>
157 <td>
158               <p>
159                 Assignment operator from the arithmetic types.
160               </p>
161             </td>
162 </tr>
163 <tr>
164 <td>
165               <p>
166                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">+=</span>
167                 <span class="identifier">cr</span></code>
168               </p>
169             </td>
170 <td>
171               <p>
172                 RealType&amp;
173               </p>
174             </td>
175 <td>
176               <p>
177                 Adds cr to r.
178               </p>
179             </td>
180 </tr>
181 <tr>
182 <td>
183               <p>
184                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">+=</span>
185                 <span class="identifier">ca</span></code>
186               </p>
187             </td>
188 <td>
189               <p>
190                 RealType&amp;
191               </p>
192             </td>
193 <td>
194               <p>
195                 Adds ar to r.
196               </p>
197             </td>
198 </tr>
199 <tr>
200 <td>
201               <p>
202                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">-=</span>
203                 <span class="identifier">cr</span></code>
204               </p>
205             </td>
206 <td>
207               <p>
208                 RealType&amp;
209               </p>
210             </td>
211 <td>
212               <p>
213                 Subtracts cr from r.
214               </p>
215             </td>
216 </tr>
217 <tr>
218 <td>
219               <p>
220                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">-=</span>
221                 <span class="identifier">ca</span></code>
222               </p>
223             </td>
224 <td>
225               <p>
226                 RealType&amp;
227               </p>
228             </td>
229 <td>
230               <p>
231                 Subtracts ca from r.
232               </p>
233             </td>
234 </tr>
235 <tr>
236 <td>
237               <p>
238                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">*=</span>
239                 <span class="identifier">cr</span></code>
240               </p>
241             </td>
242 <td>
243               <p>
244                 RealType&amp;
245               </p>
246             </td>
247 <td>
248               <p>
249                 Multiplies r by cr.
250               </p>
251             </td>
252 </tr>
253 <tr>
254 <td>
255               <p>
256                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">*=</span>
257                 <span class="identifier">ca</span></code>
258               </p>
259             </td>
260 <td>
261               <p>
262                 RealType&amp;
263               </p>
264             </td>
265 <td>
266               <p>
267                 Multiplies r by ca.
268               </p>
269             </td>
270 </tr>
271 <tr>
272 <td>
273               <p>
274                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">/=</span>
275                 <span class="identifier">cr</span></code>
276               </p>
277             </td>
278 <td>
279               <p>
280                 RealType&amp;
281               </p>
282             </td>
283 <td>
284               <p>
285                 Divides r by cr.
286               </p>
287             </td>
288 </tr>
289 <tr>
290 <td>
291               <p>
292                 <code class="computeroutput"><span class="identifier">r</span> <span class="special">/=</span>
293                 <span class="identifier">ca</span></code>
294               </p>
295             </td>
296 <td>
297               <p>
298                 RealType&amp;
299               </p>
300             </td>
301 <td>
302               <p>
303                 Divides r by ca.
304               </p>
305             </td>
306 </tr>
307 <tr>
308 <td>
309               <p>
310                 <code class="computeroutput"><span class="special">-</span><span class="identifier">r</span></code>
311               </p>
312             </td>
313 <td>
314               <p>
315                 RealType
316               </p>
317             </td>
318 <td>
319               <p>
320                 Unary Negation.
321               </p>
322             </td>
323 </tr>
324 <tr>
325 <td>
326               <p>
327                 <code class="computeroutput"><span class="special">+</span><span class="identifier">r</span></code>
328               </p>
329             </td>
330 <td>
331               <p>
332                 RealType&amp;
333               </p>
334             </td>
335 <td>
336               <p>
337                 Identity Operation.
338               </p>
339             </td>
340 </tr>
341 <tr>
342 <td>
343               <p>
344                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">+</span>
345                 <span class="identifier">cr2</span></code>
346               </p>
347             </td>
348 <td>
349               <p>
350                 RealType
351               </p>
352             </td>
353 <td>
354               <p>
355                 Binary Addition
356               </p>
357             </td>
358 </tr>
359 <tr>
360 <td>
361               <p>
362                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">+</span>
363                 <span class="identifier">ca</span></code>
364               </p>
365             </td>
366 <td>
367               <p>
368                 RealType
369               </p>
370             </td>
371 <td>
372               <p>
373                 Binary Addition
374               </p>
375             </td>
376 </tr>
377 <tr>
378 <td>
379               <p>
380                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">+</span>
381                 <span class="identifier">cr</span></code>
382               </p>
383             </td>
384 <td>
385               <p>
386                 RealType
387               </p>
388             </td>
389 <td>
390               <p>
391                 Binary Addition
392               </p>
393             </td>
394 </tr>
395 <tr>
396 <td>
397               <p>
398                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">-</span>
399                 <span class="identifier">cr2</span></code>
400               </p>
401             </td>
402 <td>
403               <p>
404                 RealType
405               </p>
406             </td>
407 <td>
408               <p>
409                 Binary Subtraction
410               </p>
411             </td>
412 </tr>
413 <tr>
414 <td>
415               <p>
416                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">-</span>
417                 <span class="identifier">ca</span></code>
418               </p>
419             </td>
420 <td>
421               <p>
422                 RealType
423               </p>
424             </td>
425 <td>
426               <p>
427                 Binary Subtraction
428               </p>
429             </td>
430 </tr>
431 <tr>
432 <td>
433               <p>
434                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">-</span>
435                 <span class="identifier">cr</span></code>
436               </p>
437             </td>
438 <td>
439               <p>
440                 RealType
441               </p>
442             </td>
443 <td>
444               <p>
445                 Binary Subtraction
446               </p>
447             </td>
448 </tr>
449 <tr>
450 <td>
451               <p>
452                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">*</span>
453                 <span class="identifier">cr2</span></code>
454               </p>
455             </td>
456 <td>
457               <p>
458                 RealType
459               </p>
460             </td>
461 <td>
462               <p>
463                 Binary Multiplication
464               </p>
465             </td>
466 </tr>
467 <tr>
468 <td>
469               <p>
470                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">*</span>
471                 <span class="identifier">ca</span></code>
472               </p>
473             </td>
474 <td>
475               <p>
476                 RealType
477               </p>
478             </td>
479 <td>
480               <p>
481                 Binary Multiplication
482               </p>
483             </td>
484 </tr>
485 <tr>
486 <td>
487               <p>
488                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">*</span>
489                 <span class="identifier">cr</span></code>
490               </p>
491             </td>
492 <td>
493               <p>
494                 RealType
495               </p>
496             </td>
497 <td>
498               <p>
499                 Binary Multiplication
500               </p>
501             </td>
502 </tr>
503 <tr>
504 <td>
505               <p>
506                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">/</span>
507                 <span class="identifier">cr2</span></code>
508               </p>
509             </td>
510 <td>
511               <p>
512                 RealType
513               </p>
514             </td>
515 <td>
516               <p>
517                 Binary Subtraction
518               </p>
519             </td>
520 </tr>
521 <tr>
522 <td>
523               <p>
524                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">/</span>
525                 <span class="identifier">ca</span></code>
526               </p>
527             </td>
528 <td>
529               <p>
530                 RealType
531               </p>
532             </td>
533 <td>
534               <p>
535                 Binary Subtraction
536               </p>
537             </td>
538 </tr>
539 <tr>
540 <td>
541               <p>
542                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">/</span>
543                 <span class="identifier">cr</span></code>
544               </p>
545             </td>
546 <td>
547               <p>
548                 RealType
549               </p>
550             </td>
551 <td>
552               <p>
553                 Binary Subtraction
554               </p>
555             </td>
556 </tr>
557 <tr>
558 <td>
559               <p>
560                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">==</span>
561                 <span class="identifier">cr2</span></code>
562               </p>
563             </td>
564 <td>
565               <p>
566                 bool
567               </p>
568             </td>
569 <td>
570               <p>
571                 Equality Comparison
572               </p>
573             </td>
574 </tr>
575 <tr>
576 <td>
577               <p>
578                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">==</span>
579                 <span class="identifier">ca</span></code>
580               </p>
581             </td>
582 <td>
583               <p>
584                 bool
585               </p>
586             </td>
587 <td>
588               <p>
589                 Equality Comparison
590               </p>
591             </td>
592 </tr>
593 <tr>
594 <td>
595               <p>
596                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">==</span>
597                 <span class="identifier">cr</span></code>
598               </p>
599             </td>
600 <td>
601               <p>
602                 bool
603               </p>
604             </td>
605 <td>
606               <p>
607                 Equality Comparison
608               </p>
609             </td>
610 </tr>
611 <tr>
612 <td>
613               <p>
614                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">!=</span>
615                 <span class="identifier">cr2</span></code>
616               </p>
617             </td>
618 <td>
619               <p>
620                 bool
621               </p>
622             </td>
623 <td>
624               <p>
625                 Inequality Comparison
626               </p>
627             </td>
628 </tr>
629 <tr>
630 <td>
631               <p>
632                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">!=</span>
633                 <span class="identifier">ca</span></code>
634               </p>
635             </td>
636 <td>
637               <p>
638                 bool
639               </p>
640             </td>
641 <td>
642               <p>
643                 Inequality Comparison
644               </p>
645             </td>
646 </tr>
647 <tr>
648 <td>
649               <p>
650                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">!=</span>
651                 <span class="identifier">cr</span></code>
652               </p>
653             </td>
654 <td>
655               <p>
656                 bool
657               </p>
658             </td>
659 <td>
660               <p>
661                 Inequality Comparison
662               </p>
663             </td>
664 </tr>
665 <tr>
666 <td>
667               <p>
668                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;=</span>
669                 <span class="identifier">cr2</span></code>
670               </p>
671             </td>
672 <td>
673               <p>
674                 bool
675               </p>
676             </td>
677 <td>
678               <p>
679                 Less than equal to.
680               </p>
681             </td>
682 </tr>
683 <tr>
684 <td>
685               <p>
686                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;=</span>
687                 <span class="identifier">ca</span></code>
688               </p>
689             </td>
690 <td>
691               <p>
692                 bool
693               </p>
694             </td>
695 <td>
696               <p>
697                 Less than equal to.
698               </p>
699             </td>
700 </tr>
701 <tr>
702 <td>
703               <p>
704                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&lt;=</span>
705                 <span class="identifier">cr</span></code>
706               </p>
707             </td>
708 <td>
709               <p>
710                 bool
711               </p>
712             </td>
713 <td>
714               <p>
715                 Less than equal to.
716               </p>
717             </td>
718 </tr>
719 <tr>
720 <td>
721               <p>
722                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;=</span>
723                 <span class="identifier">cr2</span></code>
724               </p>
725             </td>
726 <td>
727               <p>
728                 bool
729               </p>
730             </td>
731 <td>
732               <p>
733                 Greater than equal to.
734               </p>
735             </td>
736 </tr>
737 <tr>
738 <td>
739               <p>
740                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;=</span>
741                 <span class="identifier">ca</span></code>
742               </p>
743             </td>
744 <td>
745               <p>
746                 bool
747               </p>
748             </td>
749 <td>
750               <p>
751                 Greater than equal to.
752               </p>
753             </td>
754 </tr>
755 <tr>
756 <td>
757               <p>
758                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&gt;=</span>
759                 <span class="identifier">cr</span></code>
760               </p>
761             </td>
762 <td>
763               <p>
764                 bool
765               </p>
766             </td>
767 <td>
768               <p>
769                 Greater than equal to.
770               </p>
771             </td>
772 </tr>
773 <tr>
774 <td>
775               <p>
776                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;</span>
777                 <span class="identifier">cr2</span></code>
778               </p>
779             </td>
780 <td>
781               <p>
782                 bool
783               </p>
784             </td>
785 <td>
786               <p>
787                 Less than comparison.
788               </p>
789             </td>
790 </tr>
791 <tr>
792 <td>
793               <p>
794                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;</span>
795                 <span class="identifier">ca</span></code>
796               </p>
797             </td>
798 <td>
799               <p>
800                 bool
801               </p>
802             </td>
803 <td>
804               <p>
805                 Less than comparison.
806               </p>
807             </td>
808 </tr>
809 <tr>
810 <td>
811               <p>
812                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&lt;</span>
813                 <span class="identifier">cr</span></code>
814               </p>
815             </td>
816 <td>
817               <p>
818                 bool
819               </p>
820             </td>
821 <td>
822               <p>
823                 Less than comparison.
824               </p>
825             </td>
826 </tr>
827 <tr>
828 <td>
829               <p>
830                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;</span>
831                 <span class="identifier">cr2</span></code>
832               </p>
833             </td>
834 <td>
835               <p>
836                 bool
837               </p>
838             </td>
839 <td>
840               <p>
841                 Greater than comparison.
842               </p>
843             </td>
844 </tr>
845 <tr>
846 <td>
847               <p>
848                 <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;</span>
849                 <span class="identifier">ca</span></code>
850               </p>
851             </td>
852 <td>
853               <p>
854                 bool
855               </p>
856             </td>
857 <td>
858               <p>
859                 Greater than comparison.
860               </p>
861             </td>
862 </tr>
863 <tr>
864 <td>
865               <p>
866                 <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&gt;</span>
867                 <span class="identifier">cr</span></code>
868               </p>
869             </td>
870 <td>
871               <p>
872                 bool
873               </p>
874             </td>
875 <td>
876               <p>
877                 Greater than comparison.
878               </p>
879             </td>
880 </tr>
881 <tr>
882 <td>
883               <p>
884                 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">digits</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
885               </p>
886             </td>
887 <td>
888               <p>
889                 int
890               </p>
891             </td>
892 <td>
893               <p>
894                 The number of digits in the significand of RealType.
895               </p>
896             </td>
897 </tr>
898 <tr>
899 <td>
900               <p>
901                 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">max_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
902               </p>
903             </td>
904 <td>
905               <p>
906                 RealType
907               </p>
908             </td>
909 <td>
910               <p>
911                 The largest representable number by type RealType.
912               </p>
913             </td>
914 </tr>
915 <tr>
916 <td>
917               <p>
918                 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">min_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
919               </p>
920             </td>
921 <td>
922               <p>
923                 RealType
924               </p>
925             </td>
926 <td>
927               <p>
928                 The smallest representable number by type RealType.
929               </p>
930             </td>
931 </tr>
932 <tr>
933 <td>
934               <p>
935                 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">log_max_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
936               </p>
937             </td>
938 <td>
939               <p>
940                 RealType
941               </p>
942             </td>
943 <td>
944               <p>
945                 The natural logarithm of the largest representable number by type
946                 RealType.
947               </p>
948             </td>
949 </tr>
950 <tr>
951 <td>
952               <p>
953                 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">log_min_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
954               </p>
955             </td>
956 <td>
957               <p>
958                 RealType
959               </p>
960             </td>
961 <td>
962               <p>
963                 The natural logarithm of the smallest representable number by type
964                 RealType.
965               </p>
966             </td>
967 </tr>
968 <tr>
969 <td>
970               <p>
971                 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">epsilon</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
972               </p>
973             </td>
974 <td>
975               <p>
976                 RealType
977               </p>
978             </td>
979 <td>
980               <p>
981                 The machine epsilon of RealType.
982               </p>
983             </td>
984 </tr>
985 </tbody>
986 </table></div>
987 <p>
988       Note that:
989     </p>
990 <div class="orderedlist"><ol class="orderedlist" type="1">
991 <li class="listitem">
992           The functions <code class="computeroutput"><span class="identifier">log_max_value</span></code>
993           and <code class="computeroutput"><span class="identifier">log_min_value</span></code> can be
994           synthesised from the others, and so no explicit specialisation is required.
995         </li>
996 <li class="listitem">
997           The function <code class="computeroutput"><span class="identifier">epsilon</span></code> can
998           be synthesised from the others, so no explicit specialisation is required
999           provided the precision of RealType does not vary at runtime (see the header
1000           <a href="../../../../../boost/math/bindings/rr.hpp" target="_top">boost/math/bindings/rr.hpp</a>
1001           for an example where the precision does vary at runtime).
1002         </li>
1003 <li class="listitem">
1004           The functions <code class="computeroutput"><span class="identifier">digits</span></code>,
1005           <code class="computeroutput"><span class="identifier">max_value</span></code> and <code class="computeroutput"><span class="identifier">min_value</span></code>, all get synthesised automatically
1006           from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>. However, if <code class="computeroutput"><span class="identifier">numeric_limits</span></code> is not specialised for
1007           type RealType, then you will get a compiler error when code tries to use
1008           these functions, <span class="emphasis"><em>unless</em></span> you explicitly specialise
1009           them. For example if the precision of RealType varies at runtime, then
1010           <code class="computeroutput"><span class="identifier">numeric_limits</span></code> support
1011           may not be appropriate, see <a href="../../../../../boost/math/bindings/rr.hpp" target="_top">boost/math/bindings/rr.hpp</a>
1012           for examples.
1013         </li>
1014 </ol></div>
1015 <div class="warning"><table border="0" summary="Warning">
1016 <tr>
1017 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/src/images/warning.png"></td>
1018 <th align="left">Warning</th>
1019 </tr>
1020 <tr><td align="left" valign="top">
1021 <p>
1022         If <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;&gt;</span></code>
1023         is <span class="bold"><strong>not specialized</strong></span> for type <span class="emphasis"><em>RealType</em></span>
1024         then the default float precision of 6 decimal digits will be used by other
1025         Boost programs including:
1026       </p>
1027 <p>
1028         Boost.Test: giving misleading error messages like
1029       </p>
1030 <p>
1031         <span class="emphasis"><em>"difference between {9.79796} and {9.79796} exceeds 5.42101e-19%".</em></span>
1032       </p>
1033 <p>
1034         Boost.LexicalCast and Boost.Serialization when converting the number to a
1035         string, causing potentially serious loss of accuracy on output.
1036       </p>
1037 <p>
1038         Although it might seem obvious that RealType should require <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
1039         to be specialized, this is not sensible for <code class="computeroutput"><span class="identifier">NTL</span><span class="special">::</span><span class="identifier">RR</span></code> and
1040         similar classes where the <span class="bold"><strong>number of digits is a runtime
1041         parameter</strong></span> (whereas for <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
1042         everything has to be fixed at compile time).
1043       </p>
1044 </td></tr>
1045 </table></div>
1046 <h5>
1047 <a name="math_toolkit.real_concepts.h1"></a>
1048       <span class="phrase"><a name="math_toolkit.real_concepts.standard_library_support_require"></a></span><a class="link" href="real_concepts.html#math_toolkit.real_concepts.standard_library_support_require">Standard
1049       Library Support Requirements</a>
1050     </h5>
1051 <p>
1052       Many (though not all) of the functions in this library make calls to standard
1053       library functions, the following table summarises the requirements. Note that
1054       most of the functions in this library will only call a small subset of the
1055       functions listed here, so if in doubt whether a user-defined type has enough
1056       standard library support to be useable the best advise is to try it and see!
1057     </p>
1058 <p>
1059       In the following table <span class="emphasis"><em>r</em></span> is an object of type <code class="computeroutput"><span class="identifier">RealType</span></code>, <span class="emphasis"><em>cr1</em></span> and <span class="emphasis"><em>cr2</em></span>
1060       are objects of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">RealType</span></code>,
1061       and <span class="emphasis"><em>i</em></span> is an object of type <code class="computeroutput"><span class="keyword">int</span></code>.
1062     </p>
1063 <div class="informaltable"><table class="table">
1064 <colgroup>
1065 <col>
1066 <col>
1067 </colgroup>
1068 <thead><tr>
1069 <th>
1070               <p>
1071                 Expression
1072               </p>
1073             </th>
1074 <th>
1075               <p>
1076                 Result Type
1077               </p>
1078             </th>
1079 </tr></thead>
1080 <tbody>
1081 <tr>
1082 <td>
1083               <p>
1084                 <code class="computeroutput"><span class="identifier">fabs</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1085               </p>
1086             </td>
1087 <td>
1088               <p>
1089                 RealType
1090               </p>
1091             </td>
1092 </tr>
1093 <tr>
1094 <td>
1095               <p>
1096                 <code class="computeroutput"><span class="identifier">abs</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1097               </p>
1098             </td>
1099 <td>
1100               <p>
1101                 RealType
1102               </p>
1103             </td>
1104 </tr>
1105 <tr>
1106 <td>
1107               <p>
1108                 <code class="computeroutput"><span class="identifier">ceil</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1109               </p>
1110             </td>
1111 <td>
1112               <p>
1113                 RealType
1114               </p>
1115             </td>
1116 </tr>
1117 <tr>
1118 <td>
1119               <p>
1120                 <code class="computeroutput"><span class="identifier">floor</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1121               </p>
1122             </td>
1123 <td>
1124               <p>
1125                 RealType
1126               </p>
1127             </td>
1128 </tr>
1129 <tr>
1130 <td>
1131               <p>
1132                 <code class="computeroutput"><span class="identifier">exp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1133               </p>
1134             </td>
1135 <td>
1136               <p>
1137                 RealType
1138               </p>
1139             </td>
1140 </tr>
1141 <tr>
1142 <td>
1143               <p>
1144                 <code class="computeroutput"><span class="identifier">pow</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span>
1145                 <span class="identifier">cr2</span><span class="special">)</span></code>
1146               </p>
1147             </td>
1148 <td>
1149               <p>
1150                 RealType
1151               </p>
1152             </td>
1153 </tr>
1154 <tr>
1155 <td>
1156               <p>
1157                 <code class="computeroutput"><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1158               </p>
1159             </td>
1160 <td>
1161               <p>
1162                 RealType
1163               </p>
1164             </td>
1165 </tr>
1166 <tr>
1167 <td>
1168               <p>
1169                 <code class="computeroutput"><span class="identifier">log</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1170               </p>
1171             </td>
1172 <td>
1173               <p>
1174                 RealType
1175               </p>
1176             </td>
1177 </tr>
1178 <tr>
1179 <td>
1180               <p>
1181                 <code class="computeroutput"><span class="identifier">frexp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span>
1182                 <span class="special">&amp;</span><span class="identifier">i</span><span class="special">)</span></code>
1183               </p>
1184             </td>
1185 <td>
1186               <p>
1187                 RealType
1188               </p>
1189             </td>
1190 </tr>
1191 <tr>
1192 <td>
1193               <p>
1194                 <code class="computeroutput"><span class="identifier">ldexp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span>
1195                 <span class="identifier">i</span><span class="special">)</span></code>
1196               </p>
1197             </td>
1198 <td>
1199               <p>
1200                 RealType
1201               </p>
1202             </td>
1203 </tr>
1204 <tr>
1205 <td>
1206               <p>
1207                 <code class="computeroutput"><span class="identifier">cos</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1208               </p>
1209             </td>
1210 <td>
1211               <p>
1212                 RealType
1213               </p>
1214             </td>
1215 </tr>
1216 <tr>
1217 <td>
1218               <p>
1219                 <code class="computeroutput"><span class="identifier">sin</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1220               </p>
1221             </td>
1222 <td>
1223               <p>
1224                 RealType
1225               </p>
1226             </td>
1227 </tr>
1228 <tr>
1229 <td>
1230               <p>
1231                 <code class="computeroutput"><span class="identifier">asin</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1232               </p>
1233             </td>
1234 <td>
1235               <p>
1236                 RealType
1237               </p>
1238             </td>
1239 </tr>
1240 <tr>
1241 <td>
1242               <p>
1243                 <code class="computeroutput"><span class="identifier">tan</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1244               </p>
1245             </td>
1246 <td>
1247               <p>
1248                 RealType
1249               </p>
1250             </td>
1251 </tr>
1252 <tr>
1253 <td>
1254               <p>
1255                 <code class="computeroutput"><span class="identifier">atan</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1256               </p>
1257             </td>
1258 <td>
1259               <p>
1260                 RealType
1261               </p>
1262             </td>
1263 </tr>
1264 <tr>
1265 <td>
1266               <p>
1267                 <code class="computeroutput"><span class="identifier">fmod</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1268               </p>
1269             </td>
1270 <td>
1271               <p>
1272                 RealType
1273               </p>
1274             </td>
1275 </tr>
1276 <tr>
1277 <td>
1278               <p>
1279                 <code class="computeroutput"><span class="identifier">round</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1280               </p>
1281             </td>
1282 <td>
1283               <p>
1284                 RealType
1285               </p>
1286             </td>
1287 </tr>
1288 <tr>
1289 <td>
1290               <p>
1291                 <code class="computeroutput"><span class="identifier">iround</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1292               </p>
1293             </td>
1294 <td>
1295               <p>
1296                 int
1297               </p>
1298             </td>
1299 </tr>
1300 <tr>
1301 <td>
1302               <p>
1303                 <code class="computeroutput"><span class="identifier">trunc</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1304               </p>
1305             </td>
1306 <td>
1307               <p>
1308                 RealType
1309               </p>
1310             </td>
1311 </tr>
1312 <tr>
1313 <td>
1314               <p>
1315                 <code class="computeroutput"><span class="identifier">itrunc</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
1316               </p>
1317             </td>
1318 <td>
1319               <p>
1320                 int
1321               </p>
1322             </td>
1323 </tr>
1324 </tbody>
1325 </table></div>
1326 <p>
1327       Note that the table above lists only those standard library functions known
1328       to be used (or likely to be used in the near future) by this library. The following
1329       functions: <code class="computeroutput"><span class="identifier">acos</span></code>, <code class="computeroutput"><span class="identifier">atan2</span></code>, <code class="computeroutput"><span class="identifier">fmod</span></code>,
1330       <code class="computeroutput"><span class="identifier">cosh</span></code>, <code class="computeroutput"><span class="identifier">sinh</span></code>,
1331       <code class="computeroutput"><span class="identifier">tanh</span></code>, <code class="computeroutput"><span class="identifier">log10</span></code>,
1332       <code class="computeroutput"><span class="identifier">lround</span></code>, <code class="computeroutput"><span class="identifier">llround</span></code>,
1333       <code class="computeroutput"><span class="identifier">ltrunc</span></code>, <code class="computeroutput"><span class="identifier">lltrunc</span></code>
1334       and <code class="computeroutput"><span class="identifier">modf</span></code> are not currently
1335       used, but may be if further special functions are added.
1336     </p>
1337 <p>
1338       Note that the <code class="computeroutput"><span class="identifier">round</span></code>, <code class="computeroutput"><span class="identifier">trunc</span></code> and <code class="computeroutput"><span class="identifier">modf</span></code>
1339       functions are not part of the current C++ standard: they are part of the additions
1340       added to C99 which will likely be in the next C++ standard. There are Boost
1341       versions of these provided as a backup, and the functions are always called
1342       unqualified so that argument-dependent-lookup can take place.
1343     </p>
1344 <p>
1345       In addition, for efficient and accurate results, a <a class="link" href="lanczos.html" title="The Lanczos Approximation">Lanczos
1346       approximation</a> is highly desirable. You may be able to adapt an existing
1347       approximation from <a href="../../../../../boost/math/special_functions/lanczos.hpp" target="_top">boost/math/special_functions/lanczos.hpp</a>
1348       or <a href="../../../../../boost/math/bindings/detail/big_lanczos.hpp" target="_top">boost/math/bindings/detail/big_lanczos.hpp</a>:
1349       in the former case you will need change <code class="computeroutput"><span class="keyword">static_cast</span></code>'s
1350       to <code class="computeroutput"><span class="identifier">lexical_cast</span></code>'s, and the
1351       constants to <span class="emphasis"><em>strings</em></span> (in order to ensure the coefficients
1352       aren't truncated to <code class="computeroutput"><span class="keyword">long</span> <span class="identifier">doubl</span></code>e)
1353       and then specialise <code class="computeroutput"><span class="identifier">lanczos_traits</span></code>
1354       for type T. Otherwise you may have to hack <a href="../../../tools/lanczos_generator.cpp" target="_top">libs/math/tools/lanczos_generator.cpp</a>
1355       to find a suitable approximation for your RealType. The code will still compile
1356       if you don't do this, but both accuracy and efficiency will be greatly compromised
1357       in any function that makes use of the gamma/beta/erf family of functions.
1358     </p>
1359 </div>
1360 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1361 <td align="left"></td>
1362 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2010, 2012-2014 Nikhar Agrawal,
1363       Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert
1364       Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Johan R&#229;de, Gautam Sewani,
1365       Benjamin Sobotta, Thijs van den Berg, Daryle Walker and Xiaogang Zhang<p>
1366         Distributed under the Boost Software License, Version 1.0. (See accompanying
1367         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>)
1368       </p>
1369 </div></td>
1370 </tr></table>
1371 <hr>
1372 <div class="spirit-nav">
1373 <a accesskey="p" href="high_precision/using_test.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_udt.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dist_concept.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
1374 </div>
1375 </body>
1376 </html>