3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Polynomials
</title>
5 <link rel=
"stylesheet" href=
"../../math.css" type=
"text/css">
6 <meta name=
"generator" content=
"DocBook XSL Stylesheets V1.77.1">
7 <link rel=
"home" href=
"../../index.html" title=
"Math Toolkit 2.5.1">
8 <link rel=
"up" href=
"../roots.html" title=
"Root finding">
9 <link rel=
"prev" href=
"root_comparison/elliptic_comparison.html" title=
"Comparison of Elliptic Integral Root Finding Algoritghms">
10 <link rel=
"next" href=
"rational.html" title=
"Polynomial and Rational Function Evaluation">
12 <body bgcolor=
"white" text=
"black" link=
"#0000FF" vlink=
"#840084" alink=
"#0000FF">
13 <table cellpadding=
"2" width=
"100%"><tr>
14 <td valign=
"top"><img alt=
"Boost C++ Libraries" width=
"277" height=
"86" src=
"../../../../../../boost.png"></td>
15 <td align=
"center"><a href=
"../../../../../../index.html">Home
</a></td>
16 <td align=
"center"><a href=
"../../../../../../libs/libraries.htm">Libraries
</a></td>
17 <td align=
"center"><a href=
"http://www.boost.org/users/people.html">People
</a></td>
18 <td align=
"center"><a href=
"http://www.boost.org/users/faq.html">FAQ
</a></td>
19 <td align=
"center"><a href=
"../../../../../../more/index.htm">More
</a></td>
22 <div class=
"spirit-nav">
23 <a accesskey=
"p" href=
"root_comparison/elliptic_comparison.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../roots.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=
"rational.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>
26 <div class=
"titlepage"><div><div><h3 class=
"title">
27 <a name=
"math_toolkit.roots.polynomials"></a><a class=
"link" href=
"polynomials.html" title=
"Polynomials">Polynomials
</a>
28 </h3></div></div></div>
30 <a name=
"math_toolkit.roots.polynomials.h0"></a>
31 <span class=
"phrase"><a name=
"math_toolkit.roots.polynomials.synopsis"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.roots.polynomials.synopsis">Synopsis
</a>
33 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">math
</span><span class=
"special">/
</span><span class=
"identifier">tools
</span><span class=
"special">/
</span><span class=
"identifier">polynomial
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
35 <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>
36 <span class=
"keyword">namespace
</span> <span class=
"identifier">tools
</span> <span class=
"special">{
</span>
38 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
39 <span class=
"keyword">class
</span> <span class=
"identifier">polynomial
</span>
40 <span class=
"special">{
</span>
41 <span class=
"keyword">public
</span><span class=
"special">:
</span>
42 <span class=
"comment">// typedefs:
</span>
43 <span class=
"keyword">typedef
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value_type
</span> <span class=
"identifier">value_type
</span><span class=
"special">;
</span>
44 <span class=
"keyword">typedef
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">size_type
</span> <span class=
"identifier">size_type
</span><span class=
"special">;
</span>
46 <span class=
"comment">// construct:
</span>
47 <span class=
"identifier">polynomial
</span><span class=
"special">(){}
</span>
48 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
49 <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">*
</span> <span class=
"identifier">data
</span><span class=
"special">,
</span> <span class=
"keyword">unsigned
</span> <span class=
"identifier">order
</span><span class=
"special">);
</span>
50 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">I
</span><span class=
"special">></span>
51 <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"identifier">I
</span> <span class=
"identifier">first
</span><span class=
"special">,
</span> <span class=
"identifier">I
</span> <span class=
"identifier">last
</span><span class=
"special">);
</span>
52 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
53 <span class=
"keyword">explicit
</span> <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">point
</span><span class=
"special">);
</span>
54 <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">initializer_list
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">l
</span><span class=
"special">);
</span> <span class=
"comment">// C++
11</span>
56 <span class=
"comment">// access:
</span>
57 <span class=
"identifier">size_type
</span> <span class=
"identifier">size
</span><span class=
"special">()
</span><span class=
"keyword">const
</span><span class=
"special">;
</span>
58 <span class=
"identifier">size_type
</span> <span class=
"identifier">degree
</span><span class=
"special">()
</span><span class=
"keyword">const
</span><span class=
"special">;
</span>
59 <span class=
"identifier">value_type
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">[](
</span><span class=
"identifier">size_type
</span> <span class=
"identifier">i
</span><span class=
"special">);
</span>
60 <span class=
"keyword">const
</span> <span class=
"identifier">value_type
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">[](
</span><span class=
"identifier">size_type
</span> <span class=
"identifier">i
</span><span class=
"special">)
</span><span class=
"keyword">const
</span><span class=
"special">;
</span>
61 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">data
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span><span class=
"special">;
</span>
62 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">data
</span><span class=
"special">();
</span>
63 <span class=
"keyword">explicit
</span> <span class=
"keyword">operator
</span> <span class=
"keyword">bool
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span><span class=
"special">;
</span>
65 <span class=
"comment">// modify:
</span>
66 <span class=
"keyword">void
</span> <span class=
"identifier">set_zero
</span><span class=
"special">();
</span>
68 <span class=
"comment">// operators:
</span>
69 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
70 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">+=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
71 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
72 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">-=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
73 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
74 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">*=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
75 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
76 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">/=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
77 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
78 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">%=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
79 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
80 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">+=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
81 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
82 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">-=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
83 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
84 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">*=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
85 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
86 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">/=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
87 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
88 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">%=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
89 <span class=
"special">};
</span>
91 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
92 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">+
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
93 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
94 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
95 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
96 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">*
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
97 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
98 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">/
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
99 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
100 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">%
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
102 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
103 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">+
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
104 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
105 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
106 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
107 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">*
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
108 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
109 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">/
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
110 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
111 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">%
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
113 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
114 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">+
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
115 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
116 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
117 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
118 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">*
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
120 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
121 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
123 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
124 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">>>=
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
125 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
126 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">>></span> <span class=
"special">(
</span><span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"special">&</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
127 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
128 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special"><<=
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
129 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
130 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special"><<</span> <span class=
"special">(
</span><span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"special">&</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</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">T
</span><span class=
"special">></span>
133 <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=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">b
</span><span class=
"special">);
</span>
134 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
135 <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=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">b
</span><span class=
"special">);
</span>
137 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
138 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">pow
</span><span class=
"special">(
</span><span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">base
</span><span class=
"special">,
</span> <span class=
"keyword">int
</span> <span class=
"identifier">exp
</span><span class=
"special">);
</span>
140 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">charT
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">traits
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
141 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">basic_ostream
</span><span class=
"special"><</span><span class=
"identifier">charT
</span><span class=
"special">,
</span> <span class=
"identifier">traits
</span><span class=
"special">>&</span> <span class=
"keyword">operator
</span> <span class=
"special"><<</span>
142 <span class=
"special">(
</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">basic_ostream
</span><span class=
"special"><</span><span class=
"identifier">charT
</span><span class=
"special">,
</span> <span class=
"identifier">traits
</span><span class=
"special">>&</span> <span class=
"identifier">os
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">poly
</span><span class=
"special">);
</span>
144 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">typename
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
145 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">pair
</span><span class=
"special"><</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>,
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">></span>
146 <span class=
"identifier">quotient_remainder
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
148 <span class=
"special">}
</span> <span class=
"comment">// namespace tools
</span>
149 <span class=
"special">}}
</span> <span class=
"comment">// namespace boost { namespace math
</span>
152 <a name=
"math_toolkit.roots.polynomials.h1"></a>
153 <span class=
"phrase"><a name=
"math_toolkit.roots.polynomials.description"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.roots.polynomials.description">Description
</a>
156 This is a somewhat trivial class for polynomial manipulation.
161 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
162 <li class=
"listitem">
163 <a href=
"https://en.wikipedia.org/wiki/Polynomial" target=
"_top">Polynomial
</a>
166 <li class=
"listitem">
167 Donald E. Knuth, The Art of Computer Programming: Volume
2, Third edition,
168 (
1998) Chapter
4.6.1, Algorithm D: Division of polynomials over a field.
172 Implementation is currently of the
"naive" variety, with
𝑶(N
<sup>2</sup>) multiplication,
173 for example. This class should not be used in high-performance computing
174 environments: it is intended for the simple manipulation of small polynomials,
175 typically generated for special function approximation.
178 It does has division for polynomials over a
<a href=
"https://en.wikipedia.org/wiki/Field_%28mathematics%29" target=
"_top">field
</a>
179 (here floating point, complex, etc) and over a unique factorization domain
180 (integers). Division of polynomials over a field is compatible with
<a href=
"https://en.wikipedia.org/wiki/Euclidean_algorithm" target=
"_top">Euclidean GCD
</a>.
183 Advanced manipulations: the FFT, factorisation etc are not currently provided.
184 Submissions for these are of course welcome :-)
187 <a name=
"math_toolkit.roots.polynomials.h2"></a>
188 <span class=
"phrase"><a name=
"math_toolkit.roots.polynomials.polynomial_examples"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.roots.polynomials.polynomial_examples">Polynomial
189 Arithmetic Examples
</a>
192 First include the essential polynomial header (and others) to make the example:
194 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">math
</span><span class=
"special">/
</span><span class=
"identifier">tools
</span><span class=
"special">/
</span><span class=
"identifier">polynomial
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
197 and some using statements are convenient:
199 <pre class=
"programlisting"><span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">string
</span><span class=
"special">;
</span>
200 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">exception
</span><span class=
"special">;
</span>
201 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span><span class=
"special">;
</span>
202 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">abs
</span><span class=
"special">;
</span>
203 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">pair
</span><span class=
"special">;
</span>
205 <span class=
"keyword">using
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">math
</span><span class=
"special">;
</span>
206 <span class=
"keyword">using
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">math
</span><span class=
"special">::
</span><span class=
"identifier">tools
</span><span class=
"special">;
</span> <span class=
"comment">// for polynomial
</span>
207 <span class=
"keyword">using
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">lexical_cast
</span><span class=
"special">;
</span>
210 Store the coefficients in a convenient way to access them, then create some
211 polynomials using construction from an iterator range, and finally output
212 in a 'pretty' formula format.
214 <div class=
"tip"><table border=
"0" summary=
"Tip">
216 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Tip]" src=
"../../../../../../doc/src/images/tip.png"></td>
217 <th align=
"left">Tip
</th>
219 <tr><td align=
"left" valign=
"top"><p>
220 Although we might conventionally write a polynomial from left to right
221 in descending order of degree, Boost.Math stores in
<span class=
"bold"><strong>ascending
222 order of degree
</strong></span>.
225 <pre class=
"programlisting"><span class=
"identifier">Read
</span><span class=
"special">/
</span><span class=
"identifier">write
</span> <span class=
"keyword">for
</span> <span class=
"identifier">humans
</span><span class=
"special">:
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">6</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">10</span>
226 <span class=
"identifier">Boost
</span> <span class=
"identifier">polynomial
</span> <span class=
"identifier">storage
</span><span class=
"special">:
</span> <span class=
"special">[
</span> <span class=
"number">10</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">6</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">4</span><span class=
"special">,
</span> <span class=
"number">3</span> <span class=
"special">]
</span>
228 <pre class=
"programlisting"><span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">array
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">,
</span> <span class=
"number">4</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">d3a
</span> <span class=
"special">=
</span> <span class=
"special">{{
</span><span class=
"number">10</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">6</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">4</span><span class=
"special">,
</span> <span class=
"number">3</span><span class=
"special">}};
</span>
229 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">a
</span><span class=
"special">(
</span><span class=
"identifier">d3a
</span><span class=
"special">.
</span><span class=
"identifier">begin
</span><span class=
"special">(),
</span> <span class=
"identifier">d3a
</span><span class=
"special">.
</span><span class=
"identifier">end
</span><span class=
"special">());
</span>
231 <span class=
"comment">// With C++
11 and later, you can also use initializer_list construction.
</span>
232 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">b
</span><span class=
"special">{{-
</span><span class=
"number">2.0</span><span class=
"special">,
</span> <span class=
"number">1.0</span><span class=
"special">}};
</span>
234 <span class=
"comment">// formula_format() converts from Boost storage to human notation.
</span>
235 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span>
236 <span class=
"special"><<</span> <span class=
"string">"\nb = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">b
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n\n"</span><span class=
"special">;
</span>
241 <pre class=
"programlisting"><span class=
"identifier">a
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">6</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">10</span>
242 <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"identifier">x
</span> <span class=
"special">-
</span> <span class=
"number">2</span>
244 <pre class=
"programlisting"><span class=
"comment">// Now we can do arithmetic with the usual infix operators: + - * / and %.
</span>
245 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">s
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">+
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
246 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a + b = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">s
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
247 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">d
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">-
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
248 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a - b = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">d
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
249 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">p
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">*
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
250 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a * b = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">p
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
251 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">q
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">/
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
252 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a / b = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">q
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
253 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">r
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">%
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
254 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a % b = "</span> <span class=
"special"><<</span> <span class=
"identifier">formula_format
</span><span class=
"special">(
</span><span class=
"identifier">r
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
259 <pre class=
"programlisting"><span class=
"identifier">a
</span> <span class=
"special">+
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">5</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">8</span>
260 <span class=
"identifier">a
</span> <span class=
"special">-
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">7</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">12</span>
261 <span class=
"identifier">a
</span> <span class=
"special">*
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">4</span> <span class=
"special">-
</span> <span class=
"number">10</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">+
</span> <span class=
"number">2</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">+
</span> <span class=
"number">22</span><span class=
"identifier">x
</span> <span class=
"special">-
</span> <span class=
"number">20</span>
262 <span class=
"identifier">a
</span> <span class=
"special">/
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">+
</span> <span class=
"number">2</span><span class=
"identifier">x
</span> <span class=
"special">-
</span> <span class=
"number">2</span>
263 <span class=
"identifier">a
</span> <span class=
"special">%
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">6</span>
266 <a name=
"math_toolkit.roots.polynomials.h3"></a>
267 <span class=
"phrase"><a name=
"math_toolkit.roots.polynomials.division_quotient_and_remainder"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.roots.polynomials.division_quotient_and_remainder">Division,
268 Quotient and Remainder
</a>
271 Division is a special case where you can calculate two for the price of one.
274 Actually, quotient and remainder are always calculated together due to the
275 nature of the algorithm: the infix operators return one result and throw
279 If you are doing a lot of division and want both the quotient and remainder,
280 then you don't want to do twice the work necessary.
283 In that case you can call the underlying function,
<code class=
"literal">quotient_remainder
</code>,
284 to get both results together as a pair.
286 <pre class=
"programlisting"> <span class=
"identifier">pair
</span><span class=
"special"><</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">>,
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">result
</span><span class=
"special">;
</span>
287 <span class=
"identifier">result
</span> <span class=
"special">=
</span> <span class=
"identifier">quotient_remainder
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
288 <span class=
"comment">// Reassure ourselves that the result is the same.
</span>
289 <span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">(
</span><span class=
"identifier">result
</span><span class=
"special">.
</span><span class=
"identifier">first
</span> <span class=
"special">==
</span> <span class=
"identifier">q
</span><span class=
"special">);
</span>
290 <span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">(
</span><span class=
"identifier">result
</span><span class=
"special">.
</span><span class=
"identifier">second
</span> <span class=
"special">==
</span> <span class=
"identifier">r
</span><span class=
"special">);
</span>
293 The source code is at
<a href=
"../../../../example/polynomial_arithmetic.cpp" target=
"_top">polynomial_arithmetic.cpp
</a>
296 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
297 <td align=
"left"></td>
298 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2006-
2010,
2012-
2014 Nikhar Agrawal,
299 Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert
300 Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Johan R
åde, Gautam Sewani,
301 Benjamin Sobotta, Thijs van den Berg, Daryle Walker and Xiaogang Zhang
<p>
302 Distributed under the Boost Software License, Version
1.0. (See accompanying
303 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>)
308 <div class=
"spirit-nav">
309 <a accesskey=
"p" href=
"root_comparison/elliptic_comparison.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../roots.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=
"rational.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>