]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | <html> |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> | |
4 | <title>number</title> | |
5 | <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> | |
6 | <meta name="generator" content="DocBook XSL Stylesheets V1.77.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"> | |
11 | </head> | |
12 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
13 | <table cellpadding="2" width="100%"><tr> | |
14 | <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> | |
15 | <td align="center"><a href="../../../../../../index.html">Home</a></td> | |
16 | <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> | |
17 | <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> | |
18 | <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> | |
19 | <td align="center"><a href="../../../../../../more/index.htm">More</a></td> | |
20 | </tr></table> | |
21 | <hr> | |
22 | <div class="spirit-nav"> | |
23 | <a accesskey="p" href="../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> | |
24 | </div> | |
25 | <div class="section"> | |
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> | |
29 | <h5> | |
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> | |
32 | </h5> | |
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> | |
34 | ||
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> | |
36 | ||
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> | |
39 | ||
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="identifier">number</span><span class="special">();</span> | |
44 | <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> | |
45 | <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> | |
46 | <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> | |
47 | ||
48 | <span class="comment">// Member operators</span> | |
49 | <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> | |
50 | <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> | |
51 | <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> | |
52 | <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> | |
53 | <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> | |
54 | <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span> | |
55 | <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> | |
56 | <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span> | |
57 | ||
58 | <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> | |
59 | <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> | |
60 | <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> | |
61 | <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> | |
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>integer-type</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>integer-type</em></span><span class="special">&);</span> | |
64 | ||
65 | <span class="comment">// Use in Boolean context:</span> | |
66 | <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> | |
67 | <span class="comment">// swap:</span> | |
68 | <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> | |
69 | <span class="comment">// Sign:</span> | |
70 | <span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> | |
71 | <span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> | |
72 | <span class="comment">// string conversion:</span> | |
73 | <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> | |
74 | <span class="comment">// Generic conversion mechanism</span> | |
75 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
76 | <span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> | |
77 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
78 | <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> | |
79 | <span class="comment">// precision control:</span> | |
80 | <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span> | |
81 | <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> | |
82 | <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> | |
83 | <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> | |
84 | <span class="comment">// Comparison:</span> | |
85 | <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> | |
86 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span> | |
87 | <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> | |
88 | <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> | |
89 | <span class="comment">// Access to the underlying implementation:</span> | |
90 | <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">();</span> | |
91 | <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> | |
92 | <span class="special">};</span> | |
93 | ||
94 | <span class="comment">// Non member operators:</span> | |
95 | <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> | |
96 | <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> | |
97 | <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> | |
98 | <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> | |
99 | <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> | |
100 | <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> | |
101 | <span class="comment">// Integer only operations:</span> | |
102 | <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> | |
103 | <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> | |
104 | <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> | |
105 | <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> | |
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> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</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> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> | |
108 | <span class="comment">// Comparison operators:</span> | |
109 | <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> | |
110 | <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> | |
111 | <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> | |
112 | <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> | |
113 | <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> | |
114 | <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> | |
115 | ||
116 | <span class="comment">// Swap:</span> | |
117 | <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> | |
118 | <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> | |
119 | ||
120 | <span class="comment">// iostream support:</span> | |
121 | <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> | |
122 | <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> | |
123 | <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> | |
124 | <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> | |
125 | <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> | |
126 | ||
127 | <span class="comment">// Arithmetic with a higher precision result:</span> | |
128 | <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> | |
129 | <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> | |
130 | <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> | |
131 | <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> | |
132 | <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> | |
133 | <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> | |
134 | ||
135 | <span class="comment">// min and max overloads:</span> | |
136 | <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> | |
137 | <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> | |
138 | ||
139 | <span class="comment">// C99 Non-member function standard library support:</span> | |
140 | <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> | |
141 | <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> | |
142 | <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> | |
143 | <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> | |
144 | <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> | |
145 | <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> | |
146 | <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> | |
147 | <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> | |
148 | <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> | |
149 | <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> | |
150 | <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> | |
151 | <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> | |
152 | <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> | |
153 | <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> | |
154 | <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> | |
155 | <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> | |
156 | <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> | |
157 | <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> | |
158 | <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> | |
159 | <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> | |
160 | <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> | |
161 | <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> | |
162 | <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> | |
163 | <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> | |
164 | <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> | |
165 | <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> | |
166 | <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> | |
167 | <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> | |
168 | <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> | |
169 | <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> | |
170 | <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> | |
171 | <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> | |
172 | <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> | |
173 | <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> | |
174 | <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> | |
175 | <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> | |
176 | <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> | |
177 | <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> | |
178 | <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> | |
179 | <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> | |
180 | <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> | |
181 | <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> | |
182 | <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> | |
183 | <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> | |
184 | <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> | |
185 | <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> | |
186 | <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> | |
187 | <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> | |
188 | <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> | |
189 | <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> | |
190 | <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> | |
191 | <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> | |
192 | <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> | |
193 | <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> | |
194 | <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> | |
195 | <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> | |
196 | <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> | |
197 | ||
198 | <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> | |
199 | <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> | |
200 | <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> | |
201 | <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> | |
202 | <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> | |
203 | <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> | |
204 | ||
205 | <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> | |
206 | <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> | |
207 | <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> | |
208 | <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> | |
209 | <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> | |
210 | <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> | |
211 | <span class="comment">// Misc other common C library functions:</span> | |
212 | <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> | |
213 | <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> | |
214 | <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> | |
215 | <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> | |
216 | <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> | |
217 | <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> | |
218 | ||
219 | <span class="comment">// Traits support:</span> | |
220 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
221 | <span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span> | |
222 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
223 | <span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span> | |
224 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
225 | <span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span> | |
226 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
227 | <span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span> | |
228 | ||
229 | <span class="comment">// Integer specific functions:</span> | |
230 | <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> | |
231 | <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> | |
232 | <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> | |
233 | <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> | |
234 | <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> | |
235 | <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> | |
236 | <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> | |
237 | <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> | |
238 | <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> | |
239 | <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> | |
240 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> | |
241 | <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> | |
242 | <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> | |
243 | <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> | |
244 | <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> | |
245 | <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> | |
246 | <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> | |
247 | <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> | |
248 | <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> | |
249 | <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> | |
250 | <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> | |
251 | <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> | |
252 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span> | |
253 | <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> | |
254 | <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> | |
255 | ||
256 | <span class="comment">// Rational number support:</span> | |
257 | <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> | |
258 | <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> | |
259 | ||
260 | <span class="special">}}</span> <span class="comment">// namespaces</span> | |
261 | ||
262 | <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> | |
263 | ||
264 | <span class="comment">// Boost.Math interoperability functions:</span> | |
265 | <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> | |
266 | <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> | |
267 | <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> | |
268 | <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> | |
269 | <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> | |
270 | ||
271 | <span class="special">}}</span> <span class="comment">// namespaces</span> | |
272 | ||
273 | <span class="comment">// numeric_limits support:</span> | |
274 | <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span> | |
275 | ||
276 | <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> | |
277 | <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> | |
278 | <span class="special">{</span> | |
279 | <span class="comment">/* Usual members here */</span> | |
280 | <span class="special">};</span> | |
281 | ||
282 | <span class="special">}</span> | |
283 | </pre> | |
284 | <h5> | |
285 | <a name="boost_multiprecision.ref.number.h1"></a> | |
286 | <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> | |
287 | </h5> | |
288 | <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> | |
289 | </pre> | |
290 | <p> | |
291 | This enumerated type is used to specify whether expression templates are | |
292 | turned on (et_on) or turned off (et_off). | |
293 | </p> | |
294 | <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> | |
295 | <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> | |
296 | </pre> | |
297 | <p> | |
298 | This traits class specifies the default expression template option to be | |
299 | used with a particular Backend type. It defaults to <code class="computeroutput"><span class="identifier">et_on</span></code>. | |
300 | </p> | |
301 | <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> | |
302 | <span class="keyword">class</span> <span class="identifier">number</span><span class="special">;</span> | |
303 | </pre> | |
304 | <p> | |
305 | Class <code class="computeroutput"><span class="identifier">number</span></code> has two template | |
306 | arguments: | |
307 | </p> | |
308 | <div class="variablelist"> | |
309 | <p class="title"><b></b></p> | |
310 | <dl class="variablelist"> | |
311 | <dt><span class="term">Backend</span></dt> | |
312 | <dd><p> | |
313 | The actual arithmetic back-end that does all the work. | |
314 | </p></dd> | |
315 | <dt><span class="term">ExpressionTemplates</span></dt> | |
316 | <dd><p> | |
317 | A Boolean value: when <code class="computeroutput"><span class="identifier">et_on</span></code>, | |
318 | then expression templates are enabled, otherwise when set to <code class="computeroutput"><span class="identifier">et_off</span></code> they are disabled. The default | |
319 | for this parameter is computed via the traits class <code class="computeroutput"><span class="identifier">expression_template_default</span></code> | |
320 | whose member <code class="computeroutput"><span class="identifier">value</span></code> | |
321 | defaults to <code class="computeroutput"><span class="identifier">et_on</span></code> unless | |
322 | the traits class is specialized for a particular backend. | |
323 | </p></dd> | |
324 | </dl> | |
325 | </div> | |
326 | <pre class="programlisting"><span class="identifier">number</span><span class="special">();</span> | |
327 | <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> | |
328 | <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> | |
329 | <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> | |
330 | </pre> | |
331 | <p> | |
332 | Type <code class="computeroutput"><span class="identifier">number</span></code> is default constructible, | |
333 | and both copy constructible and assignable from: | |
334 | </p> | |
335 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
336 | <li class="listitem"> | |
337 | Itself. | |
338 | </li> | |
339 | <li class="listitem"> | |
340 | An expression template which is the result of one of the arithmetic operators. | |
341 | </li> | |
342 | <li class="listitem"> | |
343 | Any builtin arithmetic type, as long as the result would not be lossy | |
344 | (for example float to integer conversion). | |
345 | </li> | |
346 | <li class="listitem"> | |
347 | Any type that the Backend is implicitly constructible or assignable from. | |
348 | </li> | |
349 | <li class="listitem"> | |
350 | An rvalue reference to another <code class="computeroutput"><span class="identifier">number</span></code>. | |
351 | Move-semantics are used for construction if the backend also supports | |
352 | rvalue reference construction. In the case of assignment, move semantics | |
353 | are always supported when the argument is an rvalue reference irrespective | |
354 | of the backend. | |
355 | </li> | |
356 | <li class="listitem"> | |
357 | Any type in the same family, as long as no loss of precision is involved. | |
358 | For example from <code class="computeroutput"><span class="identifier">int128_t</span></code> | |
359 | 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>. | |
360 | </li> | |
361 | </ul></div> | |
362 | <p> | |
363 | Type <code class="computeroutput"><span class="identifier">number</span></code> is explicitly | |
364 | constructible from: | |
365 | </p> | |
366 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
367 | <li class="listitem"> | |
368 | Any type mentioned above. | |
369 | </li> | |
370 | <li class="listitem"> | |
371 | 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 | |
372 | to <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>. | |
373 | </li> | |
374 | <li class="listitem"> | |
375 | Any arithmetic type (including those that would result in lossy conversions). | |
376 | </li> | |
377 | <li class="listitem"> | |
378 | Any type in the same family, including those that result in loss of precision. | |
379 | </li> | |
380 | <li class="listitem"> | |
381 | Any type that the Backend is explicitly constructible from. | |
382 | </li> | |
383 | <li class="listitem"> | |
384 | Any pair of types for which a generic interconversion exists: that is | |
385 | from integer to integer, integer to rational, integer to float, rational | |
386 | to rational, rational to float, or float to float. | |
387 | </li> | |
388 | </ul></div> | |
389 | <p> | |
390 | The assign member function is available for any type for which an explicit | |
391 | converting constructor exists. It is intended to be used where a temporary | |
392 | generated from an explicit assignment would be expensive, for example: | |
393 | </p> | |
394 | <pre class="programlisting"><span class="identifier">mpfr_float_50</span> <span class="identifier">f50</span><span class="special">;</span> | |
395 | <span class="identifier">mpfr_float_100</span> <span class="identifier">f100</span><span class="special">;</span> | |
396 | ||
397 | <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> | |
398 | <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> | |
399 | </pre> | |
400 | <p> | |
401 | In addition, if the type has multiple components (for example rational or | |
402 | complex number types), then there is a two argument constructor: | |
403 | </p> | |
404 | <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> | |
405 | </pre> | |
406 | <p> | |
407 | Where the two args must either be arithmetic types, or types that are convertible | |
408 | to the two components of <code class="computeroutput"><span class="keyword">this</span></code>. | |
409 | </p> | |
410 | <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> | |
411 | <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> | |
412 | <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> | |
413 | <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> | |
414 | <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> | |
415 | <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span> | |
416 | <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> | |
417 | <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span> | |
418 | <span class="comment">// Integer only operations:</span> | |
419 | <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> | |
420 | <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> | |
421 | <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> | |
422 | <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> | |
423 | <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> | |
424 | <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> | |
425 | </pre> | |
426 | <p> | |
427 | These operators all take their usual arithmetic meanings. | |
428 | </p> | |
429 | <p> | |
430 | The arguments to these operators is either: | |
431 | </p> | |
432 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
433 | <li class="listitem"> | |
434 | Another <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> | |
435 | <span class="identifier">ExpressionTemplates</span><span class="special">></span></code>. | |
436 | </li> | |
437 | <li class="listitem"> | |
438 | 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>. | |
439 | </li> | |
440 | <li class="listitem"> | |
441 | 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 | |
442 | class <code class="computeroutput"><span class="identifier">number</span></code>. | |
443 | </li> | |
444 | </ul></div> | |
445 | <p> | |
446 | For the left and right shift operations, the argument must be a builtin integer | |
447 | 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> | |
448 | being thrown). | |
449 | </p> | |
450 | <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> | |
451 | </pre> | |
452 | <p> | |
453 | Returns an <span class="emphasis"><em>unmentionable-type</em></span> that is usable in Boolean | |
454 | contexts (this allows <code class="computeroutput"><span class="identifier">number</span></code> | |
455 | to be used in any Boolean context - if statements, conditional statements, | |
456 | or as an argument to a logical operator - without type <code class="computeroutput"><span class="identifier">number</span></code> | |
457 | being convertible to type <code class="computeroutput"><span class="keyword">bool</span></code>. | |
458 | </p> | |
459 | <p> | |
460 | This operator also enables the use of <code class="computeroutput"><span class="identifier">number</span></code> | |
461 | with any of the following operators: <code class="computeroutput"><span class="special">!</span></code>, | |
462 | <code class="computeroutput"><span class="special">||</span></code>, <code class="computeroutput"><span class="special">&&</span></code> | |
463 | and <code class="computeroutput"><span class="special">?:</span></code>. | |
464 | </p> | |
465 | <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> | |
466 | </pre> | |
467 | <p> | |
468 | Swaps <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> | |
469 | with <code class="computeroutput"><span class="identifier">other</span></code>. | |
470 | </p> | |
471 | <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> | |
472 | </pre> | |
473 | <p> | |
474 | 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, | |
475 | otherwise <code class="computeroutput"><span class="keyword">false</span></code>. | |
476 | </p> | |
477 | <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> | |
478 | </pre> | |
479 | <p> | |
480 | 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 | |
481 | if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> | |
482 | is positive, and zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> | |
483 | is zero. | |
484 | </p> | |
485 | <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> | |
486 | </pre> | |
487 | <p> | |
488 | Returns the number formatted as a string, with at least <span class="emphasis"><em>precision</em></span> | |
489 | digits, and in scientific format if <span class="emphasis"><em>scientific</em></span> is true. | |
490 | </p> | |
491 | <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> | |
492 | <span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> | |
493 | ||
494 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> | |
495 | <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> | |
496 | </pre> | |
497 | <p> | |
498 | 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>. | |
499 | Type <code class="computeroutput"><span class="identifier">T</span></code> may be any arithmetic | |
500 | type. Optionally other types may also be supported by specific <code class="computeroutput"><span class="identifier">Backend</span></code> types. | |
501 | </p> | |
502 | <pre class="programlisting"><span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span> | |
503 | <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> | |
504 | <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> | |
505 | <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> | |
506 | </pre> | |
507 | <p> | |
508 | These functions are only available if the Backend template parameter supports | |
509 | runtime changes to precision. They get and set the default precision and | |
510 | the precision of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> | |
511 | respectively. | |
512 | </p> | |
513 | <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> | |
514 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span> | |
515 | <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> | |
516 | <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> | |
517 | </pre> | |
518 | <p> | |
519 | Returns: | |
520 | </p> | |
521 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
522 | <li class="listitem"> | |
523 | 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> | |
524 | </li> | |
525 | <li class="listitem"> | |
526 | 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> | |
527 | </li> | |
528 | <li class="listitem"> | |
529 | <p class="simpara"> | |
530 | Zero for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> | |
531 | <span class="special">==</span> <span class="identifier">other</span></code> | |
532 | </p> | |
533 | <pre class="programlisting"><span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">();</span> | |
534 | <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> | |
535 | </pre> | |
536 | </li> | |
537 | </ul></div> | |
538 | <p> | |
539 | Returns the underlying back-end instance used by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. | |
540 | </p> | |
541 | <h5> | |
542 | <a name="boost_multiprecision.ref.number.h2"></a> | |
543 | <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 | |
544 | operators</a> | |
545 | </h5> | |
546 | <pre class="programlisting"><span class="comment">// Non member operators:</span> | |
547 | <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> | |
548 | <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> | |
549 | <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> | |
550 | <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> | |
551 | <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> | |
552 | <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> | |
553 | <span class="comment">// Integer only operations:</span> | |
554 | <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> | |
555 | <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> | |
556 | <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> | |
557 | <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> | |
558 | <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> | |
559 | <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> | |
560 | <span class="comment">// Comparison operators:</span> | |
561 | <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> | |
562 | <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> | |
563 | <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> | |
564 | <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> | |
565 | <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> | |
566 | <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> | |
567 | </pre> | |
568 | <p> | |
569 | These operators all take their usual arithmetic meanings. | |
570 | </p> | |
571 | <p> | |
572 | The arguments to these functions must contain at least one of the following: | |
573 | </p> | |
574 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
575 | <li class="listitem"> | |
576 | A <code class="computeroutput"><span class="identifier">number</span></code>. | |
577 | </li> | |
578 | <li class="listitem"> | |
579 | An expression template type derived from <code class="computeroutput"><span class="identifier">number</span></code>. | |
580 | </li> | |
581 | <li class="listitem"> | |
582 | Any type for which <code class="computeroutput"><span class="identifier">number</span></code> | |
583 | has an implicit constructor - for example a builtin arithmetic type. | |
584 | </li> | |
585 | </ul></div> | |
586 | <p> | |
587 | The return type of these operators is either: | |
588 | </p> | |
589 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
590 | <li class="listitem"> | |
591 | An <span class="emphasis"><em>unmentionable-type</em></span> expression template type when | |
592 | <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code> is | |
593 | <code class="computeroutput"><span class="keyword">true</span></code>. | |
594 | </li> | |
595 | <li class="listitem"> | |
596 | Type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> | |
597 | <span class="identifier">et_off</span><span class="special">></span></code> | |
598 | when <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code> | |
599 | is <code class="computeroutput"><span class="keyword">false</span></code>. | |
600 | </li> | |
601 | <li class="listitem"> | |
602 | Type <code class="computeroutput"><span class="keyword">bool</span></code> if the operator | |
603 | is a comparison operator. | |
604 | </li> | |
605 | </ul></div> | |
606 | <p> | |
607 | Finally note that the second argument to the left and right shift operations | |
608 | must be a builtin integer type, and that the argument must be positive (negative | |
609 | arguments result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> | |
610 | being thrown). | |
611 | </p> | |
612 | <h5> | |
613 | <a name="boost_multiprecision.ref.number.h3"></a> | |
614 | <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> | |
615 | </h5> | |
616 | <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> | |
617 | <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> | |
618 | </pre> | |
619 | <p> | |
620 | Swaps <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>. | |
621 | </p> | |
622 | <h5> | |
623 | <a name="boost_multiprecision.ref.number.h4"></a> | |
624 | <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 | |
625 | Support</a> | |
626 | </h5> | |
627 | <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> | |
628 | <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> | |
629 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Unspecified</span><span class="special">...></span> | |
630 | <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> | |
631 | <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> | |
632 | <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> | |
633 | </pre> | |
634 | <p> | |
635 | These operators provided formatted input-output operations on <code class="computeroutput"><span class="identifier">number</span></code> types, and expression templates | |
636 | derived from them. | |
637 | </p> | |
638 | <p> | |
639 | It's down to the back-end type to actually implement string conversion. However, | |
640 | the back-ends provided with this library support all of the iostream formatting | |
641 | flags, field width and precision settings. | |
642 | </p> | |
643 | <h5> | |
644 | <a name="boost_multiprecision.ref.number.h5"></a> | |
645 | <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 | |
646 | with a higher precision result</a> | |
647 | </h5> | |
648 | <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> | |
649 | <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> | |
650 | ||
651 | <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> | |
652 | <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> | |
653 | ||
654 | <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> | |
655 | <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> | |
656 | </pre> | |
657 | <p> | |
658 | These functions apply the named operator to the arguments <span class="emphasis"><em>a</em></span> | |
659 | and <span class="emphasis"><em>b</em></span> and store the result in <span class="emphasis"><em>result</em></span>, | |
660 | returning <span class="emphasis"><em>result</em></span>. In all cases they behave "as | |
661 | if" arguments <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> were | |
662 | first promoted to type <code class="computeroutput"><span class="identifier">ResultType</span></code> | |
663 | before applying the operator, though particular backends may well avoid that | |
664 | step by way of an optimization. | |
665 | </p> | |
666 | <p> | |
667 | The type <code class="computeroutput"><span class="identifier">ResultType</span></code> must | |
668 | be an instance of class <code class="computeroutput"><span class="identifier">number</span></code>, | |
669 | and the types <code class="computeroutput"><span class="identifier">Source1</span></code> and | |
670 | <code class="computeroutput"><span class="identifier">Source2</span></code> may be either instances | |
671 | of class <code class="computeroutput"><span class="identifier">number</span></code> or native | |
672 | integer types. The latter is an optimization that allows arithmetic to be | |
673 | performed on native integer types producing an extended precision result. | |
674 | </p> | |
675 | <h5> | |
676 | <a name="boost_multiprecision.ref.number.h6"></a> | |
677 | <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 | |
678 | standard library function support</a> | |
679 | </h5> | |
680 | <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> | |
681 | <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> | |
682 | <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> | |
683 | <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> | |
684 | <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> | |
685 | <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> | |
686 | <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> | |
687 | <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> | |
688 | <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> | |
689 | <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> | |
690 | <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> | |
691 | <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> | |
692 | <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> | |
693 | <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> | |
694 | <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> | |
695 | <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> | |
696 | <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> | |
697 | <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> | |
698 | <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> | |
699 | <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> | |
700 | <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> | |
701 | <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> | |
702 | <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> | |
703 | <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> | |
704 | <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> | |
705 | <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> | |
706 | <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> | |
707 | <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> | |
708 | <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> | |
709 | <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> | |
710 | <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> | |
711 | <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> | |
712 | <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> | |
713 | <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> | |
714 | <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> | |
715 | <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> | |
716 | <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> | |
717 | <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> | |
718 | <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> | |
719 | <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> | |
720 | <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> | |
721 | <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> | |
722 | <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> | |
723 | <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> | |
724 | <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> | |
725 | <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> | |
726 | <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> | |
727 | <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> | |
728 | <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> | |
729 | <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> | |
730 | <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> | |
731 | <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> | |
732 | <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> | |
733 | <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> | |
734 | <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> | |
735 | <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> | |
736 | <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> | |
737 | ||
738 | <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> | |
739 | <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> | |
740 | <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> | |
741 | <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> | |
742 | <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> | |
743 | <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> | |
744 | ||
745 | <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> | |
746 | <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> | |
747 | <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> | |
748 | <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> | |
749 | <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> | |
750 | <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> | |
751 | </pre> | |
752 | <p> | |
753 | These functions all behave exactly as their standard library C++11 counterparts | |
754 | do: their argument is either an instance of <code class="computeroutput"><span class="identifier">number</span></code> | |
755 | 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> | |
756 | then that is also the return type, otherwise the return type is an expression | |
757 | template unless otherwise stated. | |
758 | </p> | |
759 | <p> | |
760 | The integer type arguments to <code class="computeroutput"><span class="identifier">ldexp</span></code>, | |
761 | <code class="computeroutput"><span class="identifier">frexp</span></code>, <code class="computeroutput"><span class="identifier">scalbn</span></code> | |
762 | and <code class="computeroutput"><span class="identifier">ilogb</span></code> may be either type | |
763 | <code class="computeroutput"><span class="keyword">int</span></code>, or the actual type of the | |
764 | exponent of the number type. | |
765 | </p> | |
766 | <p> | |
767 | There are also some functions implemented for compatibility with the Boost.Math | |
768 | functions of the same name: | |
769 | </p> | |
770 | <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> | |
771 | <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> | |
772 | <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> | |
773 | <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> | |
774 | <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> | |
775 | <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> | |
776 | </pre> | |
777 | <p> | |
778 | All these functions are normally implemented by the Backend type. However, | |
779 | default versions are provided for Backend types that don't have native support | |
780 | for these functions. Please note however, that this default support requires | |
781 | the precision of the type to be a compile time constant - this means for | |
782 | example that the <a href="http://gmplib.org" target="_top">GMP</a> MPF Backend will | |
783 | not work with these functions when that type is used at variable precision. | |
784 | </p> | |
785 | <p> | |
786 | Also note that with the exception of <code class="computeroutput"><span class="identifier">abs</span></code> | |
787 | that these functions can only be used with floating-point Backend types (if | |
788 | any other types such as fixed precision or complex types are added to the | |
789 | library later, then these functions may be extended to support those number | |
790 | types). | |
791 | </p> | |
792 | <p> | |
793 | The precision of these functions is generally determined by the backend implementation. | |
794 | 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> | |
795 | is determined entirely by <a href="http://www.mpfr.org" target="_top">MPFR</a>. | |
796 | When these functions use our own implementations, the accuracy of the transcendental | |
797 | functions is generally a few epsilon. Note however, that the trigonometrical | |
798 | functions incur the usual accuracy loss when reducing arguments by large | |
799 | multiples of π. Also note that both <a class="link" href="../tut/floats/gmp_float.html" title="gmp_float">gmp_float</a> | |
800 | and <a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a> | |
801 | have a number of guard digits beyond their stated precision, so the error | |
802 | rates listed for these are in some sense artificially low. | |
803 | </p> | |
804 | <p> | |
805 | The following table shows the error rates we observe for these functions | |
806 | with various backend types, functions not listed here are exact (tested on | |
807 | Win32 with VC++10, MPFR-3.0.0, MPIR-2.1.1): | |
808 | </p> | |
809 | <div class="informaltable"><table class="table"> | |
810 | <colgroup> | |
811 | <col> | |
812 | <col> | |
813 | <col> | |
814 | <col> | |
815 | </colgroup> | |
816 | <thead><tr> | |
817 | <th> | |
818 | <p> | |
819 | Function | |
820 | </p> | |
821 | </th> | |
822 | <th> | |
823 | <p> | |
824 | mpfr_float_50 | |
825 | </p> | |
826 | </th> | |
827 | <th> | |
828 | <p> | |
829 | mpf_float_50 | |
830 | </p> | |
831 | </th> | |
832 | <th> | |
833 | <p> | |
834 | cpp_dec_float_50 | |
835 | </p> | |
836 | </th> | |
837 | </tr></thead> | |
838 | <tbody> | |
839 | <tr> | |
840 | <td> | |
841 | <p> | |
842 | sqrt | |
843 | </p> | |
844 | </td> | |
845 | <td> | |
846 | <p> | |
847 | 1eps | |
848 | </p> | |
849 | </td> | |
850 | <td> | |
851 | <p> | |
852 | 0eps | |
853 | </p> | |
854 | </td> | |
855 | <td> | |
856 | <p> | |
857 | 0eps | |
858 | </p> | |
859 | </td> | |
860 | </tr> | |
861 | <tr> | |
862 | <td> | |
863 | <p> | |
864 | exp | |
865 | </p> | |
866 | </td> | |
867 | <td> | |
868 | <p> | |
869 | 1eps | |
870 | </p> | |
871 | </td> | |
872 | <td> | |
873 | <p> | |
874 | 0eps | |
875 | </p> | |
876 | </td> | |
877 | <td> | |
878 | <p> | |
879 | 0eps | |
880 | </p> | |
881 | </td> | |
882 | </tr> | |
883 | <tr> | |
884 | <td> | |
885 | <p> | |
886 | log | |
887 | </p> | |
888 | </td> | |
889 | <td> | |
890 | <p> | |
891 | 1eps | |
892 | </p> | |
893 | </td> | |
894 | <td> | |
895 | <p> | |
896 | 0eps | |
897 | </p> | |
898 | </td> | |
899 | <td> | |
900 | <p> | |
901 | 0eps | |
902 | </p> | |
903 | </td> | |
904 | </tr> | |
905 | <tr> | |
906 | <td> | |
907 | <p> | |
908 | log10 | |
909 | </p> | |
910 | </td> | |
911 | <td> | |
912 | <p> | |
913 | 1eps | |
914 | </p> | |
915 | </td> | |
916 | <td> | |
917 | <p> | |
918 | 0eps | |
919 | </p> | |
920 | </td> | |
921 | <td> | |
922 | <p> | |
923 | 0eps | |
924 | </p> | |
925 | </td> | |
926 | </tr> | |
927 | <tr> | |
928 | <td> | |
929 | <p> | |
930 | cos | |
931 | </p> | |
932 | </td> | |
933 | <td> | |
934 | <p> | |
935 | 700eps | |
936 | </p> | |
937 | </td> | |
938 | <td> | |
939 | <p> | |
940 | 0eps | |
941 | </p> | |
942 | </td> | |
943 | <td> | |
944 | <p> | |
945 | 0eps | |
946 | </p> | |
947 | </td> | |
948 | </tr> | |
949 | <tr> | |
950 | <td> | |
951 | <p> | |
952 | sin | |
953 | </p> | |
954 | </td> | |
955 | <td> | |
956 | <p> | |
957 | 1eps | |
958 | </p> | |
959 | </td> | |
960 | <td> | |
961 | <p> | |
962 | 0eps | |
963 | </p> | |
964 | </td> | |
965 | <td> | |
966 | <p> | |
967 | 0eps | |
968 | </p> | |
969 | </td> | |
970 | </tr> | |
971 | <tr> | |
972 | <td> | |
973 | <p> | |
974 | tan | |
975 | </p> | |
976 | </td> | |
977 | <td> | |
978 | <p> | |
979 | 0eps | |
980 | </p> | |
981 | </td> | |
982 | <td> | |
983 | <p> | |
984 | 0eps | |
985 | </p> | |
986 | </td> | |
987 | <td> | |
988 | <p> | |
989 | 0eps | |
990 | </p> | |
991 | </td> | |
992 | </tr> | |
993 | <tr> | |
994 | <td> | |
995 | <p> | |
996 | acos | |
997 | </p> | |
998 | </td> | |
999 | <td> | |
1000 | <p> | |
1001 | 0eps | |
1002 | </p> | |
1003 | </td> | |
1004 | <td> | |
1005 | <p> | |
1006 | 0eps | |
1007 | </p> | |
1008 | </td> | |
1009 | <td> | |
1010 | <p> | |
1011 | 0eps | |
1012 | </p> | |
1013 | </td> | |
1014 | </tr> | |
1015 | <tr> | |
1016 | <td> | |
1017 | <p> | |
1018 | asin | |
1019 | </p> | |
1020 | </td> | |
1021 | <td> | |
1022 | <p> | |
1023 | 0eps | |
1024 | </p> | |
1025 | </td> | |
1026 | <td> | |
1027 | <p> | |
1028 | 0eps | |
1029 | </p> | |
1030 | </td> | |
1031 | <td> | |
1032 | <p> | |
1033 | 0eps | |
1034 | </p> | |
1035 | </td> | |
1036 | </tr> | |
1037 | <tr> | |
1038 | <td> | |
1039 | <p> | |
1040 | atan | |
1041 | </p> | |
1042 | </td> | |
1043 | <td> | |
1044 | <p> | |
1045 | 1eps | |
1046 | </p> | |
1047 | </td> | |
1048 | <td> | |
1049 | <p> | |
1050 | 0eps | |
1051 | </p> | |
1052 | </td> | |
1053 | <td> | |
1054 | <p> | |
1055 | 0eps | |
1056 | </p> | |
1057 | </td> | |
1058 | </tr> | |
1059 | <tr> | |
1060 | <td> | |
1061 | <p> | |
1062 | cosh | |
1063 | </p> | |
1064 | </td> | |
1065 | <td> | |
1066 | <p> | |
1067 | 1045eps<a href="#ftn.boost_multiprecision.ref.number.f0" class="footnote"><sup class="footnote"><a name="boost_multiprecision.ref.number.f0"></a>[1]</sup></a> | |
1068 | </p> | |
1069 | </td> | |
1070 | <td> | |
1071 | <p> | |
1072 | 0eps | |
1073 | </p> | |
1074 | </td> | |
1075 | <td> | |
1076 | <p> | |
1077 | 0eps | |
1078 | </p> | |
1079 | </td> | |
1080 | </tr> | |
1081 | <tr> | |
1082 | <td> | |
1083 | <p> | |
1084 | sinh | |
1085 | </p> | |
1086 | </td> | |
1087 | <td> | |
1088 | <p> | |
1089 | 2eps | |
1090 | </p> | |
1091 | </td> | |
1092 | <td> | |
1093 | <p> | |
1094 | 0eps | |
1095 | </p> | |
1096 | </td> | |
1097 | <td> | |
1098 | <p> | |
1099 | 0eps | |
1100 | </p> | |
1101 | </td> | |
1102 | </tr> | |
1103 | <tr> | |
1104 | <td> | |
1105 | <p> | |
1106 | tanh | |
1107 | </p> | |
1108 | </td> | |
1109 | <td> | |
1110 | <p> | |
1111 | 1eps | |
1112 | </p> | |
1113 | </td> | |
1114 | <td> | |
1115 | <p> | |
1116 | 0eps | |
1117 | </p> | |
1118 | </td> | |
1119 | <td> | |
1120 | <p> | |
1121 | 0eps | |
1122 | </p> | |
1123 | </td> | |
1124 | </tr> | |
1125 | <tr> | |
1126 | <td> | |
1127 | <p> | |
1128 | pow | |
1129 | </p> | |
1130 | </td> | |
1131 | <td> | |
1132 | <p> | |
1133 | 0eps | |
1134 | </p> | |
1135 | </td> | |
1136 | <td> | |
1137 | <p> | |
1138 | 4eps | |
1139 | </p> | |
1140 | </td> | |
1141 | <td> | |
1142 | <p> | |
1143 | 3eps | |
1144 | </p> | |
1145 | </td> | |
1146 | </tr> | |
1147 | <tr> | |
1148 | <td> | |
1149 | <p> | |
1150 | atan2 | |
1151 | </p> | |
1152 | </td> | |
1153 | <td> | |
1154 | <p> | |
1155 | 1eps | |
1156 | </p> | |
1157 | </td> | |
1158 | <td> | |
1159 | <p> | |
1160 | 0eps | |
1161 | </p> | |
1162 | </td> | |
1163 | <td> | |
1164 | <p> | |
1165 | 0eps | |
1166 | </p> | |
1167 | </td> | |
1168 | </tr> | |
1169 | </tbody> | |
1170 | <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> | |
1171 | It's likely that the inherent error in the input values to our | |
1172 | test cases are to blame here. | |
1173 | </p></div></td></tr></tbody> | |
1174 | </table></div> | |
1175 | <h5> | |
1176 | <a name="boost_multiprecision.ref.number.h7"></a> | |
1177 | <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 | |
1178 | Support</a> | |
1179 | </h5> | |
1180 | <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> | |
1181 | <span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span> | |
1182 | </pre> | |
1183 | <p> | |
1184 | If this is a type with multiple components (for example rational or complex | |
1185 | types), then this trait has a single member <code class="computeroutput"><span class="identifier">type</span></code> | |
1186 | that is the type of those components. | |
1187 | </p> | |
1188 | <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> | |
1189 | <span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span> | |
1190 | </pre> | |
1191 | <p> | |
1192 | 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> | |
1193 | where <code class="computeroutput"><span class="identifier">N</span></code> is one of the enumerated | |
1194 | values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>, | |
1195 | <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>, | |
1196 | <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 | |
1197 | 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> | |
1198 | support as well as for classes in this library: which means it can be used | |
1199 | for generic code that must work with built in arithmetic types as well as | |
1200 | multiprecision ones. | |
1201 | </p> | |
1202 | <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> | |
1203 | <span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span> | |
1204 | </pre> | |
1205 | <p> | |
1206 | A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> | |
1207 | 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>. | |
1208 | </p> | |
1209 | <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> | |
1210 | <span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span> | |
1211 | </pre> | |
1212 | <p> | |
1213 | A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> | |
1214 | 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>. | |
1215 | </p> | |
1216 | <h5> | |
1217 | <a name="boost_multiprecision.ref.number.h8"></a> | |
1218 | <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 | |
1219 | functions</a> | |
1220 | </h5> | |
1221 | <p> | |
1222 | In addition to functioning with types from this library, these functions | |
1223 | 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>. | |
1224 | Further, when used with fixed precision types (whether built in integers | |
1225 | or multiprecision ones), the functions will promote to a wider type internally | |
1226 | when the algorithm requires it. Versions overloaded for built in integer | |
1227 | types return that integer type rather than an expression template. | |
1228 | </p> | |
1229 | <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> | |
1230 | </pre> | |
1231 | <p> | |
1232 | Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code> | |
1233 | that divides both <code class="computeroutput"><span class="identifier">a</span></code> and | |
1234 | <code class="computeroutput"><span class="identifier">b</span></code>. | |
1235 | </p> | |
1236 | <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> | |
1237 | </pre> | |
1238 | <p> | |
1239 | Returns the smallest integer <code class="computeroutput"><span class="identifier">x</span></code> | |
1240 | that is divisible by both <code class="computeroutput"><span class="identifier">a</span></code> | |
1241 | and <code class="computeroutput"><span class="identifier">b</span></code>. | |
1242 | </p> | |
1243 | <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> | |
1244 | </pre> | |
1245 | <p> | |
1246 | Returns <span class="emphasis"><em>b<sup>p</sup></em></span> as an expression template. Note that this | |
1247 | function should be used with extreme care as the result can grow so large | |
1248 | as to take "effectively forever" to compute, or else simply run | |
1249 | the host machine out of memory. This is the one function in this category | |
1250 | that is not overloaded for built in integer types, further, it's probably | |
1251 | not a good idea to use it with fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s | |
1252 | either. | |
1253 | </p> | |
1254 | <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> | |
1255 | </pre> | |
1256 | <p> | |
1257 | Returns <span class="emphasis"><em>b<sup>p</sup> mod m</em></span> as an expression template. Fixed precision | |
1258 | types are promoted internally to ensure accuracy. | |
1259 | </p> | |
1260 | <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> | |
1261 | </pre> | |
1262 | <p> | |
1263 | Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code> | |
1264 | such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span> | |
1265 | <span class="identifier">x</span> <span class="special"><</span> | |
1266 | <span class="identifier">a</span></code>. | |
1267 | </p> | |
1268 | <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> | |
1269 | <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> | |
1270 | </pre> | |
1271 | <p> | |
1272 | Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code> | |
1273 | such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span> | |
1274 | <span class="identifier">x</span> <span class="special"><</span> | |
1275 | <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> | |
1276 | <span class="special">=</span> <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">x</span> <span class="special">*</span> | |
1277 | <span class="identifier">x</span></code>. | |
1278 | </p> | |
1279 | <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> | |
1280 | <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> | |
1281 | <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> | |
1282 | </pre> | |
1283 | <p> | |
1284 | Divides x by y and returns both the quotient and remainder. After the call | |
1285 | <code class="computeroutput"><span class="identifier">q</span> <span class="special">=</span> | |
1286 | <span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code> and <code class="computeroutput"><span class="identifier">r</span> | |
1287 | <span class="special">=</span> <span class="identifier">x</span> <span class="special">%</span> <span class="identifier">y</span></code>. | |
1288 | </p> | |
1289 | <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> | |
1290 | <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> | |
1291 | </pre> | |
1292 | <p> | |
1293 | Returns the absolute value of <code class="computeroutput"><span class="identifier">x</span> | |
1294 | <span class="special">%</span> <span class="identifier">val</span></code>. | |
1295 | </p> | |
1296 | <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> | |
1297 | </pre> | |
1298 | <p> | |
1299 | Returns the (zero-based) index of the least significant bit that is set to | |
1300 | 1. | |
1301 | </p> | |
1302 | <p> | |
1303 | 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. | |
1304 | </p> | |
1305 | <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> | |
1306 | </pre> | |
1307 | <p> | |
1308 | Returns the (zero-based) index of the most significant bit. | |
1309 | </p> | |
1310 | <p> | |
1311 | 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. | |
1312 | </p> | |
1313 | <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> | |
1314 | <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> | |
1315 | </pre> | |
1316 | <p> | |
1317 | Returns <code class="computeroutput"><span class="keyword">true</span></code> if the bit at | |
1318 | <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span> is set. | |
1319 | </p> | |
1320 | <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> | |
1321 | <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> | |
1322 | </pre> | |
1323 | <p> | |
1324 | Sets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, and | |
1325 | returns <span class="emphasis"><em>val</em></span>. | |
1326 | </p> | |
1327 | <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> | |
1328 | <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> | |
1329 | </pre> | |
1330 | <p> | |
1331 | Unsets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, | |
1332 | and returns <span class="emphasis"><em>val</em></span>. | |
1333 | </p> | |
1334 | <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> | |
1335 | <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> | |
1336 | </pre> | |
1337 | <p> | |
1338 | Flips the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, | |
1339 | and returns <span class="emphasis"><em>val</em></span>. | |
1340 | </p> | |
1341 | <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> | |
1342 | <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> | |
1343 | <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> | |
1344 | </pre> | |
1345 | <p> | |
1346 | Tests to see if the number <span class="emphasis"><em>n</em></span> is probably prime - the | |
1347 | test excludes the vast majority of composite numbers by excluding small prime | |
1348 | factors and performing a single Fermat test. Then performs <span class="emphasis"><em>trials</em></span> | |
1349 | Miller-Rabin tests. Returns <code class="computeroutput"><span class="keyword">false</span></code> | |
1350 | if <span class="emphasis"><em>n</em></span> is definitely composite, or <code class="computeroutput"><span class="keyword">true</span></code> | |
1351 | if <span class="emphasis"><em>n</em></span> is probably prime with the probability of it being | |
1352 | composite less than 0.25^trials. Fixed precision types are promoted internally | |
1353 | to ensure accuracy. | |
1354 | </p> | |
1355 | <h5> | |
1356 | <a name="boost_multiprecision.ref.number.h9"></a> | |
1357 | <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 | |
1358 | Number Functions</a> | |
1359 | </h5> | |
1360 | <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> | |
1361 | <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> | |
1362 | </pre> | |
1363 | <p> | |
1364 | These functions return the numerator and denominator of a rational number | |
1365 | respectively. | |
1366 | </p> | |
1367 | <h5> | |
1368 | <a name="boost_multiprecision.ref.number.h10"></a> | |
1369 | <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 | |
1370 | Interoperability Support</a> | |
1371 | </h5> | |
1372 | <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> | |
1373 | ||
1374 | <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> | |
1375 | <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> | |
1376 | <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> | |
1377 | <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> | |
1378 | <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> | |
1379 | ||
1380 | <span class="special">}}</span> <span class="comment">// namespaces</span> | |
1381 | </pre> | |
1382 | <p> | |
1383 | These floating-point classification functions behave exactly as their Boost.Math | |
1384 | equivalents. | |
1385 | </p> | |
1386 | <p> | |
1387 | Other Boost.Math functions and templates may also be specialized or overloaded | |
1388 | to ensure interoperability. | |
1389 | </p> | |
1390 | <h5> | |
1391 | <a name="boost_multiprecision.ref.number.h11"></a> | |
1392 | <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 | |
1393 | support</a> | |
1394 | </h5> | |
1395 | <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span> | |
1396 | ||
1397 | <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> | |
1398 | <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> | |
1399 | <span class="special">{</span> | |
1400 | <span class="comment">/* Usual members here */</span> | |
1401 | <span class="special">};</span> | |
1402 | ||
1403 | <span class="special">}</span> | |
1404 | </pre> | |
1405 | <p> | |
1406 | 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 | |
1407 | of <code class="computeroutput"><span class="identifier">number</span></code> whose precision | |
1408 | is known at compile time, plus those types whose precision is unlimited (though | |
1409 | it is much less useful in those cases). It is not specialized for types whose | |
1410 | precision can vary at compile time (such as <code class="computeroutput"><span class="identifier">mpf_float</span></code>). | |
1411 | </p> | |
1412 | </div> | |
1413 | <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> | |
1414 | <td align="left"></td> | |
1415 | <td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> | |
1416 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
1417 | 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>) | |
1418 | </p> | |
1419 | </div></td> | |
1420 | </tr></table> | |
1421 | <hr> | |
1422 | <div class="spirit-nav"> | |
1423 | <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> | |
1424 | </div> | |
1425 | </body> | |
1426 | </html> |