3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>mpfi_float
</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=
"../interval.html" title=
"Interval Number Types">
9 <link rel=
"prev" href=
"../interval.html" title=
"Interval Number Types">
10 <link rel=
"next" href=
"../rational.html" title=
"Rational Number Types">
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=
"../interval.html"><img src=
"../../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../interval.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><h4 class=
"title">
27 <a name=
"boost_multiprecision.tut.interval.mpfi"></a><a class=
"link" href=
"mpfi.html" title=
"mpfi_float">mpfi_float
</a>
28 </h4></div></div></div>
30 <code class=
"computeroutput"><span class=
"preprocessor">#include
</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">mpfi
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span></code>
32 <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 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">></span>
35 <span class=
"keyword">class
</span> <span class=
"identifier">mpfi_float_backend
</span><span class=
"special">;
</span>
37 <span class=
"keyword">typedef
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"number">50</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">mpfi_float_50
</span><span class=
"special">;
</span>
38 <span class=
"keyword">typedef
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"number">100</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">mpfifloat_100
</span><span class=
"special">;
</span>
39 <span class=
"keyword">typedef
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"number">500</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">mpfifloat_500
</span><span class=
"special">;
</span>
40 <span class=
"keyword">typedef
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"number">1000</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">mpfi_float_1000
</span><span class=
"special">;
</span>
41 <span class=
"keyword">typedef
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"number">0</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">mpfi_float
</span><span class=
"special">;
</span>
43 <span class=
"special">}}
</span> <span class=
"comment">// namespaces
</span>
46 The
<code class=
"computeroutput"><span class=
"identifier">mpfi_float_backend
</span></code>
47 type is used in conjunction with
<code class=
"computeroutput"><span class=
"identifier">number
</span></code>:
48 It acts as a thin wrapper around the
<a href=
"http://perso.ens-lyon.fr/nathalie.revol/software.html" target=
"_top">MPFI
</a>
49 <code class=
"computeroutput"><span class=
"identifier">mpfi_t
</span></code> to provide an real-number
50 type that is a drop-in replacement for the native C++ floating-point types,
51 but with much greater precision and implementing interval arithmetic.
54 Type
<code class=
"computeroutput"><span class=
"identifier">mpfi_float_backend
</span></code>
55 can be used at fixed precision by specifying a non-zero
<code class=
"computeroutput"><span class=
"identifier">Digits10
</span></code>
56 template parameter, or at variable precision by setting the template argument
57 to zero. The typedefs mpfi_float_50, mpfi_float_100, mpfi_float_500, mpfi_float_1000
58 provide arithmetic types at
50,
100,
500 and
1000 decimal digits precision
59 respectively. The typedef mpfi_float provides a variable precision type
60 whose precision can be controlled via the
<code class=
"computeroutput"><span class=
"identifier">number
</span></code>s
63 <div class=
"note"><table border=
"0" summary=
"Note">
65 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Note]" src=
"../../../../../../../doc/src/images/note.png"></td>
66 <th align=
"left">Note
</th>
68 <tr><td align=
"left" valign=
"top"><p>
69 This type only provides
<code class=
"computeroutput"><span class=
"identifier">numeric_limits
</span></code>
70 support when the precision is fixed at compile time.
74 As well as the usual conversions from arithmetic and string types, instances
75 of
<code class=
"computeroutput"><span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">N
</span><span class=
"special">></span> <span class=
"special">></span></code> are copy constructible and assignable
78 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
80 The
<a href=
"http://perso.ens-lyon.fr/nathalie.revol/software.html" target=
"_top">MPFI
</a>
81 native type
<code class=
"computeroutput"><span class=
"identifier">mpfi_t
</span></code>.
84 The
<code class=
"computeroutput"><span class=
"identifier">number
</span></code> wrappers
85 around
<a href=
"http://perso.ens-lyon.fr/nathalie.revol/software.html" target=
"_top">MPFI
</a>
86 or
<a href=
"http://www.mpfr.org" target=
"_top">MPFR
</a>:
<code class=
"computeroutput"><span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">M
</span><span class=
"special">></span> <span class=
"special">></span></code>
87 and
<code class=
"computeroutput"><span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float
</span><span class=
"special"><</span><span class=
"identifier">M
</span><span class=
"special">></span> <span class=
"special">></span></code>.
90 There is a two argument constructor taking two
<code class=
"computeroutput"><span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float
</span><span class=
"special"><</span><span class=
"identifier">M
</span><span class=
"special">></span> <span class=
"special">></span></code>
91 arguments specifying the interval.
95 It's also possible to access the underlying
<code class=
"computeroutput"><span class=
"identifier">mpfi_t
</span></code>
96 via the data() member function of
<code class=
"computeroutput"><span class=
"identifier">mpfi_float_backend
</span></code>.
99 Things you should know when using this type:
101 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
102 <li class=
"listitem">
103 A default constructed
<code class=
"computeroutput"><span class=
"identifier">mpfi_float_backend
</span></code>
104 is set to zero (
<span class=
"emphasis"><em>Note that this is
<span class=
"bold"><strong>not
</strong></span>
105 the default
<a href=
"http://perso.ens-lyon.fr/nathalie.revol/software.html" target=
"_top">MPFI
</a>
106 behavior
</em></span>).
108 <li class=
"listitem">
109 No changes are made to
<a href=
"http://gmplib.org" target=
"_top">GMP
</a> or
110 <a href=
"http://www.mpfr.org" target=
"_top">MPFR
</a> global settings, so this
111 type can coexist with existing
<a href=
"http://www.mpfr.org" target=
"_top">MPFR
</a>
112 or
<a href=
"http://gmplib.org" target=
"_top">GMP
</a> code.
114 <li class=
"listitem">
115 The code can equally use
<a href=
"http://mpir.org/" target=
"_top">MPIR
</a>
116 in place of
<a href=
"http://gmplib.org" target=
"_top">GMP
</a> - indeed that
117 is the preferred option on Win32.
119 <li class=
"listitem">
120 This backend supports rvalue-references and is move-aware, making instantiations
121 of
<code class=
"computeroutput"><span class=
"identifier">number
</span></code> on this backend
124 <li class=
"listitem">
125 Conversion from a string results in a
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">runtime_error
</span></code>
126 being thrown if the string can not be interpreted as a valid floating-point
129 <li class=
"listitem">
130 Division by zero results in an infinity.
134 There are some additional non member functions for working on intervals:
136 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
137 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span> <span class=
"identifier">lower
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">);
</span>
140 Returns the lower end of the interval.
142 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
143 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span> <span class=
"identifier">upper
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">);
</span>
146 Returns the upper end of the interval.
148 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
149 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span> <span class=
"identifier">median
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">);
</span>
152 Returns the mid point of the interval.
154 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
155 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span> <span class=
"identifier">width
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">);
</span>
158 Returns the absolute width of the interval.
160 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
161 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span> <span class=
"identifier">intersect
</span><span class=
"special">(
</span>
162 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span>
163 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
166 Returns the interval which is the intersection of the
<span class=
"emphasis"><em>a
</em></span>
167 and
<span class=
"emphasis"><em>b
</em></span>. Returns an unspecified empty interval if there
168 is no such intersection.
170 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
171 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span> <span class=
"identifier">hull
</span><span class=
"special">(
</span>
172 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span>
173 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
176 Returns the interval which is the union of
<span class=
"emphasis"><em>a
</em></span> and
177 <span class=
"emphasis"><em>b
</em></span>.
179 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
180 <span class=
"keyword">bool
</span> <span class=
"identifier">overlap
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span>
181 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
184 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> only if the intervals
185 <span class=
"emphasis"><em>a
</em></span> and
<span class=
"emphasis"><em>b
</em></span> overlap.
187 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates1
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates2
</span><span class=
"special">></span>
188 <span class=
"keyword">bool
</span> <span class=
"identifier">in
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfr_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates1
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span>
189 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates2
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
192 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> only if point
193 <span class=
"emphasis"><em>a
</em></span> is contained within the interval
<span class=
"emphasis"><em>b
</em></span>.
195 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
196 <span class=
"keyword">bool
</span> <span class=
"identifier">zero_in
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
199 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> only if the interval
200 <span class=
"emphasis"><em>a
</em></span> contains the value zero.
202 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
203 <span class=
"keyword">bool
</span> <span class=
"identifier">subset
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span>
204 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
207 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> only if
<span class=
"emphasis"><em>a
</em></span>
208 is a subset of
<span class=
"emphasis"><em>b
</em></span>.
210 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
211 <span class=
"keyword">bool
</span> <span class=
"identifier">proper_subset
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span>
212 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
215 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> only if
<span class=
"emphasis"><em>a
</em></span>
216 is a proper subset of
<span class=
"emphasis"><em>b
</em></span>.
218 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
219 <span class=
"keyword">bool
</span> <span class=
"identifier">empty
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
222 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> only if
<span class=
"emphasis"><em>a
</em></span>
223 is an empty interval, equivalent to
<code class=
"computeroutput"><span class=
"identifier">upper
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span>
224 <span class=
"special"><</span> <span class=
"identifier">lower
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span></code>.
226 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">Digits10
</span><span class=
"special">,
</span> <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">></span>
227 <span class=
"keyword">bool
</span> <span class=
"identifier">singleton
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_backend
</span><span class=
"special"><</span><span class=
"identifier">Digits10
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
230 Returns
<code class=
"computeroutput"><span class=
"keyword">true
</span></code> if
<code class=
"computeroutput"><span class=
"identifier">lower
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span> <span class=
"special">==
</span>
231 <span class=
"identifier">upper
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span></code>.
234 <a name=
"boost_multiprecision.tut.interval.mpfi.h0"></a>
235 <span class=
"phrase"><a name=
"boost_multiprecision.tut.interval.mpfi.mpfi_example"></a></span><a class=
"link" href=
"mpfi.html#boost_multiprecision.tut.interval.mpfi.mpfi_example"> MPFI
238 <pre class=
"programlisting"><span class=
"preprocessor">#include
</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">mpfi
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
239 <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">special_functions
</span><span class=
"special">/
</span><span class=
"identifier">gamma
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
240 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iostream
</span><span class=
"special">></span>
242 <span class=
"keyword">int
</span> <span class=
"identifier">main
</span><span class=
"special">()
</span>
243 <span class=
"special">{
</span>
244 <span class=
"keyword">using
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">multiprecision
</span><span class=
"special">;
</span>
246 <span class=
"comment">// Operations at variable precision and no numeric_limits support:
</span>
247 <span class=
"identifier">mpfi_float
</span> <span class=
"identifier">a
</span> <span class=
"special">=
</span> <span class=
"number">2</span><span class=
"special">;
</span>
248 <span class=
"identifier">mpfi_float
</span><span class=
"special">::
</span><span class=
"identifier">default_precision
</span><span class=
"special">(
</span><span class=
"number">1000</span><span class=
"special">);
</span>
249 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">mpfi_float
</span><span class=
"special">::
</span><span class=
"identifier">default_precision
</span><span class=
"special">()
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span>
250 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">sqrt
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span> <span class=
"comment">// print root-
2</span>
252 <span class=
"comment">// Operations at fixed precision and full numeric_limits support:
</span>
253 <span class=
"identifier">mpfi_float_100
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">2</span><span class=
"special">;
</span>
254 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">numeric_limits
</span><span class=
"special"><</span><span class=
"identifier">mpfi_float_100
</span><span class=
"special">>::
</span><span class=
"identifier">digits
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span>
255 <span class=
"comment">// We can use any C++ std lib function:
</span>
256 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">log
</span><span class=
"special">(
</span><span class=
"identifier">b
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span> <span class=
"comment">// print log(
2)
</span>
258 <span class=
"comment">// Access the underlying data:
</span>
259 <span class=
"identifier">mpfi_t
</span> <span class=
"identifier">r
</span><span class=
"special">;
</span>
260 <span class=
"identifier">mpfi_init
</span><span class=
"special">(
</span><span class=
"identifier">r
</span><span class=
"special">);
</span>
261 <span class=
"identifier">mpfi_set
</span><span class=
"special">(
</span><span class=
"identifier">r
</span><span class=
"special">,
</span> <span class=
"identifier">b
</span><span class=
"special">.
</span><span class=
"identifier">backend
</span><span class=
"special">().
</span><span class=
"identifier">data
</span><span class=
"special">());
</span>
263 <span class=
"comment">// Construct some explicit intervals and perform set operations:
</span>
264 <span class=
"identifier">mpfi_float_50
</span> <span class=
"identifier">i1
</span><span class=
"special">(
</span><span class=
"number">1</span><span class=
"special">,
</span> <span class=
"number">2</span><span class=
"special">),
</span> <span class=
"identifier">i2
</span><span class=
"special">(
</span><span class=
"number">1.5</span><span class=
"special">,
</span> <span class=
"number">2.5</span><span class=
"special">);
</span>
265 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">intersect
</span><span class=
"special">(
</span><span class=
"identifier">i1
</span><span class=
"special">,
</span> <span class=
"identifier">i2
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span>
266 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">hull
</span><span class=
"special">(
</span><span class=
"identifier">i1
</span><span class=
"special">,
</span> <span class=
"identifier">i2
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span>
267 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">overlap
</span><span class=
"special">(
</span><span class=
"identifier">i1
</span><span class=
"special">,
</span> <span class=
"identifier">i2
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span>
268 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"identifier">subset
</span><span class=
"special">(
</span><span class=
"identifier">i1
</span><span class=
"special">,
</span> <span class=
"identifier">i2
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">endl
</span><span class=
"special">;
</span>
269 <span class=
"identifier">mpfi_clear
</span><span class=
"special">(
</span><span class=
"identifier">r
</span><span class=
"special">);
</span>
270 <span class=
"keyword">return
</span> <span class=
"number">0</span><span class=
"special">;
</span>
271 <span class=
"special">}
</span>
274 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
275 <td align=
"left"></td>
276 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2002-
2013 John Maddock and Christopher Kormanyos
<p>
277 Distributed under the Boost Software License, Version
1.0. (See accompanying
278 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>)
283 <div class=
"spirit-nav">
284 <a accesskey=
"p" href=
"../interval.html"><img src=
"../../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../interval.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>