3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
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="../ref.html" title="Reference">
10 <link rel="next" href="cpp_int_ref.html" title="cpp_int">
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="../ref.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="cpp_int_ref.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.number"></a><a class="link" href="number.html" title="number">number</a>
28 </h3></div></div></div>
30 <a name="boost_multiprecision.ref.number.h0"></a>
31 <span class="phrase"><a name="boost_multiprecision.ref.number.synopsis"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.synopsis">Synopsis</a>
33 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span>
35 <span class="keyword">enum</span> <span class="identifier">expression_template_option</span> <span class="special">{</span> <span class="identifier">et_on</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">et_off</span> <span class="special">=</span> <span class="number">0</span> <span class="special">};</span>
37 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">expression_template_default</span>
38 <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_on</span><span class="special">;</span> <span class="special">};</span>
40 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="identifier">expression_template_default</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>::</span><span class="identifier">value</span><span class="special">></span>
41 <span class="keyword">class</span> <span class="identifier">number</span>
42 <span class="special">{</span>
43 <span class="keyword">public</span><span class="special">:</span>
44 <span class="keyword">typedef</span> <span class="identifier">Backend</span> <span class="identifier">backend_type</span><span class="special">;</span>
45 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="identifier">self_type</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">value_type</span><span class="special">;</span>
47 <span class="identifier">number</span><span class="special">();</span>
48 <span class="identifier">number</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
49 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
50 <span class="identifier">number</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
52 <span class="comment">// Member operators</span>
53 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
54 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
55 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
56 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
57 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
58 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span>
59 <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
60 <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
62 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
63 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">&=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
64 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
65 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
66 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
67 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">>>=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
69 <span class="comment">// Use in Boolean context:</span>
70 <span class="keyword">operator</span> <span class="emphasis"><em>convertible-to-bool-type</em></span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
71 <span class="comment">// swap:</span>
72 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&</span> <span class="identifier">other</span><span class="special">);</span>
73 <span class="comment">// Sign:</span>
74 <span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
75 <span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
76 <span class="comment">// string conversion:</span>
77 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
78 <span class="comment">// Generic conversion mechanism</span>
79 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
80 <span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
81 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
82 <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="identifier">T</span> <span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
83 <span class="comment">// precision control:</span>
84 <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span>
85 <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">default_precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
86 <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
87 <span class="keyword">void</span> <span class="identifier">precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
88 <span class="comment">// Comparison:</span>
89 <span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>&</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
90 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span>
91 <span class="keyword">typename</span> <span class="identifier">enable_if</span><span class="special"><</span><span class="identifier">is_convertible</span><span class="special"><</span><span class="identifier">V</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">int</span><span class="special">>::</span><span class="identifier">type</span>
92 <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">V</span><span class="special">&</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
93 <span class="comment">// real and imaginary parts:</span>
94 <span class="identifier">value_type</span> <span class="identifier">real</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
95 <span class="identifier">value_type</span> <span class="identifier">imag</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
96 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
97 <span class="keyword">void</span> <span class="identifier">real</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">val</span><span class="special">);</span>
98 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
99 <span class="keyword">void</span> <span class="identifier">imag</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">val</span><span class="special">);</span>
100 <span class="comment">// Access to the underlying implementation:</span>
101 <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">();</span>
102 <span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
103 <span class="special">};</span>
105 <span class="comment">// Non member operators:</span>
106 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
107 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
108 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
109 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
110 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
111 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
112 <span class="comment">// Integer only operations:</span>
113 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
114 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
115 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
116 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
117 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special"><<(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
118 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">>>(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
119 <span class="comment">// Comparison operators:</span>
120 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
121 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
122 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
123 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
124 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
125 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
127 <span class="comment">// Swap:</span>
128 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
129 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span>
131 <span class="comment">// iostream support:</span>
132 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
133 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span>
134 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>unmentionable-expression-template-type</em></span><span class="special">&</span> <span class="identifier">r</span><span class="special">);</span>
135 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
136 <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">>></span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span>
138 <span class="comment">// Arithmetic with a higher precision result:</span>
139 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span>
140 <span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
141 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span>
142 <span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
143 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span>
144 <span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
146 <span class="comment">// min and max overloads:</span>
147 <span class="emphasis"><em>number</em></span> <span class="identifier">min</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>
148 <span class="emphasis"><em>number</em></span> <span class="identifier">max</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>
150 <span class="comment">// C99 Non-member function standard library support:</span>
151 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">abs</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>
152 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">acos</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>
153 <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>
154 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">asin</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>
155 <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>
156 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan</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>
157 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan2</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>
158 <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>
159 <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>
160 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ceil</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>
161 <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>
162 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cos</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>
163 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cosh</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>
164 <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>
165 <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>
166 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp</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>
167 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp2</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>
168 <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>
169 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fabs</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>
170 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fdim</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>
171 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">floor</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>
172 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fma</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
173 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmin</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>
174 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmax</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>
175 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmod</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>
176 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">frexp</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="emphasis"><em>integer-type</em></span><span class="special">*);</span>
177 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">hypot</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>
178 <span class="emphasis"><em>integer-type</em></span> <span class="identifier">ilogb</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>
179 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ldexp</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="emphasis"><em>integer-type</em></span><span class="special">);</span>
180 <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>
181 <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>
182 <span class="keyword">long</span> <span class="keyword">long</span> <span class="identifier">llround</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>
183 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log</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>
184 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log2</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>
185 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log10</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>
186 <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>
187 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">logb</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>
188 <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>
189 <span class="keyword">long</span> <span class="identifier">lround</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>
190 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">modf</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>
191 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">nearbyint</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>
192 <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>
193 <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>
194 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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>
195 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">remainder</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>
196 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">remquo</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> <span class="keyword">int</span><span class="special">*);</span>
197 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">rint</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>
198 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">round</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>
199 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbn</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="emphasis"><em>integer-type</em></span><span class="special">);</span>
200 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbln</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="emphasis"><em>integer-type</em></span><span class="special">);</span>
201 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sin</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>
202 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sinh</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>
203 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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>
204 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tan</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>
205 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tanh</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>
206 <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>
207 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">trunc</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>
209 <span class="keyword">int</span> <span class="identifier">fpclassify</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>
210 <span class="keyword">bool</span> <span class="identifier">isfinite</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>
211 <span class="keyword">bool</span> <span class="identifier">isinf</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>
212 <span class="keyword">bool</span> <span class="identifier">isnan</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>
213 <span class="keyword">bool</span> <span class="identifier">isnormal</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>
214 <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>
216 <span class="keyword">bool</span> <span class="identifier">isgreater</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>
217 <span class="keyword">bool</span> <span class="identifier">isgreaterequal</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>
218 <span class="keyword">bool</span> <span class="identifier">isless</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>
219 <span class="keyword">bool</span> <span class="identifier">islessequal</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>
220 <span class="keyword">bool</span> <span class="identifier">islessgreater</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>
221 <span class="keyword">bool</span> <span class="identifier">isunordered</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>
222 <span class="comment">// Complex number functions:</span>
223 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">real</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>
224 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">imag</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>
225 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">abs</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>
226 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">arg</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>
227 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">norm</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>
228 <span class="emphasis"><em>number</em></span> <span class="identifier">conj</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>
229 <span class="emphasis"><em>number</em></span> <span class="identifier">proj</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>
230 <span class="emphasis"><em>number</em></span> <span class="identifier">polar</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>
231 <span class="comment">// Misc other common C library functions:</span>
232 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">itrunc</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>
233 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ltrunc</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>
234 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lltrunc</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>
235 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">iround</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>
236 <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>
237 <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>
239 <span class="comment">// Traits support:</span>
240 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
241 <span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span>
242 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
243 <span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span>
244 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
245 <span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span>
246 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
247 <span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span>
249 <span class="comment">// Integer specific functions:</span>
250 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">gcd</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>
251 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lcm</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>
252 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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">unsigned</span><span class="special">);</span>
253 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">powm</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="identifier">b</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="identifier">p</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="identifier">m</span><span class="special">);</span>
254 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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>
255 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
256 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">></span> <span class="identifier">sqrt</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="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">>&);</span>
257 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
258 <span class="keyword">void</span> <span class="identifier">divide_qr</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="identifier">x</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="identifier">y</span><span class="special">,</span>
259 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span>
260 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span>
261 <span class="identifier">Integer</span> <span class="identifier">integer_modulus</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="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span> <span class="identifier">val</span><span class="special">);</span>
262 <span class="keyword">unsigned</span> <span class="identifier">lsb</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="identifier">x</span><span class="special">);</span>
263 <span class="keyword">unsigned</span> <span class="identifier">msb</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="identifier">x</span><span class="special">);</span>
264 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
265 <span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
266 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
267 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
268 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
269 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
270 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
271 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
272 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span>
273 <span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&</span> <span class="identifier">gen</span><span class="special">);</span>
274 <span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span>
276 <span class="comment">// Rational number support:</span>
277 <span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">numerator</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>
278 <span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">denominator</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>
280 <span class="special">}}</span> <span class="comment">// namespaces</span>
282 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span>
284 <span class="comment">// Boost.Math interoperability functions:</span>
285 <span class="keyword">int</span> <span class="identifier">fpclassify</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">int</span><span class="special">);</span>
286 <span class="keyword">bool</span> <span class="identifier">isfinite</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">int</span><span class="special">);</span>
287 <span class="keyword">bool</span> <span class="identifier">isnan</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">int</span><span class="special">);</span>
288 <span class="keyword">bool</span> <span class="identifier">isinf</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">int</span><span class="special">);</span>
289 <span class="keyword">bool</span> <span class="identifier">isnormal</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">int</span><span class="special">);</span>
291 <span class="special">}}</span> <span class="comment">// namespaces</span>
293 <span class="comment">// numeric_limits support:</span>
294 <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span>
296 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
297 <span class="keyword">struct</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">></span>
298 <span class="special">{</span>
299 <span class="comment">/* Usual members here */</span>
300 <span class="special">};</span>
302 <span class="special">}</span>
305 <a name="boost_multiprecision.ref.number.h1"></a>
306 <span class="phrase"><a name="boost_multiprecision.ref.number.description"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.description">Description</a>
308 <pre class="programlisting"><span class="keyword">enum</span> <span class="identifier">expression_template_option</span> <span class="special">{</span> <span class="identifier">et_on</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">et_off</span> <span class="special">=</span> <span class="number">0</span> <span class="special">};</span>
311 This enumerated type is used to specify whether expression templates are
312 turned on (et_on) or turned off (et_off).
314 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">expression_template_default</span>
315 <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_on</span><span class="special">;</span> <span class="special">};</span>
318 This traits class specifies the default expression template option to be
319 used with a particular Backend type. It defaults to <code class="computeroutput"><span class="identifier">et_on</span></code>.
321 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="identifier">expression_template_default</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>::</span><span class="identifier">value</span><span class="special">></span>
322 <span class="keyword">class</span> <span class="identifier">number</span><span class="special">;</span>
325 Class <code class="computeroutput"><span class="identifier">number</span></code> has two template
328 <div class="variablelist">
329 <p class="title"><b></b></p>
330 <dl class="variablelist">
331 <dt><span class="term">Backend</span></dt>
333 The actual arithmetic back-end that does all the work.
335 <dt><span class="term">ExpressionTemplates</span></dt>
337 A Boolean value: when <code class="computeroutput"><span class="identifier">et_on</span></code>,
338 then expression templates are enabled, otherwise when set to <code class="computeroutput"><span class="identifier">et_off</span></code> they are disabled. The default
339 for this parameter is computed via the traits class <code class="computeroutput"><span class="identifier">expression_template_default</span></code>
340 whose member <code class="computeroutput"><span class="identifier">value</span></code>
341 defaults to <code class="computeroutput"><span class="identifier">et_on</span></code> unless
342 the traits class is specialized for a particular backend.
346 <pre class="programlisting"><span class="identifier">number</span><span class="special">();</span>
347 <span class="identifier">number</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
348 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
349 <span class="identifier">number</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
352 Type <code class="computeroutput"><span class="identifier">number</span></code> is default constructible,
353 and both copy constructible and assignable from:
355 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
356 <li class="listitem">
359 <li class="listitem">
360 An expression template which is the result of one of the arithmetic operators.
362 <li class="listitem">
363 Any builtin arithmetic type, as long as the result would not be lossy
364 (for example float to integer conversion).
366 <li class="listitem">
367 Any type that the Backend is implicitly constructible or assignable from.
369 <li class="listitem">
370 An rvalue reference to another <code class="computeroutput"><span class="identifier">number</span></code>.
371 Move-semantics are used for construction if the backend also supports
372 rvalue reference construction. In the case of assignment, move semantics
373 are always supported when the argument is an rvalue reference irrespective
376 <li class="listitem">
377 Any type in the same family, as long as no loss of precision is involved.
378 For example from <code class="computeroutput"><span class="identifier">int128_t</span></code>
379 to <code class="computeroutput"><span class="identifier">int256_t</span></code>, or <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> to <code class="computeroutput"><span class="identifier">cpp_dec_float_100</span></code>.
383 Type <code class="computeroutput"><span class="identifier">number</span></code> is explicitly
386 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
387 <li class="listitem">
388 Any type mentioned above.
390 <li class="listitem">
391 A <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> or any type which is convertible
392 to <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>.
394 <li class="listitem">
395 Any arithmetic type (including those that would result in lossy conversions).
397 <li class="listitem">
398 Any type in the same family, including those that result in loss of precision.
400 <li class="listitem">
401 Any type that the Backend is explicitly constructible from.
403 <li class="listitem">
404 Any pair of types for which a generic interconversion exists: that is
405 from integer to integer, integer to rational, integer to float, rational
406 to rational, rational to float, or float to float.
410 The assign member function is available for any type for which an explicit
411 converting constructor exists. It is intended to be used where a temporary
412 generated from an explicit assignment would be expensive, for example:
414 <pre class="programlisting"><span class="identifier">mpfr_float_50</span> <span class="identifier">f50</span><span class="special">;</span>
415 <span class="identifier">mpfr_float_100</span> <span class="identifier">f100</span><span class="special">;</span>
417 <span class="identifier">f50</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">mpfr_float_50</span><span class="special">>(</span><span class="identifier">f100</span><span class="special">);</span> <span class="comment">// explicit cast create a temporary</span>
418 <span class="identifier">f50</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">f100</span><span class="special">);</span> <span class="comment">// explicit call to assign create no temporary</span>
421 In addition, if the type has multiple components (for example rational or
422 complex number types), then there is a two argument constructor:
424 <pre class="programlisting"><span class="identifier">number</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
427 Where the two args must either be arithmetic types, or types that are convertible
428 to the two components of <code class="computeroutput"><span class="keyword">this</span></code>.
431 Finally, when the type has a variable precision, then there are constructors:
433 <pre class="programlisting"><span class="identifier">number</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">precision</span><span class="special">);</span>
434 <span class="identifier">number</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="identifier">precision</span><span class="special">);</span>
437 Where <code class="computeroutput"><span class="identifier">precision</span></code> is an unsigned
438 value, the 2 arg version is active for scalar types and/or copy-construction
439 with specific precision, and the 3-arg version for complex types.
442 Likewise <code class="computeroutput"><span class="identifier">assign</span></code> has a 2-arg
443 overloaded, with the second argument being the precision.
445 <pre class="programlisting"><span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
446 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
447 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
448 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
449 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
450 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span>
451 <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
452 <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
453 <span class="comment">// Integer only operations:</span>
454 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
455 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">&=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
456 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
457 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
458 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
459 <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">>>=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
462 These operators all take their usual arithmetic meanings.
465 The arguments to these operators is either:
467 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
468 <li class="listitem">
469 Another <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span>
470 <span class="identifier">ExpressionTemplates</span><span class="special">></span></code>.
472 <li class="listitem">
473 An expression template derived from <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">></span></code>.
475 <li class="listitem">
476 Any type implicitly convertible to <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span></code>, including some other instance of
477 class <code class="computeroutput"><span class="identifier">number</span></code>.
481 For the left and right shift operations, the argument must be a builtin integer
482 type with a positive value (negative values result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
485 <pre class="programlisting"><span class="keyword">operator</span> <span class="emphasis"><em>convertible-to-bool-type</em></span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
488 Returns an <span class="emphasis"><em>unmentionable-type</em></span> that is usable in Boolean
489 contexts (this allows <code class="computeroutput"><span class="identifier">number</span></code>
490 to be used in any Boolean context - if statements, conditional statements,
491 or as an argument to a logical operator - without type <code class="computeroutput"><span class="identifier">number</span></code>
492 being convertible to type <code class="computeroutput"><span class="keyword">bool</span></code>.
495 This operator also enables the use of <code class="computeroutput"><span class="identifier">number</span></code>
496 with any of the following operators: <code class="computeroutput"><span class="special">!</span></code>,
497 <code class="computeroutput"><span class="special">||</span></code>, <code class="computeroutput"><span class="special">&&</span></code>
498 and <code class="computeroutput"><span class="special">?:</span></code>.
500 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&</span> <span class="identifier">other</span><span class="special">);</span>
503 Swaps <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
504 with <code class="computeroutput"><span class="identifier">other</span></code>.
506 <pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
509 Returns <code class="computeroutput"><span class="keyword">true</span></code> is <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is zero,
510 otherwise <code class="computeroutput"><span class="keyword">false</span></code>.
512 <pre class="programlisting"><span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
515 Returns a value less than zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is negative, a value greater than zero
516 if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
517 is positive, and zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
520 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">scientific</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
523 Returns the number formatted as a string, with at least <span class="emphasis"><em>precision</em></span>
524 digits, and in scientific format if <span class="emphasis"><em>scientific</em></span> is true.
526 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
527 <span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
529 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
530 <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="identifier">T</span> <span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
533 Provides a generic conversion mechanism to convert <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to type <code class="computeroutput"><span class="identifier">T</span></code>.
534 Type <code class="computeroutput"><span class="identifier">T</span></code> may be any arithmetic
535 type. Optionally other types may also be supported by specific <code class="computeroutput"><span class="identifier">Backend</span></code> types.
537 <pre class="programlisting"><span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span>
538 <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">default_precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
539 <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
540 <span class="keyword">void</span> <span class="identifier">precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
543 These functions are only available if the Backend template parameter supports
544 runtime changes to precision. They get and set the default precision and
545 the precision of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
548 <pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
549 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span>
550 <span class="keyword">typename</span> <span class="identifier">enable_if</span><span class="special"><</span><span class="identifier">is_convertible</span><span class="special"><</span><span class="identifier">V</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">int</span><span class="special">>::</span><span class="identifier">type</span>
551 <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">V</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
556 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
557 <li class="listitem">
558 A value less that 0 for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special"><</span> <span class="identifier">other</span></code>
560 <li class="listitem">
561 A value greater that 0 for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">></span> <span class="identifier">other</span></code>
563 <li class="listitem">
565 Zero for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span>
566 <span class="special">==</span> <span class="identifier">other</span></code>
568 <pre class="programlisting"><span class="identifier">value_type</span> <span class="identifier">real</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
569 <span class="identifier">value_type</span> <span class="identifier">imag</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
574 These return the real and imaginary parts respectively. If the number is
575 not a complex type, then the imaginary part is always zero.
577 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
578 <span class="keyword">void</span> <span class="identifier">real</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">val</span><span class="special">);</span>
579 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
580 <span class="keyword">void</span> <span class="identifier">imag</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">val</span><span class="special">);</span>
583 These set the real and imaginary parts respectively of the number. If the
584 number is not a complex type, then setting the real part is equivalent to
585 assignment, and attempting to set the imaginary part will result in a compile
588 <pre class="programlisting"><span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">();</span>
589 <span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
592 Returns the underlying back-end instance used by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
595 <a name="boost_multiprecision.ref.number.h2"></a>
596 <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_operators"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_operators">Non-member
599 <pre class="programlisting"><span class="comment">// Non member operators:</span>
600 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
601 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
602 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
603 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
604 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
605 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
606 <span class="comment">// Integer only operations:</span>
607 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
608 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
609 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
610 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
611 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special"><<(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
612 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">>>(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span>
613 <span class="comment">// Comparison operators:</span>
614 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
615 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
616 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
617 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
618 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
619 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span>
622 These operators all take their usual arithmetic meanings.
625 The arguments to these functions must contain at least one of the following:
627 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
628 <li class="listitem">
629 A <code class="computeroutput"><span class="identifier">number</span></code>.
631 <li class="listitem">
632 An expression template type derived from <code class="computeroutput"><span class="identifier">number</span></code>.
634 <li class="listitem">
635 Any type for which <code class="computeroutput"><span class="identifier">number</span></code>
636 has an implicit constructor - for example a builtin arithmetic type.
640 The return type of these operators is either:
642 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
643 <li class="listitem">
644 An <span class="emphasis"><em>unmentionable-type</em></span> expression template type when
645 <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code> is
646 <code class="computeroutput"><span class="keyword">true</span></code>.
648 <li class="listitem">
649 Type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span>
650 <span class="identifier">et_off</span><span class="special">></span></code>
651 when <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code>
652 is <code class="computeroutput"><span class="keyword">false</span></code>.
654 <li class="listitem">
655 Type <code class="computeroutput"><span class="keyword">bool</span></code> if the operator
656 is a comparison operator.
660 Finally note that the second argument to the left and right shift operations
661 must be a builtin integer type, and that the argument must be positive (negative
662 arguments result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
666 <a name="boost_multiprecision.ref.number.h3"></a>
667 <span class="phrase"><a name="boost_multiprecision.ref.number.swap"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.swap">swap</a>
669 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
670 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span>
673 Swaps <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>.
676 <a name="boost_multiprecision.ref.number.h4"></a>
677 <span class="phrase"><a name="boost_multiprecision.ref.number.iostream_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.iostream_support">Iostream
680 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
681 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span>
682 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Unspecified</span><span class="special">...></span>
683 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">unmentionable</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">&</span> <span class="identifier">r</span><span class="special">);</span>
684 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
685 <span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">>></span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">)</span>
688 These operators provided formatted input-output operations on <code class="computeroutput"><span class="identifier">number</span></code> types, and expression templates
692 It's down to the back-end type to actually implement string conversion. However,
693 the back-ends provided with this library support all of the iostream formatting
694 flags, field width and precision settings.
697 <a name="boost_multiprecision.ref.number.h5"></a>
698 <span class="phrase"><a name="boost_multiprecision.ref.number.arithmetic_with_a_higher_precisi"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.arithmetic_with_a_higher_precisi">Arithmetic
699 with a higher precision result</a>
701 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span>
702 <span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
704 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span>
705 <span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
707 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span>
708 <span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
711 These functions apply the named operator to the arguments <span class="emphasis"><em>a</em></span>
712 and <span class="emphasis"><em>b</em></span> and store the result in <span class="emphasis"><em>result</em></span>,
713 returning <span class="emphasis"><em>result</em></span>. In all cases they behave "as
714 if" arguments <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> were
715 first promoted to type <code class="computeroutput"><span class="identifier">ResultType</span></code>
716 before applying the operator, though particular backends may well avoid that
717 step by way of an optimization.
720 The type <code class="computeroutput"><span class="identifier">ResultType</span></code> must
721 be an instance of class <code class="computeroutput"><span class="identifier">number</span></code>,
722 and the types <code class="computeroutput"><span class="identifier">Source1</span></code> and
723 <code class="computeroutput"><span class="identifier">Source2</span></code> may be either instances
724 of class <code class="computeroutput"><span class="identifier">number</span></code> or native
725 integer types. The latter is an optimization that allows arithmetic to be
726 performed on native integer types producing an extended precision result.
729 <a name="boost_multiprecision.ref.number.h6"></a>
730 <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_standard_library_func"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_standard_library_func">Non-member
731 standard library function support</a>
733 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">abs</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>
734 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">acos</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>
735 <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>
736 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">asin</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>
737 <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>
738 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan</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>
739 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan2</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>
740 <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>
741 <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>
742 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ceil</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>
743 <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>
744 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cos</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>
745 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cosh</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>
746 <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>
747 <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>
748 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp</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>
749 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp2</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>
750 <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>
751 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fabs</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>
752 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fdim</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>
753 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">floor</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>
754 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fma</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span>
755 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmin</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>
756 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmax</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>
757 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmod</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>
758 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">frexp</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="emphasis"><em>integer-type</em></span><span class="special">*);</span>
759 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">hypot</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>
760 <span class="emphasis"><em>integer-type</em></span> <span class="identifier">ilogb</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>
761 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ldexp</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="emphasis"><em>integer-type</em></span><span class="special">);</span>
762 <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>
763 <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>
764 <span class="keyword">long</span> <span class="keyword">long</span> <span class="identifier">llround</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>
765 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log</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>
766 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log2</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>
767 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log10</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>
768 <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>
769 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">logb</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>
770 <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>
771 <span class="keyword">long</span> <span class="identifier">lround</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>
772 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">modf</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>
773 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">nearbyint</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>
774 <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>
775 <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>
776 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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>
777 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">remainder</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>
778 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">remquo</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> <span class="keyword">int</span><span class="special">*);</span>
779 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">rint</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>
780 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">round</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>
781 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbn</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="emphasis"><em>integer-type</em></span><span class="special">);</span>
782 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbln</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="emphasis"><em>integer-type</em></span><span class="special">);</span>
783 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sin</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>
784 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sinh</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>
785 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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>
786 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tan</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>
787 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tanh</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>
788 <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>
789 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">trunc</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>
791 <span class="keyword">int</span> <span class="identifier">fpclassify</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>
792 <span class="keyword">bool</span> <span class="identifier">isfinite</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>
793 <span class="keyword">bool</span> <span class="identifier">isinf</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>
794 <span class="keyword">bool</span> <span class="identifier">isnan</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>
795 <span class="keyword">bool</span> <span class="identifier">isnormal</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>
796 <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>
798 <span class="keyword">bool</span> <span class="identifier">isgreater</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>
799 <span class="keyword">bool</span> <span class="identifier">isgreaterequal</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>
800 <span class="keyword">bool</span> <span class="identifier">isless</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>
801 <span class="keyword">bool</span> <span class="identifier">islessequal</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>
802 <span class="keyword">bool</span> <span class="identifier">islessgreater</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>
803 <span class="keyword">bool</span> <span class="identifier">isunordered</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>
806 These functions all behave exactly as their standard library C++11 counterparts
807 do: their argument is either an instance of <code class="computeroutput"><span class="identifier">number</span></code>
808 or an expression template derived from it; If the argument is of type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">></span></code>
809 then that is also the return type, otherwise the return type is an expression
810 template unless otherwise stated.
813 The integer type arguments to <code class="computeroutput"><span class="identifier">ldexp</span></code>,
814 <code class="computeroutput"><span class="identifier">frexp</span></code>, <code class="computeroutput"><span class="identifier">scalbn</span></code>
815 and <code class="computeroutput"><span class="identifier">ilogb</span></code> may be either type
816 <code class="computeroutput"><span class="keyword">int</span></code>, or the actual type of the
817 exponent of the number type.
820 Complex number types support the following functions:
822 <pre class="programlisting"><span class="comment">// Complex number functions:</span>
823 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">real</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>
824 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">imag</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>
825 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">abs</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>
826 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">arg</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>
827 <span class="emphasis"><em>number<...>::value_type</em></span> <span class="identifier">norm</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>
828 <span class="emphasis"><em>number</em></span> <span class="identifier">conj</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>
829 <span class="emphasis"><em>number</em></span> <span class="identifier">proj</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>
830 <span class="emphasis"><em>number</em></span> <span class="identifier">polar</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>
833 In addition the functions <code class="computeroutput"><span class="identifier">real</span></code>,
834 <code class="computeroutput"><span class="identifier">imag</span></code>, <code class="computeroutput"><span class="identifier">arg</span></code>,
835 <code class="computeroutput"><span class="identifier">norm</span></code>, <code class="computeroutput"><span class="identifier">conj</span></code>
836 and <code class="computeroutput"><span class="identifier">proj</span></code> are overloaded for
837 scalar (ie non-complex) types in the same manner as <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code>
838 and treat the argument as a value whose imaginary part is zero.
841 There are also some functions implemented for compatibility with the Boost.Math
842 functions of the same name:
844 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">itrunc</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>
845 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ltrunc</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>
846 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lltrunc</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>
847 <span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">iround</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>
848 <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>
849 <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>
852 All these functions are normally implemented by the Backend type. However,
853 default versions are provided for Backend types that don't have native support
854 for these functions. Please note however, that this default support requires
855 the precision of the type to be a compile time constant - this means for
856 example that the <a href="http://gmplib.org" target="_top">GMP</a> MPF Backend will
857 not work with these functions when that type is used at variable precision.
860 Also note that with the exception of <code class="computeroutput"><span class="identifier">abs</span></code>
861 that these functions can only be used with floating-point Backend types (if
862 any other types such as fixed precision or complex types are added to the
863 library later, then these functions may be extended to support those number
867 The precision of these functions is generally determined by the backend implementation.
868 For example the precision of these functions when used with <a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float">mpfr_float</a>
869 is determined entirely by <a href="http://www.mpfr.org" target="_top">MPFR</a>.
870 When these functions use our own implementations, the accuracy of the transcendental
871 functions is generally a few epsilon. Note however, that the trigonometrical
872 functions incur the usual accuracy loss when reducing arguments by large
873 multiples of π. Also note that both <a class="link" href="../tut/floats/gmp_float.html" title="gmp_float">gmp_float</a>
874 and <a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a>
875 have a number of guard digits beyond their stated precision, so the error
876 rates listed for these are in some sense artificially low.
879 The following table shows the error rates we observe for these functions
880 with various backend types, functions not listed here are exact (tested on
881 Win32 with VC++10, MPFR-3.0.0, MPIR-2.1.1):
883 <div class="informaltable"><table class="table">
1141 1045eps<a href="#ftn.boost_multiprecision.ref.number.f0" class="footnote" name="boost_multiprecision.ref.number.f0"><sup class="footnote">[1]</sup></a>
1244 <tbody class="footnotes"><tr><td colspan="4"><div id="ftn.boost_multiprecision.ref.number.f0" class="footnote"><p><a href="#boost_multiprecision.ref.number.f0" class="para"><sup class="para">[1] </sup></a>
1245 It's likely that the inherent error in the input values to our
1246 test cases are to blame here.
1247 </p></div></td></tr></tbody>
1250 <a name="boost_multiprecision.ref.number.h7"></a>
1251 <span class="phrase"><a name="boost_multiprecision.ref.number.traits_class_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.traits_class_support">Traits Class
1254 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
1255 <span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span>
1258 If this is a type with multiple components (for example rational or complex
1259 types), then this trait has a single member <code class="computeroutput"><span class="identifier">type</span></code>
1260 that is the type of those components.
1262 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
1263 <span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span>
1266 A traits class that inherits from <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>
1267 where <code class="computeroutput"><span class="identifier">N</span></code> is one of the enumerated
1268 values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>,
1269 <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>,
1270 <code class="computeroutput"><span class="identifier">number_kind_rational</span></code>, <code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>, or <code class="computeroutput"><span class="identifier">number_kind_unknown</span></code>. This traits class
1271 is specialized for any type that has <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
1272 support as well as for classes in this library: which means it can be used
1273 for generic code that must work with built in arithmetic types as well as
1274 multiprecision ones.
1276 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
1277 <span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span>
1280 A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>
1281 if T is an instance of <code class="computeroutput"><span class="identifier">number</span><span class="special"><></span></code>, otherwise from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>.
1283 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
1284 <span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span>
1287 A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>
1288 if T is an expression template type derived from <code class="computeroutput"><span class="identifier">number</span><span class="special"><></span></code>, otherwise from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>.
1291 <a name="boost_multiprecision.ref.number.h8"></a>
1292 <span class="phrase"><a name="boost_multiprecision.ref.number.integer_functions"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.integer_functions">Integer
1296 In addition to functioning with types from this library, these functions
1297 are also overloaded for built in integer types if you include <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">integer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>.
1298 Further, when used with fixed precision types (whether built in integers
1299 or multiprecision ones), the functions will promote to a wider type internally
1300 when the algorithm requires it. Versions overloaded for built in integer
1301 types return that integer type rather than an expression template.
1303 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">gcd</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="identifier">a</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="identifier">b</span><span class="special">);</span>
1306 Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code>
1307 that divides both <code class="computeroutput"><span class="identifier">a</span></code> and
1308 <code class="computeroutput"><span class="identifier">b</span></code>.
1310 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lcm</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="identifier">a</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="identifier">b</span><span class="special">);</span>
1313 Returns the smallest integer <code class="computeroutput"><span class="identifier">x</span></code>
1314 that is divisible by both <code class="computeroutput"><span class="identifier">a</span></code>
1315 and <code class="computeroutput"><span class="identifier">b</span></code>.
1317 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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="identifier">b</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">p</span><span class="special">);</span>
1320 Returns <span class="emphasis"><em>b<sup>p</sup></em></span> as an expression template. Note that this
1321 function should be used with extreme care as the result can grow so large
1322 as to take "effectively forever" to compute, or else simply run
1323 the host machine out of memory. This is the one function in this category
1324 that is not overloaded for built in integer types, further, it's probably
1325 not a good idea to use it with fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s
1328 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">powm</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="identifier">b</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="identifier">p</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="identifier">m</span><span class="special">);</span>
1331 Returns <span class="emphasis"><em>b<sup>p</sup> mod m</em></span> as an expression template. Fixed precision
1332 types are promoted internally to ensure accuracy.
1334 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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="identifier">a</span><span class="special">);</span>
1337 Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code>
1338 such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span>
1339 <span class="identifier">x</span> <span class="special"><</span>
1340 <span class="identifier">a</span></code>.
1342 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1343 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">></span> <span class="identifier">sqrt</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="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span>
1346 Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code>
1347 such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span>
1348 <span class="identifier">x</span> <span class="special"><</span>
1349 <span class="identifier">a</span></code>, and sets the remainder <code class="computeroutput"><span class="identifier">r</span></code> such that <code class="computeroutput"><span class="identifier">r</span>
1350 <span class="special">=</span> <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">x</span> <span class="special">*</span>
1351 <span class="identifier">x</span></code>.
1353 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1354 <span class="keyword">void</span> <span class="identifier">divide_qr</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="identifier">x</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="identifier">y</span><span class="special">,</span>
1355 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span>
1358 Divides x by y and returns both the quotient and remainder. After the call
1359 <code class="computeroutput"><span class="identifier">q</span> <span class="special">=</span>
1360 <span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code> and <code class="computeroutput"><span class="identifier">r</span>
1361 <span class="special">=</span> <span class="identifier">x</span> <span class="special">%</span> <span class="identifier">y</span></code>.
1363 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span>
1364 <span class="identifier">Integer</span> <span class="identifier">integer_modulus</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="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span> <span class="identifier">val</span><span class="special">);</span>
1367 Returns the absolute value of <code class="computeroutput"><span class="identifier">x</span>
1368 <span class="special">%</span> <span class="identifier">val</span></code>.
1370 <pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">lsb</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="identifier">x</span><span class="special">);</span>
1373 Returns the (zero-based) index of the least significant bit that is set to
1377 Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> if the argument is <= 0.
1379 <pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">msb</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="identifier">x</span><span class="special">);</span>
1382 Returns the (zero-based) index of the most significant bit.
1385 Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> if the argument is <= 0.
1387 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1388 <span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
1391 Returns <code class="computeroutput"><span class="keyword">true</span></code> if the bit at
1392 <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span> is set.
1394 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1395 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
1398 Sets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, and
1399 returns <span class="emphasis"><em>val</em></span>.
1401 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1402 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
1405 Unsets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>,
1406 and returns <span class="emphasis"><em>val</em></span>.
1408 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1409 <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
1412 Flips the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>,
1413 and returns <span class="emphasis"><em>val</em></span>.
1415 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span>
1416 <span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&</span> <span class="identifier">gen</span><span class="special">);</span>
1417 <span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span>
1420 Tests to see if the number <span class="emphasis"><em>n</em></span> is probably prime - the
1421 test excludes the vast majority of composite numbers by excluding small prime
1422 factors and performing a single Fermat test. Then performs <span class="emphasis"><em>trials</em></span>
1423 Miller-Rabin tests. Returns <code class="computeroutput"><span class="keyword">false</span></code>
1424 if <span class="emphasis"><em>n</em></span> is definitely composite, or <code class="computeroutput"><span class="keyword">true</span></code>
1425 if <span class="emphasis"><em>n</em></span> is probably prime with the probability of it being
1426 composite less than 0.25^trials. Fixed precision types are promoted internally
1430 <a name="boost_multiprecision.ref.number.h9"></a>
1431 <span class="phrase"><a name="boost_multiprecision.ref.number.rational_number_functions"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.rational_number_functions">Rational
1432 Number Functions</a>
1434 <pre class="programlisting"><span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">numerator</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>
1435 <span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">denominator</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>
1438 These functions return the numerator and denominator of a rational number
1442 <a name="boost_multiprecision.ref.number.h10"></a>
1443 <span class="phrase"><a name="boost_multiprecision.ref.number.boost_math_interoperability_supp"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.boost_math_interoperability_supp">Boost.Math
1444 Interoperability Support</a>
1446 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span>
1448 <span class="keyword">int</span> <span class="identifier">fpclassify</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">int</span><span class="special">);</span>
1449 <span class="keyword">bool</span> <span class="identifier">isfinite</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">int</span><span class="special">);</span>
1450 <span class="keyword">bool</span> <span class="identifier">isnan</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">int</span><span class="special">);</span>
1451 <span class="keyword">bool</span> <span class="identifier">isinf</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">int</span><span class="special">);</span>
1452 <span class="keyword">bool</span> <span class="identifier">isnormal</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">int</span><span class="special">);</span>
1454 <span class="special">}}</span> <span class="comment">// namespaces</span>
1457 These floating-point classification functions behave exactly as their Boost.Math
1461 Other Boost.Math functions and templates may also be specialized or overloaded
1462 to ensure interoperability.
1465 <a name="boost_multiprecision.ref.number.h11"></a>
1466 <span class="phrase"><a name="boost_multiprecision.ref.number.std_numeric_limits_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.std_numeric_limits_support">std::numeric_limits
1469 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span>
1471 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
1472 <span class="keyword">struct</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">></span>
1473 <span class="special">{</span>
1474 <span class="comment">/* Usual members here */</span>
1475 <span class="special">};</span>
1477 <span class="special">}</span>
1480 Class template <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> is specialized for all instantiations
1481 of <code class="computeroutput"><span class="identifier">number</span></code> whose precision
1482 is known at compile time, plus those types whose precision is unlimited (though
1483 it is much less useful in those cases). It is not specialized for types whose
1484 precision can vary at compile time (such as <code class="computeroutput"><span class="identifier">mpf_float</span></code>).
1487 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1488 <td align="left"></td>
1489 <td align="right"><div class="copyright-footer">Copyright © 2002-2019 John Maddock
1490 and Christopher Kormanyos<p>
1491 Distributed under the Boost Software License, Version 1.0. (See accompanying
1492 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>)
1497 <div class="spirit-nav">
1498 <a accesskey="p" href="../ref.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="cpp_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>