3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Backend Requirements</title>
5 <link rel="stylesheet" href="../../multiprecision.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision">
8 <link rel="up" href="../ref.html" title="Reference">
9 <link rel="prev" href="internals.html" title="Internal Support Code">
10 <link rel="next" href="headers.html" title="Header File Structure">
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>
22 <div class="spirit-nav">
23 <a accesskey="p" href="internals.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../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="headers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_multiprecision.ref.backendconc"></a><a class="link" href="backendconc.html" title="Backend Requirements">Backend Requirements</a>
28 </h3></div></div></div>
30 The requirements on the <code class="computeroutput"><span class="identifier">Backend</span></code>
31 template argument to <code class="computeroutput"><span class="identifier">number</span></code>
32 are split up into sections: compulsory and optional.
35 Compulsory requirements have no default implementation in the library, therefore
36 if the feature they implement is to be supported at all, then they must be
37 implemented by the backend.
40 Optional requirements have default implementations that are called if the
41 backend doesn't provide it's own. Typically the backend will implement these
42 to improve performance.
45 In the following tables, type B is the <code class="computeroutput"><span class="identifier">Backend</span></code>
46 template argument to <code class="computeroutput"><span class="identifier">number</span></code>,
47 <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code>
48 are a variables of type B, <code class="computeroutput"><span class="identifier">pb</span></code>
49 is a variable of type B*, <code class="computeroutput"><span class="identifier">cb</span></code>,
50 <code class="computeroutput"><span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">cb3</span></code>
51 are constant variables of type <code class="computeroutput"><span class="keyword">const</span>
52 <span class="identifier">B</span></code>, <code class="computeroutput"><span class="identifier">rb</span></code>
53 is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">&&</span></code>,
54 <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">a2</span></code>
55 are variables of Arithmetic type, <code class="computeroutput"><span class="identifier">s</span></code>
56 is a variable of type <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>, <code class="computeroutput"><span class="identifier">ui</span></code> is a variable of type <code class="computeroutput"><span class="keyword">unsigned</span></code>, <code class="computeroutput"><span class="identifier">bb</span></code>
57 is a variable of type <code class="computeroutput"><span class="keyword">bool</span></code>,
58 <code class="computeroutput"><span class="identifier">pa</span></code> is a variable of type
59 pointer-to-arithmetic-type, <code class="computeroutput"><span class="identifier">exp</span></code>
60 is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exp_type</span></code>, <code class="computeroutput"><span class="identifier">pexp</span></code>
61 is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exp_type</span><span class="special">*</span></code>,
62 <code class="computeroutput"><span class="identifier">i</span></code> is a variable of type
63 <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="identifier">pi</span></code>
64 pointer to a variable of type <code class="computeroutput"><span class="keyword">int</span></code>,
65 B2 is another type that meets these requirements, b2 is a variable of type
66 B2, <code class="computeroutput"><span class="identifier">ss</span></code> is variable of type
67 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span></code> and <code class="computeroutput"><span class="identifier">ff</span></code>
68 is a variable of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">fmtflags</span></code>.
71 <a name="boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b"></a><p class="title"><b>Table 1.8. Compulsory Requirements on the Backend type.</b></p>
72 <div class="table-contents"><table class="table" summary="Compulsory Requirements on the Backend type.">
105 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>
110 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">></span></code>
115 A list of signed integral types that can be assigned to type B.
116 The types shall be listed in order of size, smallest first, and
117 shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>.
129 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
134 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">></span></code>
139 A list of unsigned integral types that can be assigned to type
140 B. The types shall be listed in order of size, smallest first,
141 and shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code>.
153 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>
158 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">></span></code>
163 A list of floating-point types that can be assigned to type B.The
164 types shall be listed in order of size, smallest first, and shall
165 terminate in type <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>.
177 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code>
182 A signed integral type.
187 The type of the exponent of type B. This type is required only
188 for floating-point types.
200 <code class="computeroutput"><span class="identifier">B</span><span class="special">()</span></code>
219 <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
238 <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
239 <span class="identifier">b</span></code>
244 <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code>
261 <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
262 <span class="identifier">a</span></code>
267 <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code>
272 Assignment from an Arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
273 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
274 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
286 <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
287 <span class="identifier">s</span></code>
292 <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code>
297 Assignment from a string.
302 Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the string could
303 not be interpreted as a valid number.
310 <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
315 <code class="computeroutput"><span class="keyword">void</span></code>
320 Swaps the contents of its arguments.
325 <code class="computeroutput"><span class="keyword">noexcept</span></code>
332 <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">str</span><span class="special">(</span><span class="identifier">ss</span><span class="special">,</span>
333 <span class="identifier">ff</span><span class="special">)</span></code>
338 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>
343 Returns the string representation of <code class="computeroutput"><span class="identifier">b</span></code>
344 with <code class="computeroutput"><span class="identifier">ss</span></code> digits
345 and formatted according to the flags set in <code class="computeroutput"><span class="identifier">ff</span></code>.
346 If <code class="computeroutput"><span class="identifier">ss</span></code> is zero,
347 then returns as many digits as are required to reconstruct the
360 <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
365 <code class="computeroutput"><span class="keyword">void</span></code>
370 Negates <code class="computeroutput"><span class="identifier">b</span></code>.
382 <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span></code>
387 <code class="computeroutput"><span class="keyword">int</span></code>
392 Compares <code class="computeroutput"><span class="identifier">cb</span></code> and
393 <code class="computeroutput"><span class="identifier">cb2</span></code>, returns a
394 value less than zero if <code class="computeroutput"><span class="identifier">cb</span>
395 <span class="special"><</span> <span class="identifier">cb2</span></code>,
396 a value greater than zero if <code class="computeroutput"><span class="identifier">cb</span>
397 <span class="special">></span> <span class="identifier">cb2</span></code>
398 and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">cb2</span></code>.
403 <code class="computeroutput"><span class="keyword">noexcept</span></code>
410 <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
415 <code class="computeroutput"><span class="keyword">int</span></code>
420 Compares <code class="computeroutput"><span class="identifier">cb</span></code> and
421 <code class="computeroutput"><span class="identifier">a</span></code>, returns a value
422 less than zero if <code class="computeroutput"><span class="identifier">cb</span>
423 <span class="special"><</span> <span class="identifier">a</span></code>,
424 a value greater than zero if <code class="computeroutput"><span class="identifier">cb</span>
425 <span class="special">></span> <span class="identifier">a</span></code>
426 and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">a</span></code>.
427 The type of <code class="computeroutput"><span class="identifier">a</span></code> shall
428 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
429 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
441 <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
442 <span class="identifier">cb</span><span class="special">)</span></code>
447 <code class="computeroutput"><span class="keyword">void</span></code>
452 Adds <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>.
464 <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
465 <span class="identifier">cb</span><span class="special">)</span></code>
470 <code class="computeroutput"><span class="keyword">void</span></code>
475 Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from
476 <code class="computeroutput"><span class="identifier">b</span></code>.
488 <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
489 <span class="identifier">cb</span><span class="special">)</span></code>
494 <code class="computeroutput"><span class="keyword">void</span></code>
499 Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by
500 <code class="computeroutput"><span class="identifier">cb</span></code>.
512 <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
513 <span class="identifier">cb</span><span class="special">)</span></code>
518 <code class="computeroutput"><span class="keyword">void</span></code>
523 Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code>.
528 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
529 value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> <span class="special">>::</span><span class="identifier">has_infinity</span> <span class="special">==</span>
530 <span class="keyword">false</span></code>
537 <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
538 <span class="identifier">cb</span><span class="special">)</span></code>
543 <code class="computeroutput"><span class="keyword">void</span></code>
548 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span>
549 <span class="identifier">cb</span></code>, only required when
550 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
556 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
564 <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
569 <code class="computeroutput"><span class="keyword">void</span></code>
574 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&=</span>
575 <span class="identifier">cb</span></code>, only required when
576 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
589 <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
594 <code class="computeroutput"><span class="keyword">void</span></code>
599 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span>
600 <span class="identifier">cb</span></code>, only required when
601 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
614 <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
619 <code class="computeroutput"><span class="keyword">void</span></code>
624 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span>
625 <span class="identifier">cb</span></code>, only required when
626 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
639 <code class="computeroutput"><span class="identifier">eval_complement</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
644 <code class="computeroutput"><span class="keyword">void</span></code>
649 Computes the ones-complement of <code class="computeroutput"><span class="identifier">cb</span></code>
650 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>,
651 only required when <code class="computeroutput"><span class="identifier">B</span></code>
664 <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
669 <code class="computeroutput"><span class="keyword">void</span></code>
674 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special"><<=</span>
675 <span class="identifier">ui</span></code>, only required when
676 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
689 <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
694 <code class="computeroutput"><span class="keyword">void</span></code>
699 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">>>=</span>
700 <span class="identifier">ui</span></code>, only required when
701 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
714 <code class="computeroutput"><span class="identifier">eval_convert_to</span><span class="special">(</span><span class="identifier">pa</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
719 <code class="computeroutput"><span class="keyword">void</span></code>
724 Converts <code class="computeroutput"><span class="identifier">cb</span></code> to
725 the type of <code class="computeroutput"><span class="special">*</span><span class="identifier">pa</span></code>
726 and store the result in <code class="computeroutput"><span class="special">*</span><span class="identifier">pa</span></code>. Type <code class="computeroutput"><span class="identifier">B</span></code>
727 shall support conversion to at least types <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>,
728 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code> and <code class="computeroutput"><span class="keyword">long</span>
729 <span class="keyword">long</span></code>. Conversion to other
730 arithmetic types can then be synthesised using other operations.
731 Conversions to other types are entirely optional.
743 <code class="computeroutput"><span class="identifier">eval_frexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
744 <span class="identifier">cb</span><span class="special">,</span>
745 <span class="identifier">pexp</span><span class="special">)</span></code>
750 <code class="computeroutput"><span class="keyword">void</span></code>
755 Stores values in <code class="computeroutput"><span class="identifier">b</span></code>
756 and <code class="computeroutput"><span class="special">*</span><span class="identifier">pexp</span></code>
757 such that the value of <code class="computeroutput"><span class="identifier">cb</span></code>
758 is b * 2<sup>*pexp</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
759 is a floating-point type.
771 <code class="computeroutput"><span class="identifier">eval_ldexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
772 <span class="identifier">cb</span><span class="special">,</span>
773 <span class="identifier">exp</span><span class="special">)</span></code>
778 <code class="computeroutput"><span class="keyword">void</span></code>
783 Stores a value in <code class="computeroutput"><span class="identifier">b</span></code>
784 that is cb * 2<sup>exp</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
785 is a floating-point type.
797 <code class="computeroutput"><span class="identifier">eval_frexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
798 <span class="identifier">cb</span><span class="special">,</span>
799 <span class="identifier">pi</span><span class="special">)</span></code>
804 <code class="computeroutput"><span class="keyword">void</span></code>
809 Stores values in <code class="computeroutput"><span class="identifier">b</span></code>
810 and <code class="computeroutput"><span class="special">*</span><span class="identifier">pi</span></code>
811 such that the value of <code class="computeroutput"><span class="identifier">cb</span></code>
812 is b * 2<sup>*pi</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
813 is a floating-point type.
818 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the exponent
819 of cb is too large to be stored in an <code class="computeroutput"><span class="keyword">int</span></code>.
826 <code class="computeroutput"><span class="identifier">eval_ldexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
827 <span class="identifier">cb</span><span class="special">,</span>
828 <span class="identifier">i</span><span class="special">)</span></code>
833 <code class="computeroutput"><span class="keyword">void</span></code>
838 Stores a value in <code class="computeroutput"><span class="identifier">b</span></code>
839 that is cb * 2<sup>i</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
840 is a floating-point type.
852 <code class="computeroutput"><span class="identifier">eval_floor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
853 <span class="identifier">cb</span><span class="special">)</span></code>
858 <code class="computeroutput"><span class="keyword">void</span></code>
863 Stores the floor of <code class="computeroutput"><span class="identifier">cb</span></code>
864 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
865 when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point
878 <code class="computeroutput"><span class="identifier">eval_ceil</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
879 <span class="identifier">cb</span><span class="special">)</span></code>
884 <code class="computeroutput"><span class="keyword">void</span></code>
889 Stores the ceiling of <code class="computeroutput"><span class="identifier">cb</span></code>
890 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
891 when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point
904 <code class="computeroutput"><span class="identifier">eval_sqrt</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
905 <span class="identifier">cb</span><span class="special">)</span></code>
910 <code class="computeroutput"><span class="keyword">void</span></code>
915 Stores the square root of <code class="computeroutput"><span class="identifier">cb</span></code>
916 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
917 when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point
930 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">B</span><span class="special">>::</span><span class="identifier">type</span></code>
935 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code>
940 <code class="computeroutput"><span class="identifier">N</span></code> is one of the
941 values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>,
942 <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>,
943 <code class="computeroutput"><span class="identifier">number_kind_complex</span></code>,
944 <code class="computeroutput"><span class="identifier">number_kind_rational</span></code>
945 or <code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>.
946 Defaults to <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>.
958 <code class="computeroutput"><span class="identifier">eval_conj</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
959 <span class="identifier">cb</span><span class="special">)</span></code>
964 <code class="computeroutput"><span class="keyword">void</span></code>
969 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the complex
970 conjugate of <code class="computeroutput"><span class="identifier">cb</span></code>.
971 Required for complex types only - other types have a sensible default.
983 <code class="computeroutput"><span class="identifier">eval_proj</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
984 <span class="identifier">cb</span><span class="special">)</span></code>
989 <code class="computeroutput"><span class="keyword">void</span></code>
994 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the Riemann
995 projection of <code class="computeroutput"><span class="identifier">cb</span></code>.
996 Required for complex types only - other types have a sensible default.
1008 <code class="computeroutput"><span class="identifier">eval_real</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1009 <span class="identifier">cb</span><span class="special">)</span></code>
1014 <code class="computeroutput"><span class="keyword">void</span></code>
1019 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the real
1020 part of <code class="computeroutput"><span class="identifier">cb</span></code>. Required
1021 for complex types only - other types have a sensible default.
1033 <code class="computeroutput"><span class="identifier">eval_imag</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1034 <span class="identifier">cb</span><span class="special">)</span></code>
1039 <code class="computeroutput"><span class="keyword">void</span></code>
1044 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the imaginary
1045 of <code class="computeroutput"><span class="identifier">cb</span></code>. Required
1046 for complex types only - other types have a sensible default.
1058 <code class="computeroutput"><span class="identifier">eval_set_real</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1059 <span class="identifier">a</span><span class="special">)</span></code>
1064 <code class="computeroutput"><span class="keyword">void</span></code>
1069 Sets the real part of <code class="computeroutput"><span class="identifier">b</span></code>
1070 to <code class="computeroutput"><span class="identifier">cb</span></code>. Required
1071 for complex types only - other types have a sensible default.
1083 <code class="computeroutput"><span class="identifier">eval_set_imag</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1084 <span class="identifier">a</span><span class="special">)</span></code>
1089 <code class="computeroutput"><span class="keyword">void</span></code>
1094 Sets the imaginary part of <code class="computeroutput"><span class="identifier">b</span></code>
1095 to <code class="computeroutput"><span class="identifier">cb</span></code>. Required
1096 for complex types only - other types have a sensible default.
1108 <br class="table-break"><div class="table">
1109 <a name="boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac"></a><p class="title"><b>Table 1.9. Optional Requirements on the Backend Type</b></p>
1110 <div class="table-contents"><table class="table" summary="Optional Requirements on the Backend Type">
1142 <span class="emphasis"><em>Construct and assign:</em></span>
1145 <td class="auto-generated"> </td>
1146 <td class="auto-generated"> </td>
1151 <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span></code>
1156 <code class="computeroutput"><span class="identifier">B</span></code>
1161 Move constructor. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code>
1162 shall be in sane state, albeit with unspecified value. Only destruction
1163 and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code>
1164 need be supported after the operation.
1169 <code class="computeroutput"><span class="keyword">noexcept</span></code>
1176 <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
1177 <span class="identifier">rb</span></code>
1182 <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code>
1187 Move-assign. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code>
1188 shall be in sane state, albeit with unspecified value. Only destruction
1189 and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code>
1190 need be supported after the operation.
1195 <code class="computeroutput"><span class="keyword">noexcept</span></code>
1202 <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
1207 <code class="computeroutput"><span class="identifier">B</span></code>
1212 Direct construction from an arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1213 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1214 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1215 this operation is simulated using default-construction followed
1228 <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">b2</span><span class="special">)</span></code>
1233 <code class="computeroutput"><span class="identifier">B</span></code>
1238 Copy constructor from a different back-end type. When not provided,
1239 a generic interconversion routine is used. This constructor may
1240 be <code class="computeroutput"><span class="keyword">explicit</span></code> if the
1241 corresponding frontend constructor should also be <code class="computeroutput"><span class="keyword">explicit</span></code>.
1253 <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
1254 <span class="identifier">b2</span></code>
1259 <code class="computeroutput"><span class="identifier">b</span><span class="special">&</span></code>
1264 Assignment operator from a different back-end type. When not provided,
1265 a generic interconversion routine is used.
1277 <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
1282 <code class="computeroutput"><span class="keyword">void</span></code>
1287 Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the
1288 two components in the following arguments. Only applies to rational
1289 and complex number types. When not provided, arithmetic operations
1290 are used to synthesise the result from the two values.
1302 <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code>
1307 <code class="computeroutput"><span class="keyword">void</span></code>
1312 Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the
1313 two components in the following arguments. Only applies to rational
1314 and complex number types. When not provided, arithmetic operations
1315 are used to synthesise the result from the two values.
1327 <span class="emphasis"><em>Comparisons:</em></span>
1330 <td class="auto-generated"> </td>
1331 <td class="auto-generated"> </td>
1336 <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
1337 <span class="identifier">cb2</span><span class="special">)</span></code>
1342 <code class="computeroutput"><span class="keyword">bool</span></code>
1347 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">cb2</span></code>
1348 are equal in value. When not provided, the default implementation
1349 returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span>
1350 <span class="special">==</span> <span class="number">0</span></code>.
1355 <code class="computeroutput"><span class="keyword">noexcept</span></code>
1362 <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
1363 <span class="identifier">a</span><span class="special">)</span></code>
1368 <code class="computeroutput"><span class="keyword">bool</span></code>
1373 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>
1374 are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code>
1375 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1376 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1377 return the equivalent of <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
1389 <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
1390 <span class="identifier">cb</span><span class="special">)</span></code>
1395 <code class="computeroutput"><span class="keyword">bool</span></code>
1400 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>
1401 are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code>
1402 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1403 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1404 the default version returns <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
1416 <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
1417 <span class="identifier">cb2</span><span class="special">)</span></code>
1422 <code class="computeroutput"><span class="keyword">bool</span></code>
1427 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided,
1428 the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special"><</span>
1429 <span class="number">0</span></code>.
1434 <code class="computeroutput"><span class="keyword">noexcept</span></code>
1441 <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
1442 <span class="identifier">a</span><span class="special">)</span></code>
1447 <code class="computeroutput"><span class="keyword">bool</span></code>
1452 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1453 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1454 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1455 the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
1467 <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
1468 <span class="identifier">cb</span><span class="special">)</span></code>
1473 <code class="computeroutput"><span class="keyword">bool</span></code>
1478 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is less than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1479 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1480 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1481 the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
1493 <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
1494 <span class="identifier">cb2</span><span class="special">)</span></code>
1499 <code class="computeroutput"><span class="keyword">bool</span></code>
1504 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided,
1505 the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special">></span>
1506 <span class="number">0</span></code>.
1511 <code class="computeroutput"><span class="keyword">noexcept</span></code>
1518 <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
1519 <span class="identifier">a</span><span class="special">)</span></code>
1524 <code class="computeroutput"><span class="keyword">bool</span></code>
1529 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1530 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1531 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1532 the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
1544 <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
1545 <span class="identifier">cb</span><span class="special">)</span></code>
1550 <code class="computeroutput"><span class="keyword">bool</span></code>
1555 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is greater than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1556 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1557 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1558 the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
1570 <code class="computeroutput"><span class="identifier">eval_is_zero</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
1575 <code class="computeroutput"><span class="keyword">bool</span></code>
1580 Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is zero, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. The default version of this
1581 function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span> <span class="special">==</span>
1582 <span class="number">0</span></code>, where <code class="computeroutput"><span class="identifier">ui_type</span></code>
1583 is <code class="computeroutput"><span class="identifier">ui_type</span></code> is
1584 <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span>
1585 <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>.
1597 <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
1602 <code class="computeroutput"><span class="keyword">int</span></code>
1607 Returns a value < zero if <code class="computeroutput"><span class="identifier">cb</span></code>
1608 is negative, a value > zero if <code class="computeroutput"><span class="identifier">cb</span></code>
1609 is positive, and zero if <code class="computeroutput"><span class="identifier">cb</span></code>
1610 is zero. The default version of this function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span></code>,
1611 where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
1612 <code class="computeroutput"><span class="identifier">ui_type</span></code> is <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span>
1613 <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>.
1625 <span class="emphasis"><em>Basic arithmetic:</em></span>
1628 <td class="auto-generated"> </td>
1629 <td class="auto-generated"> </td>
1634 <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1635 <span class="identifier">a</span><span class="special">)</span></code>
1640 <code class="computeroutput"><span class="keyword">void</span></code>
1645 Adds <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1646 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1647 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1648 the default version calls <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
1660 <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1661 <span class="identifier">cb</span><span class="special">,</span>
1662 <span class="identifier">cb2</span><span class="special">)</span></code>
1667 <code class="computeroutput"><span class="keyword">void</span></code>
1672 Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">cb2</span></code> and stores the result in
1673 <code class="computeroutput"><span class="identifier">b</span></code>. When not provided,
1674 does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
1675 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
1687 <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1688 <span class="identifier">cb</span><span class="special">,</span>
1689 <span class="identifier">a</span><span class="special">)</span></code>
1694 <code class="computeroutput"><span class="keyword">void</span></code>
1699 Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">a</span></code> and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
1700 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
1701 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1702 does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
1714 <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1715 <span class="identifier">a</span><span class="special">,</span>
1716 <span class="identifier">cb</span><span class="special">)</span></code>
1721 <code class="computeroutput"><span class="keyword">void</span></code>
1726 Add <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
1727 <code class="computeroutput"><span class="identifier">b</span></code>. The type of
1728 <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
1729 in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1730 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1731 does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
1743 <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1744 <span class="identifier">a</span><span class="special">)</span></code>
1749 <code class="computeroutput"><span class="keyword">void</span></code>
1754 Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
1755 <code class="computeroutput"><span class="identifier">b</span></code>. The type of
1756 <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
1757 in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1758 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1759 the default version calls <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
1771 <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1772 <span class="identifier">cb</span><span class="special">,</span>
1773 <span class="identifier">cb2</span><span class="special">)</span></code>
1778 <code class="computeroutput"><span class="keyword">void</span></code>
1783 Subtracts <code class="computeroutput"><span class="identifier">cb2</span></code> from
1784 <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
1785 result in <code class="computeroutput"><span class="identifier">b</span></code>. When
1786 not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
1787 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
1799 <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1800 <span class="identifier">cb</span><span class="special">,</span>
1801 <span class="identifier">a</span><span class="special">)</span></code>
1806 <code class="computeroutput"><span class="keyword">void</span></code>
1811 Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
1812 <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
1813 result in <code class="computeroutput"><span class="identifier">b</span></code>. The
1814 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
1815 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1816 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1817 does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
1829 <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1830 <span class="identifier">a</span><span class="special">,</span>
1831 <span class="identifier">cb</span><span class="special">)</span></code>
1836 <code class="computeroutput"><span class="keyword">void</span></code>
1841 Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from
1842 <code class="computeroutput"><span class="identifier">a</span></code> and stores the
1843 result in <code class="computeroutput"><span class="identifier">b</span></code>. The
1844 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
1845 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1846 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1847 does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">();</span></code>.
1859 <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1860 <span class="identifier">a</span><span class="special">)</span></code>
1865 <code class="computeroutput"><span class="keyword">void</span></code>
1870 Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by
1871 <code class="computeroutput"><span class="identifier">a</span></code>. The type of
1872 <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
1873 in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1874 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1875 the default version calls <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
1887 <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1888 <span class="identifier">cb</span><span class="special">,</span>
1889 <span class="identifier">cb2</span><span class="special">)</span></code>
1894 <code class="computeroutput"><span class="keyword">void</span></code>
1899 Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
1900 <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
1901 the result in <code class="computeroutput"><span class="identifier">b</span></code>.
1902 When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
1903 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
1915 <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1916 <span class="identifier">cb</span><span class="special">,</span>
1917 <span class="identifier">a</span><span class="special">)</span></code>
1922 <code class="computeroutput"><span class="keyword">void</span></code>
1927 Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
1928 <code class="computeroutput"><span class="identifier">a</span></code> and stores the
1929 result in <code class="computeroutput"><span class="identifier">b</span></code>. The
1930 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
1931 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1932 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1933 does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
1945 <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
1946 <span class="identifier">a</span><span class="special">,</span>
1947 <span class="identifier">cb</span><span class="special">)</span></code>
1952 <code class="computeroutput"><span class="keyword">void</span></code>
1957 Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
1958 <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
1959 result in <code class="computeroutput"><span class="identifier">b</span></code>. The
1960 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
1961 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
1962 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
1963 does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
1975 <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
1980 <code class="computeroutput"><span class="keyword">void</span></code>
1985 Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
1986 <code class="computeroutput"><span class="identifier">cb2</span></code> and adds the
1987 result to <code class="computeroutput"><span class="identifier">b</span></code>. When
1988 not provided does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span> <span class="identifier">t</span></code>
1989 and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
2001 <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2006 <code class="computeroutput"><span class="keyword">void</span></code>
2011 Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
2012 <code class="computeroutput"><span class="identifier">cb</span></code> and adds the
2013 result to <code class="computeroutput"><span class="identifier">b</span></code>. The
2014 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
2015 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2016 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
2017 does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span>
2018 <span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
2030 <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
2035 <code class="computeroutput"><span class="keyword">void</span></code>
2040 Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
2041 <code class="computeroutput"><span class="identifier">cb</span></code> and adds the
2042 result to <code class="computeroutput"><span class="identifier">b</span></code>. The
2043 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
2044 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2045 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
2046 does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
2058 <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
2063 <code class="computeroutput"><span class="keyword">void</span></code>
2068 Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
2069 <code class="computeroutput"><span class="identifier">cb2</span></code> and subtracts
2070 the result from <code class="computeroutput"><span class="identifier">b</span></code>.
2071 When not provided does the equivalent of creating a temporary
2072 <code class="computeroutput"><span class="identifier">B</span> <span class="identifier">t</span></code>
2073 and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
2085 <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2090 <code class="computeroutput"><span class="keyword">void</span></code>
2095 Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
2096 <code class="computeroutput"><span class="identifier">cb</span></code> and subtracts
2097 the result from <code class="computeroutput"><span class="identifier">b</span></code>.
2098 The type of <code class="computeroutput"><span class="identifier">a</span></code> shall
2099 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2100 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
2101 does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span>
2102 <span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
2114 <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
2119 <code class="computeroutput"><span class="keyword">void</span></code>
2124 Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
2125 <code class="computeroutput"><span class="identifier">cb</span></code> and subtracts
2126 the result from <code class="computeroutput"><span class="identifier">b</span></code>.
2127 The type of <code class="computeroutput"><span class="identifier">a</span></code> shall
2128 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2129 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
2130 does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
2142 <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>
2147 <code class="computeroutput"><span class="keyword">void</span></code>
2152 Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
2153 <code class="computeroutput"><span class="identifier">cb2</span></code> and adds the
2154 result to <code class="computeroutput"><span class="identifier">cb3</span></code> storing
2155 the result in <code class="computeroutput"><span class="identifier">b</span></code>.
2156 When not provided does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>. For brevity, only a version showing
2157 all arguments of type <code class="computeroutput"><span class="identifier">B</span></code>
2158 is shown here, but you can replace up to any 2 of <code class="computeroutput"><span class="identifier">cb</span></code>, <code class="computeroutput"><span class="identifier">cb2</span></code>
2159 and <code class="computeroutput"><span class="identifier">cb3</span></code> with any
2160 type listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2161 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
2173 <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>
2178 <code class="computeroutput"><span class="keyword">void</span></code>
2183 Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
2184 <code class="computeroutput"><span class="identifier">cb2</span></code> and subtracts
2185 from the result <code class="computeroutput"><span class="identifier">cb3</span></code>
2186 storing the result in <code class="computeroutput"><span class="identifier">b</span></code>.
2187 When not provided does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>. For brevity, only a version showing
2188 all arguments of type <code class="computeroutput"><span class="identifier">B</span></code>
2189 is shown here, but you can replace up to any 2 of <code class="computeroutput"><span class="identifier">cb</span></code>, <code class="computeroutput"><span class="identifier">cb2</span></code>
2190 and <code class="computeroutput"><span class="identifier">cb3</span></code> with any
2191 type listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2192 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
2204 <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2205 <span class="identifier">a</span><span class="special">)</span></code>
2210 <code class="computeroutput"><span class="keyword">void</span></code>
2215 Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">a</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
2216 type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
2217 or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2218 the default version calls <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
2223 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span>
2224 <span class="special">>::</span><span class="identifier">has_infinity</span>
2225 <span class="special">==</span> <span class="keyword">false</span></code>
2232 <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2233 <span class="identifier">cb</span><span class="special">,</span>
2234 <span class="identifier">cb2</span><span class="special">)</span></code>
2239 <code class="computeroutput"><span class="keyword">void</span></code>
2244 Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
2245 <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
2246 the result in <code class="computeroutput"><span class="identifier">b</span></code>.
2247 When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2248 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
2253 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">cb2</span></code> has the value zero, and
2254 <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span>
2255 <span class="special">>::</span><span class="identifier">has_infinity</span>
2256 <span class="special">==</span> <span class="keyword">false</span></code>
2263 <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2264 <span class="identifier">cb</span><span class="special">,</span>
2265 <span class="identifier">a</span><span class="special">)</span></code>
2270 <code class="computeroutput"><span class="keyword">void</span></code>
2275 Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
2276 <code class="computeroutput"><span class="identifier">a</span></code> and stores the
2277 result in <code class="computeroutput"><span class="identifier">b</span></code>. The
2278 type of <code class="computeroutput"><span class="identifier">a</span></code> shall
2279 be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2280 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2281 does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
2286 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span>
2287 <span class="special">>::</span><span class="identifier">has_infinity</span>
2288 <span class="special">==</span> <span class="keyword">false</span></code>
2295 <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2296 <span class="identifier">a</span><span class="special">,</span>
2297 <span class="identifier">cb</span><span class="special">)</span></code>
2302 <code class="computeroutput"><span class="keyword">void</span></code>
2307 Divides <code class="computeroutput"><span class="identifier">a</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
2308 <code class="computeroutput"><span class="identifier">b</span></code>. The type of
2309 <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
2310 in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2311 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2312 does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>.
2317 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
2318 value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> <span class="special">>::</span><span class="identifier">has_infinity</span> <span class="special">==</span>
2319 <span class="keyword">false</span></code>
2326 <code class="computeroutput"><span class="identifier">eval_increment</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
2336 Increments the value of <code class="computeroutput"><span class="identifier">b</span></code>
2337 by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2338 <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">ui_type</span><span class="special">>(</span><span class="number">1u</span><span class="special">))</span></code>.
2339 Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
2340 <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span>
2341 <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>.
2353 <code class="computeroutput"><span class="identifier">eval_decrement</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
2363 Decrements the value of <code class="computeroutput"><span class="identifier">b</span></code>
2364 by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2365 <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">ui_type</span><span class="special">>(</span><span class="number">1u</span><span class="special">))</span></code>.
2366 Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
2367 <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span>
2368 <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>.
2380 <span class="emphasis"><em>Integer specific operations:</em></span>
2383 <td class="auto-generated"> </td>
2384 <td class="auto-generated"> </td>
2389 <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2390 <span class="identifier">a</span><span class="special">)</span></code>
2395 <code class="computeroutput"><span class="keyword">void</span></code>
2400 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span>
2401 <span class="identifier">cb</span></code>, only required when
2402 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2403 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2404 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2405 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2406 the default version calls <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
2411 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
2418 <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2419 <span class="identifier">cb</span><span class="special">,</span>
2420 <span class="identifier">cb2</span><span class="special">)</span></code>
2425 <code class="computeroutput"><span class="keyword">void</span></code>
2430 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
2431 <span class="identifier">cb2</span></code> and stores the result
2432 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2433 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2434 type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2435 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
2440 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
2447 <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2448 <span class="identifier">cb</span><span class="special">,</span>
2449 <span class="identifier">a</span><span class="special">)</span></code>
2454 <code class="computeroutput"><span class="keyword">void</span></code>
2459 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
2460 <span class="identifier">a</span></code> and stores the result
2461 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2462 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2463 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2464 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2465 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2466 does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
2471 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
2478 <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
2479 <span class="identifier">a</span><span class="special">,</span>
2480 <span class="identifier">cb</span><span class="special">)</span></code>
2485 <code class="computeroutput"><span class="keyword">void</span></code>
2490 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
2491 <span class="identifier">a</span></code> and stores the result
2492 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2493 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2494 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2495 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2496 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2497 does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>.
2502 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
2509 <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2514 <code class="computeroutput"><span class="keyword">void</span></code>
2519 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&=</span>
2520 <span class="identifier">cb</span></code>, only required when
2521 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2522 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2523 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2524 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2525 the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
2537 <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
2542 <code class="computeroutput"><span class="keyword">void</span></code>
2547 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&</span>
2548 <span class="identifier">cb2</span></code> and stores the result
2549 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2550 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2551 type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2552 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
2564 <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2569 <code class="computeroutput"><span class="keyword">void</span></code>
2574 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&</span>
2575 <span class="identifier">a</span></code> and stores the result
2576 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2577 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2578 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2579 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2580 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2581 does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
2593 <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
2598 <code class="computeroutput"><span class="keyword">void</span></code>
2603 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&</span>
2604 <span class="identifier">a</span></code> and stores the result
2605 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2606 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2607 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2608 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2609 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2610 does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
2622 <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2627 <code class="computeroutput"><span class="keyword">void</span></code>
2632 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span>
2633 <span class="identifier">cb</span></code>, only required when
2634 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2635 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2636 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2637 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2638 the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
2650 <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
2655 <code class="computeroutput"><span class="keyword">void</span></code>
2660 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
2661 <span class="identifier">cb2</span></code> and stores the result
2662 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2663 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2664 type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2665 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
2677 <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2682 <code class="computeroutput"><span class="keyword">void</span></code>
2687 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
2688 <span class="identifier">a</span></code> and stores the result
2689 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2690 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2691 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2692 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2693 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2694 does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
2706 <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
2711 <code class="computeroutput"><span class="keyword">void</span></code>
2716 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
2717 <span class="identifier">a</span></code> and stores the result
2718 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2719 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2720 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2721 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2722 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2723 does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
2735 <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2740 <code class="computeroutput"><span class="keyword">void</span></code>
2745 Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span>
2746 <span class="identifier">cb</span></code>, only required when
2747 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2748 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2749 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2750 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2751 the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
2763 <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
2768 <code class="computeroutput"><span class="keyword">void</span></code>
2773 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
2774 <span class="identifier">cb2</span></code> and stores the result
2775 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2776 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2777 type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2778 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
2790 <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
2795 <code class="computeroutput"><span class="keyword">void</span></code>
2800 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
2801 <span class="identifier">a</span></code> and stores the result
2802 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2803 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2804 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2805 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2806 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2807 does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
2819 <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
2824 <code class="computeroutput"><span class="keyword">void</span></code>
2829 Computes <code class="computeroutput"><span class="identifier">a</span> <span class="special">^</span>
2830 <span class="identifier">cb</span></code> and stores the result
2831 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2832 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2833 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
2834 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
2835 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
2836 does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
2848 <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
2853 <code class="computeroutput"><span class="keyword">void</span></code>
2858 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special"><<</span>
2859 <span class="identifier">ui</span></code> and stores the result
2860 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2861 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2862 type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2863 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>.
2875 <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
2880 <code class="computeroutput"><span class="keyword">void</span></code>
2885 Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">>></span>
2886 <span class="identifier">ui</span></code> and stores the result
2887 in <code class="computeroutput"><span class="identifier">b</span></code>, only required
2888 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2889 type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
2890 <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>.
2902 <code class="computeroutput"><span class="identifier">eval_qr</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
2903 <span class="identifier">cb2</span><span class="special">,</span>
2904 <span class="identifier">b</span><span class="special">,</span>
2905 <span class="identifier">b2</span><span class="special">)</span></code>
2910 <code class="computeroutput"><span class="keyword">void</span></code>
2915 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
2916 of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">/</span>
2917 <span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code> to the result of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
2918 <span class="identifier">cb2</span></code>. Only required when
2919 <code class="computeroutput"><span class="identifier">B</span></code> is an integer
2920 type. The default version of this function is synthesised from
2921 other operations above.
2926 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
2933 <code class="computeroutput"><span class="identifier">eval_integer_modulus</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
2938 <code class="computeroutput"><span class="keyword">unsigned</span></code>
2943 Returns the result of <code class="computeroutput"><span class="identifier">cb</span>
2944 <span class="special">%</span> <span class="identifier">ui</span></code>.
2945 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
2946 is an integer type. The default version of this function is synthesised
2947 from other operations above.
2952 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
2959 <code class="computeroutput"><span class="identifier">eval_lsb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
2964 <code class="computeroutput"><span class="keyword">unsigned</span></code>
2969 Returns the index of the least significant bit that is set. Only
2970 required when <code class="computeroutput"><span class="identifier">B</span></code>
2971 is an integer type. The default version of this function is synthesised
2972 from other operations above.
2984 <code class="computeroutput"><span class="identifier">eval_msb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
2989 <code class="computeroutput"><span class="keyword">unsigned</span></code>
2994 Returns the index of the most significant bit that is set. Only
2995 required when <code class="computeroutput"><span class="identifier">B</span></code>
2996 is an integer type. The default version of this function is synthesised
2997 from other operations above.
3009 <code class="computeroutput"><span class="identifier">eval_bit_test</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
3010 <span class="identifier">ui</span><span class="special">)</span></code>
3015 <code class="computeroutput"><span class="keyword">bool</span></code>
3020 Returns true if <code class="computeroutput"><span class="identifier">cb</span></code>
3021 has bit <code class="computeroutput"><span class="identifier">ui</span></code> set.
3022 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3023 is an integer type. The default version of this function is synthesised
3024 from other operations above.
3036 <code class="computeroutput"><span class="identifier">eval_bit_set</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3037 <span class="identifier">ui</span><span class="special">)</span></code>
3042 <code class="computeroutput"><span class="keyword">void</span></code>
3047 Sets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
3048 in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
3049 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3050 type. The default version of this function is synthesised from
3051 other operations above.
3063 <code class="computeroutput"><span class="identifier">eval_bit_unset</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
3068 <code class="computeroutput"><span class="keyword">void</span></code>
3073 Unsets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
3074 in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
3075 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3076 type. The default version of this function is synthesised from
3077 other operations above.
3089 <code class="computeroutput"><span class="identifier">eval_bit_flip</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3090 <span class="identifier">ui</span><span class="special">)</span></code>
3095 <code class="computeroutput"><span class="keyword">void</span></code>
3100 Flips the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
3101 in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
3102 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3103 type. The default version of this function is synthesised from
3104 other operations above.
3116 <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3117 <span class="identifier">cb</span><span class="special">,</span>
3118 <span class="identifier">cb2</span><span class="special">)</span></code>
3123 <code class="computeroutput"><span class="keyword">void</span></code>
3128 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
3129 common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
3130 and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
3131 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3132 type. The default version of this function is synthesised from
3133 other operations above.
3145 <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3146 <span class="identifier">cb</span><span class="special">,</span>
3147 <span class="identifier">cb2</span><span class="special">)</span></code>
3152 <code class="computeroutput"><span class="keyword">void</span></code>
3157 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
3158 common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
3159 and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
3160 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3161 type. The default version of this function is synthesised from
3162 other operations above.
3174 <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3175 <span class="identifier">cb</span><span class="special">,</span>
3176 <span class="identifier">a</span><span class="special">)</span></code>
3181 <code class="computeroutput"><span class="keyword">void</span></code>
3186 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
3187 common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
3188 and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
3189 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3190 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3191 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3192 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
3193 of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
3205 <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3206 <span class="identifier">cb</span><span class="special">,</span>
3207 <span class="identifier">a</span><span class="special">)</span></code>
3212 <code class="computeroutput"><span class="keyword">void</span></code>
3217 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
3218 common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
3219 and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
3220 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3221 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3222 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3223 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
3224 of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
3236 <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3237 <span class="identifier">a</span><span class="special">,</span>
3238 <span class="identifier">cb</span><span class="special">)</span></code>
3243 <code class="computeroutput"><span class="keyword">void</span></code>
3248 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
3249 common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
3250 and <code class="computeroutput"><span class="identifier">a</span></code>. Only required
3251 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3252 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3253 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3254 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
3255 of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
3267 <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3268 <span class="identifier">a</span><span class="special">,</span>
3269 <span class="identifier">cb</span><span class="special">)</span></code>
3274 <code class="computeroutput"><span class="keyword">void</span></code>
3279 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
3280 common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
3281 and <code class="computeroutput"><span class="identifier">a</span></code>. Only required
3282 when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
3283 type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3284 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3285 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
3286 of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
3298 <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3299 <span class="identifier">cb</span><span class="special">,</span>
3300 <span class="identifier">cb2</span><span class="special">,</span>
3301 <span class="identifier">cb3</span><span class="special">)</span></code>
3306 <code class="computeroutput"><span class="keyword">void</span></code>
3311 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
3312 of <span class="emphasis"><em>(cb^cb2)%cb3</em></span>. The default version of this
3313 function is synthesised from other operations above.
3325 <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3326 <span class="identifier">cb</span><span class="special">,</span>
3327 <span class="identifier">cb2</span><span class="special">,</span>
3328 <span class="identifier">a</span><span class="special">)</span></code>
3333 <code class="computeroutput"><span class="keyword">void</span></code>
3338 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
3339 of <span class="emphasis"><em>(cb^cb2)%a</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3340 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3341 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
3342 of this function is synthesised from other operations above.
3354 <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3355 <span class="identifier">cb</span><span class="special">,</span>
3356 <span class="identifier">a</span><span class="special">,</span>
3357 <span class="identifier">cb2</span><span class="special">)</span></code>
3362 <code class="computeroutput"><span class="keyword">void</span></code>
3367 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
3368 of <span class="emphasis"><em>(cb^a)%cb2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3369 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3370 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
3371 of this function is synthesised from other operations above.
3383 <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3384 <span class="identifier">cb</span><span class="special">,</span>
3385 <span class="identifier">a</span><span class="special">,</span>
3386 <span class="identifier">a2</span><span class="special">)</span></code>
3391 <code class="computeroutput"><span class="keyword">void</span></code>
3396 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
3397 of <span class="emphasis"><em>(cb^a)%a2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
3398 shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
3399 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
3400 of this function is synthesised from other operations above.
3412 <code class="computeroutput"><span class="identifier">eval_integer_sqrt</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code>
3417 <code class="computeroutput"><span class="keyword">void</span></code>
3422 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the largest
3423 integer which when squared is less than <code class="computeroutput"><span class="identifier">cb</span></code>,
3424 also sets <code class="computeroutput"><span class="identifier">b2</span></code> to
3425 the remainder, ie to <span class="emphasis"><em>cb - b<sup>2</sup></em></span>. The default
3426 version of this function is synthesised from other operations above.
3438 <span class="emphasis"><em>Sign manipulation:</em></span>
3441 <td class="auto-generated"> </td>
3442 <td class="auto-generated"> </td>
3447 <code class="computeroutput"><span class="identifier">eval_abs</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3448 <span class="identifier">cb</span><span class="special">)</span></code>
3453 <code class="computeroutput"><span class="keyword">void</span></code>
3458 Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute
3459 value of <code class="computeroutput"><span class="identifier">cb</span></code>. The
3460 default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code>
3461 to <code class="computeroutput"><span class="identifier">b</span></code>, and then
3462 calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
3463 if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special"><</span>
3464 <span class="number">0</span></code>.
3476 <code class="computeroutput"><span class="identifier">eval_fabs</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3477 <span class="identifier">cb</span><span class="special">)</span></code>
3482 <code class="computeroutput"><span class="keyword">void</span></code>
3487 Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute
3488 value of <code class="computeroutput"><span class="identifier">cb</span></code>. The
3489 default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code>
3490 to <code class="computeroutput"><span class="identifier">b</span></code>, and then
3491 calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
3492 if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special"><</span>
3493 <span class="number">0</span></code>.
3505 <span class="emphasis"><em>floating-point functions:</em></span>
3508 <td class="auto-generated"> </td>
3509 <td class="auto-generated"> </td>
3514 <code class="computeroutput"><span class="identifier">eval_fpclassify</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
3519 <code class="computeroutput"><span class="keyword">int</span></code>
3524 Returns one of the same values returned by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fpclassify</span></code>.
3525 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3526 is an floating-point type. The default version of this function
3527 will only test for zero <code class="computeroutput"><span class="identifier">cb</span></code>.
3539 <code class="computeroutput"><span class="identifier">eval_trunc</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3540 <span class="identifier">cb</span><span class="special">)</span></code>
3545 <code class="computeroutput"><span class="keyword">void</span></code>
3550 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">trunc</span></code>
3551 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3552 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3553 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3554 is an floating-point type. The default version of this function
3555 is synthesised from other operations above.
3567 <code class="computeroutput"><span class="identifier">eval_round</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3568 <span class="identifier">cb</span><span class="special">)</span></code>
3573 <code class="computeroutput"><span class="keyword">void</span></code>
3578 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">round</span></code>
3579 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3580 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3581 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3582 is an floating-point type. The default version of this function
3583 is synthesised from other operations above.
3595 <code class="computeroutput"><span class="identifier">eval_exp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3596 <span class="identifier">cb</span><span class="special">)</span></code>
3601 <code class="computeroutput"><span class="keyword">void</span></code>
3606 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span></code>
3607 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3608 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3609 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3610 is an floating-point type. The default version of this function
3611 is synthesised from other operations above.
3623 <code class="computeroutput"><span class="identifier">eval_exp2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3624 <span class="identifier">cb</span><span class="special">)</span></code>
3629 <code class="computeroutput"><span class="keyword">void</span></code>
3634 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp2</span></code>
3635 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3636 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3637 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3638 is an floating-point type. The default version of this function
3639 is implemented in terms of <code class="computeroutput"><span class="identifier">eval_pow</span></code>.
3651 <code class="computeroutput"><span class="identifier">eval_log</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3652 <span class="identifier">cb</span><span class="special">)</span></code>
3657 <code class="computeroutput"><span class="keyword">void</span></code>
3662 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log</span></code>
3663 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3664 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3665 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3666 is an floating-point type. The default version of this function
3667 is synthesised from other operations above.
3679 <code class="computeroutput"><span class="identifier">eval_log10</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3680 <span class="identifier">cb</span><span class="special">)</span></code>
3685 <code class="computeroutput"><span class="keyword">void</span></code>
3690 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log10</span></code>
3691 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3692 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3693 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3694 is an floating-point type. The default version of this function
3695 is synthesised from other operations above.
3707 <code class="computeroutput"><span class="identifier">eval_sin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3708 <span class="identifier">cb</span><span class="special">)</span></code>
3713 <code class="computeroutput"><span class="keyword">void</span></code>
3718 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span></code>
3719 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3720 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3721 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3722 is an floating-point type. The default version of this function
3723 is synthesised from other operations above.
3735 <code class="computeroutput"><span class="identifier">eval_cos</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3736 <span class="identifier">cb</span><span class="special">)</span></code>
3741 <code class="computeroutput"><span class="keyword">void</span></code>
3746 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cos</span></code>
3747 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3748 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3749 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3750 is an floating-point type. The default version of this function
3751 is synthesised from other operations above.
3763 <code class="computeroutput"><span class="identifier">eval_tan</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3764 <span class="identifier">cb</span><span class="special">)</span></code>
3769 <code class="computeroutput"><span class="keyword">void</span></code>
3774 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span></code>
3775 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3776 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3777 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3778 is an floating-point type. The default version of this function
3779 is synthesised from other operations above.
3791 <code class="computeroutput"><span class="identifier">eval_asin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3792 <span class="identifier">cb</span><span class="special">)</span></code>
3797 <code class="computeroutput"><span class="keyword">void</span></code>
3802 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">asin</span></code>
3803 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3804 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3805 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3806 is an floating-point type. The default version of this function
3807 is synthesised from other operations above.
3819 <code class="computeroutput"><span class="identifier">eval_acos</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3820 <span class="identifier">cb</span><span class="special">)</span></code>
3825 <code class="computeroutput"><span class="keyword">void</span></code>
3830 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">acos</span></code>
3831 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3832 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3833 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3834 is an floating-point type. The default version of this function
3835 is synthesised from other operations above.
3847 <code class="computeroutput"><span class="identifier">eval_atan</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3848 <span class="identifier">cb</span><span class="special">)</span></code>
3853 <code class="computeroutput"><span class="keyword">void</span></code>
3858 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code>
3859 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3860 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3861 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3862 is an floating-point type. The default version of this function
3863 is synthesised from other operations above.
3875 <code class="computeroutput"><span class="identifier">eval_sinh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3876 <span class="identifier">cb</span><span class="special">)</span></code>
3881 <code class="computeroutput"><span class="keyword">void</span></code>
3886 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sinh</span></code>
3887 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3888 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3889 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3890 is an floating-point type. The default version of this function
3891 is synthesised from other operations above.
3903 <code class="computeroutput"><span class="identifier">eval_cosh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3904 <span class="identifier">cb</span><span class="special">)</span></code>
3909 <code class="computeroutput"><span class="keyword">void</span></code>
3914 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cosh</span></code>
3915 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3916 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3917 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3918 is an floating-point type. The default version of this function
3919 is synthesised from other operations above.
3931 <code class="computeroutput"><span class="identifier">eval_tanh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3932 <span class="identifier">cb</span><span class="special">)</span></code>
3937 <code class="computeroutput"><span class="keyword">void</span></code>
3942 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tanh</span></code>
3943 on argument <code class="computeroutput"><span class="identifier">cb</span></code>
3944 and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3945 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3946 is an floating-point type. The default version of this function
3947 is synthesised from other operations above.
3959 <code class="computeroutput"><span class="identifier">eval_fmod</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3960 <span class="identifier">cb</span><span class="special">,</span>
3961 <span class="identifier">cb2</span><span class="special">)</span></code>
3966 <code class="computeroutput"><span class="keyword">void</span></code>
3971 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fmod</span></code>
3972 on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
3973 and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
3974 the result in <code class="computeroutput"><span class="identifier">b</span></code>.
3975 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
3976 is an floating-point type. The default version of this function
3977 is synthesised from other operations above.
3989 <code class="computeroutput"><span class="identifier">eval_modf</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
3990 <span class="identifier">cb</span><span class="special">,</span>
3991 <span class="identifier">pb</span><span class="special">)</span></code>
3996 <code class="computeroutput"><span class="keyword">void</span></code>
4001 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">modf</span></code>
4002 on argument <code class="computeroutput"><span class="identifier">cb</span></code>,
4003 and store the integer result in <code class="computeroutput"><span class="special">*</span><span class="identifier">pb</span></code> and the fractional part in
4004 <code class="computeroutput"><span class="identifier">b</span></code>. Only required
4005 when <code class="computeroutput"><span class="identifier">B</span></code> is an floating-point
4006 type. The default version of this function is synthesised from
4007 other operations above.
4019 <code class="computeroutput"><span class="identifier">eval_pow</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4020 <span class="identifier">cb</span><span class="special">,</span>
4021 <span class="identifier">cb2</span><span class="special">)</span></code>
4026 <code class="computeroutput"><span class="keyword">void</span></code>
4031 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>
4032 on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
4033 and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
4034 the result in <code class="computeroutput"><span class="identifier">b</span></code>.
4035 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
4036 is an floating-point type. The default version of this function
4037 is synthesised from other operations above.
4049 <code class="computeroutput"><span class="identifier">eval_atan2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4050 <span class="identifier">cb</span><span class="special">,</span>
4051 <span class="identifier">cb2</span><span class="special">)</span></code>
4056 <code class="computeroutput"><span class="keyword">void</span></code>
4061 Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code>
4062 on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
4063 and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
4064 the result in <code class="computeroutput"><span class="identifier">b</span></code>.
4065 Only required when <code class="computeroutput"><span class="identifier">B</span></code>
4066 is an floating-point type. The default version of this function
4067 is synthesised from other operations above.
4079 <code class="computeroutput"><span class="identifier">eval_scalbn</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4080 <span class="identifier">cb</span><span class="special">,</span>
4081 <span class="identifier">e</span><span class="special">)</span></code>
4086 <code class="computeroutput"><span class="keyword">void</span></code>
4091 Scales value <code class="computeroutput"><span class="identifier">cb</span></code>
4092 by <span class="emphasis"><em>r<sup>e</sup></em></span>, where <span class="emphasis"><em>r</em></span> is the
4093 radix of the type. The default version of this function is implemented
4094 in terms of eval_ldexp, consequently this function must be provided
4095 for types with a radix other than 2.
4102 <code class="computeroutput"><span class="identifier">eval_scalbln</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4103 <span class="identifier">cb</span><span class="special">,</span>
4104 <span class="identifier">e</span><span class="special">)</span></code>
4109 <code class="computeroutput"><span class="keyword">void</span></code>
4114 Calls <code class="computeroutput"><span class="identifier">eval_scalbn</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">e</span><span class="special">)</span></code>.
4121 <code class="computeroutput"><span class="identifier">eval_ilogb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
4126 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code>
4131 Returns the exponent <span class="emphasis"><em>e</em></span> of value <code class="computeroutput"><span class="identifier">cb</span></code> such that <span class="emphasis"><em>1 <=
4132 cb*r<sup>-e</sup> < r</em></span>, where <span class="emphasis"><em>r</em></span> is the radix
4133 of type B. The default version of this function is implemented
4134 in terms of eval_frexp, consequently this function must be provided
4135 for types with a radix other than 2.
4142 <code class="computeroutput"><span class="identifier">eval_remquo</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4143 <span class="identifier">cb</span><span class="special">,</span>
4144 <span class="identifier">cb2</span><span class="special">,</span>
4145 <span class="identifier">pi</span><span class="special">)</span></code>
4150 <code class="computeroutput"><span class="keyword">void</span></code>
4155 Sets <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
4156 <span class="identifier">cb</span> <span class="special">-</span>
4157 <span class="identifier">n</span> <span class="special">*</span>
4158 <span class="identifier">cb2</span></code> and stores <code class="computeroutput"><span class="identifier">n</span></code> in <code class="computeroutput"><span class="special">*</span><span class="identifier">pi</span></code>.
4165 <code class="computeroutput"><span class="identifier">eval_remquo</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4166 <span class="identifier">cb</span><span class="special">,</span>
4167 <span class="identifier">a</span><span class="special">,</span>
4168 <span class="identifier">pi</span><span class="special">)</span></code>
4173 <code class="computeroutput"><span class="keyword">void</span></code>
4178 Default version converts a to type B and calls the overload above.
4185 <code class="computeroutput"><span class="identifier">eval_remquo</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4186 <span class="identifier">a</span><span class="special">,</span>
4187 <span class="identifier">cb</span><span class="special">,</span>
4188 <span class="identifier">pi</span><span class="special">)</span></code>
4193 <code class="computeroutput"><span class="keyword">void</span></code>
4198 Default version converts a to type B and calls the overload above.
4205 <code class="computeroutput"><span class="identifier">eval_remainder</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
4210 <code class="computeroutput"><span class="keyword">void</span></code>
4215 Default version calls eval_remquo with a dummy final argument.
4222 <code class="computeroutput"><span class="identifier">eval_remainder</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
4227 <code class="computeroutput"><span class="keyword">void</span></code>
4232 Default version calls eval_remquo with a dummy final argument.
4239 <code class="computeroutput"><span class="identifier">eval_remainder</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
4244 <code class="computeroutput"><span class="keyword">void</span></code>
4249 Default version calls eval_remquo with a dummy final argument.
4256 <code class="computeroutput"><span class="identifier">eval_fdim</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4257 <span class="identifier">cb</span><span class="special">,</span>
4258 <span class="identifier">cb2</span><span class="special">)</span></code>
4263 <code class="computeroutput"><span class="keyword">void</span></code>
4268 Default version sets <code class="computeroutput"><span class="identifier">b</span>
4269 <span class="special">=</span> <span class="identifier">cb</span>
4270 <span class="special">-</span> <span class="identifier">cb2</span></code>
4271 if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">></span>
4272 <span class="identifier">cb2</span></code> and zero otherwise.
4273 Special cases are handled as in the C99 annex.
4280 <code class="computeroutput"><span class="identifier">eval_fdim</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4281 <span class="identifier">cb</span><span class="special">,</span>
4282 <span class="identifier">a</span><span class="special">)</span></code>
4287 <code class="computeroutput"><span class="keyword">void</span></code>
4292 Default version sets <code class="computeroutput"><span class="identifier">b</span>
4293 <span class="special">=</span> <span class="identifier">cb</span>
4294 <span class="special">-</span> <span class="identifier">cb2</span></code>
4295 if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">></span>
4296 <span class="identifier">cb2</span></code> and zero otherwise.
4297 Special cases are handled as in the C99 annex.
4304 <code class="computeroutput"><span class="identifier">eval_fdim</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4305 <span class="identifier">a</span><span class="special">,</span>
4306 <span class="identifier">cb</span><span class="special">)</span></code>
4311 <code class="computeroutput"><span class="keyword">void</span></code>
4316 Default version sets <code class="computeroutput"><span class="identifier">b</span>
4317 <span class="special">=</span> <span class="identifier">cb</span>
4318 <span class="special">-</span> <span class="identifier">cb2</span></code>
4319 if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">></span>
4320 <span class="identifier">cb2</span></code> and zero otherwise.
4321 Special cases are handled as in the C99 annex.
4328 <code class="computeroutput"><span class="identifier">eval_fmax</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4329 <span class="identifier">cb</span><span class="special">,</span>
4330 <span class="identifier">cb2</span><span class="special">)</span></code>
4335 <code class="computeroutput"><span class="keyword">void</span></code>
4340 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the larger
4341 of <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">cb2</span></code>.
4348 <code class="computeroutput"><span class="identifier">eval_fmax</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4349 <span class="identifier">cb</span><span class="special">,</span>
4350 <span class="identifier">a</span><span class="special">)</span></code>
4355 <code class="computeroutput"><span class="keyword">void</span></code>
4360 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the larger
4361 of <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>.
4368 <code class="computeroutput"><span class="identifier">eval_fmax</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4369 <span class="identifier">a</span><span class="special">,</span>
4370 <span class="identifier">cb</span><span class="special">)</span></code>
4375 <code class="computeroutput"><span class="keyword">void</span></code>
4380 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the larger
4381 of <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>.
4388 <code class="computeroutput"><span class="identifier">eval_fmin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4389 <span class="identifier">cb</span><span class="special">,</span>
4390 <span class="identifier">cb2</span><span class="special">)</span></code>
4395 <code class="computeroutput"><span class="keyword">void</span></code>
4400 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the smaller
4401 of <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">cb2</span></code>.
4408 <code class="computeroutput"><span class="identifier">eval_fmin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4409 <span class="identifier">cb</span><span class="special">,</span>
4410 <span class="identifier">a</span><span class="special">)</span></code>
4415 <code class="computeroutput"><span class="keyword">void</span></code>
4420 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the smaller
4421 of <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>.
4428 <code class="computeroutput"><span class="identifier">eval_fmin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4429 <span class="identifier">a</span><span class="special">,</span>
4430 <span class="identifier">cb</span><span class="special">)</span></code>
4435 <code class="computeroutput"><span class="keyword">void</span></code>
4440 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the smaller
4441 of <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>.
4448 <code class="computeroutput"><span class="identifier">eval_hypot</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4449 <span class="identifier">cb</span><span class="special">,</span>
4450 <span class="identifier">cb2</span><span class="special">)</span></code>
4455 <code class="computeroutput"><span class="keyword">void</span></code>
4460 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the square
4461 root of the sum of the squares of <code class="computeroutput"><span class="identifier">cb</span></code>
4462 and <code class="computeroutput"><span class="identifier">cb2</span></code> without
4463 undue over or under flow.
4470 <code class="computeroutput"><span class="identifier">eval_hypot</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4471 <span class="identifier">cb</span><span class="special">,</span>
4472 <span class="identifier">a</span><span class="special">)</span></code>
4477 <code class="computeroutput"><span class="keyword">void</span></code>
4489 <code class="computeroutput"><span class="identifier">eval_hypot</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4490 <span class="identifier">a</span><span class="special">,</span>
4491 <span class="identifier">cb</span><span class="special">)</span></code>
4496 <code class="computeroutput"><span class="keyword">void</span></code>
4508 <code class="computeroutput"><span class="identifier">eval_logb</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4509 <span class="identifier">cb</span><span class="special">)</span></code>
4514 <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code>
4519 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the exponent
4520 <span class="emphasis"><em>e</em></span> of value <code class="computeroutput"><span class="identifier">cb</span></code>
4521 such that <span class="emphasis"><em>1 <= cb*r<sup>-b</sup> < r</em></span>, where <span class="emphasis"><em>r</em></span>
4522 is the radix of type B. The default version of this function is
4523 implemented in terms of <code class="computeroutput"><span class="identifier">eval_ilogb</span></code>.
4530 <code class="computeroutput"><span class="identifier">eval_nearbyint</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
4535 <code class="computeroutput"><span class="keyword">void</span></code>
4540 Calls <code class="computeroutput"><span class="identifier">eval_round</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>.
4547 <code class="computeroutput"><span class="identifier">eval_rint</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4548 <span class="identifier">cb</span><span class="special">)</span></code>
4553 <code class="computeroutput"><span class="keyword">void</span></code>
4558 Calls <code class="computeroutput"><span class="identifier">eval_nearbyint</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>.
4565 <code class="computeroutput"><span class="identifier">eval_log2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
4566 <span class="identifier">cb</span><span class="special">)</span></code>
4571 <code class="computeroutput"><span class="keyword">void</span></code>
4576 Sets <code class="computeroutput"><span class="identifier">b</span></code> to the logarithm
4577 base 2 of <code class="computeroutput"><span class="identifier">cb</span></code>.
4584 <span class="emphasis"><em>hashing:</em></span>
4587 <td class="auto-generated"> </td>
4588 <td class="auto-generated"> </td>
4593 <code class="computeroutput"><span class="identifier">hash_value</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
4598 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
4603 Returns a hash value for the argument that is suitable for use
4604 with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">hash</span></code> etc. If not provided then
4605 no automatic hashing support will be available for the number type.
4612 <br class="table-break"><p>
4613 When the tables above place no <span class="emphasis"><em>throws</em></span> requirements on
4614 an operation, then it is up to each type modelling this concept to decide
4615 when or whether throwing an exception is desirable. However, thrown exceptions
4616 should always either be the type, or inherit from the type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>.
4617 For example, a floating-point type might choose to throw <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
4618 whenever the result of an operation would be infinite, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code>
4619 whenever it would round to zero.
4621 <div class="note"><table border="0" summary="Note">
4623 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td>
4624 <th align="left">Note</th>
4626 <tr><td align="left" valign="top"><p>
4627 The non-member functions are all named with an "eval_" prefix
4628 to avoid conflicts with template classes of the same name - in point of
4629 fact this naming convention shouldn't be necessary, but rather works around
4634 <a name="boost_multiprecision.ref.backendconc.h0"></a>
4635 <span class="phrase"><a name="boost_multiprecision.ref.backendconc.overloadable_functions"></a></span><a class="link" href="backendconc.html#boost_multiprecision.ref.backendconc.overloadable_functions">Overloadable
4639 Some of the C99 math functions do not have <code class="computeroutput"><span class="identifier">eval_</span></code>
4640 functions but must be overloaded directly: these functions are either trivial
4641 or are forwarded to the Boost.Math implementations by default. The full list
4642 of these functions is:
4644 <pre class="programlisting"><span class="keyword">int</span> <span class="identifier">sign</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4645 <span class="keyword">int</span> <span class="identifier">signbit</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4646 <span class="emphasis"><em>number</em></span> <span class="identifier">changesign</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4647 <span class="emphasis"><em>number</em></span> <span class="identifier">copysign</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4648 <span class="emphasis"><em>number</em></span> <span class="identifier">asinh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4649 <span class="emphasis"><em>number</em></span> <span class="identifier">acosh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4650 <span class="emphasis"><em>number</em></span> <span class="identifier">atanh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4651 <span class="emphasis"><em>number</em></span> <span class="identifier">cbrt</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4652 <span class="emphasis"><em>number</em></span> <span class="identifier">erf</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4653 <span class="emphasis"><em>number</em></span> <span class="identifier">erfc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4654 <span class="emphasis"><em>number</em></span> <span class="identifier">expm1</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4655 <span class="emphasis"><em>number</em></span> <span class="identifier">log1p</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4656 <span class="emphasis"><em>number</em></span> <span class="identifier">tgamma</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4657 <span class="emphasis"><em>number</em></span> <span class="identifier">lgamma</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4658 <span class="keyword">long</span> <span class="identifier">lrint</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4659 <span class="keyword">long</span> <span class="keyword">long</span> <span class="identifier">llrint</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4660 <span class="emphasis"><em>number</em></span> <span class="identifier">nextafter</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4661 <span class="emphasis"><em>number</em></span> <span class="identifier">nexttoward</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
4664 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
4665 <td align="left"></td>
4666 <td align="right"><div class="copyright-footer">Copyright © 2002-2019 John Maddock
4667 and Christopher Kormanyos<p>
4668 Distributed under the Boost Software License, Version 1.0. (See accompanying
4669 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>)
4674 <div class="spirit-nav">
4675 <a accesskey="p" href="internals.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../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="headers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>