3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Importing and Exporting Data to and from cpp_int and cpp_bin_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=
"../tut.html" title=
"Tutorial">
9 <link rel=
"prev" href=
"lits.html" title=
"Literal Types and constexpr Support">
10 <link rel=
"next" href=
"rounding.html" title=
"Rounding Rules for Conversions">
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=
"lits.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../tut.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=
"rounding.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>
26 <div class=
"titlepage"><div><div><h3 class=
"title">
27 <a name=
"boost_multiprecision.tut.import_export"></a><a class=
"link" href=
"import_export.html" title=
"Importing and Exporting Data to and from cpp_int and cpp_bin_float">Importing and
28 Exporting Data to and from cpp_int and cpp_bin_float
</a>
29 </h3></div></div></div>
31 Any integer number type that uses
<code class=
"computeroutput"><span class=
"identifier">cpp_int_backend
</span></code>
32 as it's implementation layer can import or export it's bits via two non-member
35 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"keyword">unsigned
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_integer_type
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_int_check_type
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">Allocator
</span><span class=
"special">,
</span>
36 <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">OutputIterator
</span><span class=
"special">></span>
37 <span class=
"identifier">OutputIterator
</span> <span class=
"identifier">export_bits
</span><span class=
"special">(
</span>
38 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"keyword">const
</span> <span class=
"identifier">cpp_int_backend
</span><span class=
"special"><</span><span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">,
</span>
39 <span class=
"identifier">OutputIterator
</span> <span class=
"identifier">out
</span><span class=
"special">,
</span>
40 <span class=
"keyword">unsigned
</span> <span class=
"identifier">chunk_size
</span><span class=
"special">,
</span>
41 <span class=
"keyword">bool
</span> <span class=
"identifier">msv_first
</span> <span class=
"special">=
</span> <span class=
"keyword">true
</span><span class=
"special">);
</span>
43 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"keyword">unsigned
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_integer_type
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_int_check_type
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">Allocator
</span><span class=
"special">,
</span>
44 <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">Iterator
</span><span class=
"special">></span>
45 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">cpp_int_backend
</span><span class=
"special"><</span><span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span>
46 <span class=
"identifier">import_bits
</span><span class=
"special">(
</span>
47 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">cpp_int_backend
</span><span class=
"special"><</span><span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">,
</span>
48 <span class=
"identifier">Iterator
</span> <span class=
"identifier">i
</span><span class=
"special">,
</span>
49 <span class=
"identifier">Iterator
</span> <span class=
"identifier">j
</span><span class=
"special">,
</span>
50 <span class=
"keyword">unsigned
</span> <span class=
"identifier">chunk_size
</span> <span class=
"special">=
</span> <span class=
"number">0</span><span class=
"special">,
</span>
51 <span class=
"keyword">bool
</span> <span class=
"identifier">msv_first
</span> <span class=
"special">=
</span> <span class=
"keyword">true
</span><span class=
"special">);
</span>
54 These functions are designed for data-interchange with other storage formats,
55 and since
<a class=
"link" href=
"floats/cpp_bin_float.html" title=
"cpp_bin_float">cpp_bin_float
</a>
56 uses
<a class=
"link" href=
"ints/cpp_int.html" title=
"cpp_int">cpp_int
</a>
57 internally, by extension they can be used for floating point numbers based
58 on that backend as well (see example below). Parameters and use are as follows:
60 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"keyword">unsigned
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_integer_type
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_int_check_type
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">Allocator
</span><span class=
"special">,
</span>
61 <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">OutputIterator
</span><span class=
"special">></span>
62 <span class=
"identifier">OutputIterator
</span> <span class=
"identifier">export_bits
</span><span class=
"special">(
</span>
63 <span class=
"keyword">const
</span> <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"keyword">const
</span> <span class=
"identifier">cpp_int_backend
</span><span class=
"special"><</span><span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">,
</span>
64 <span class=
"identifier">OutputIterator
</span> <span class=
"identifier">out
</span><span class=
"special">,
</span>
65 <span class=
"keyword">unsigned
</span> <span class=
"identifier">chunk_size
</span><span class=
"special">,
</span>
66 <span class=
"keyword">bool
</span> <span class=
"identifier">msv_first
</span> <span class=
"special">=
</span> <span class=
"keyword">true
</span><span class=
"special">);
</span>
69 Exports the absolute value of
<code class=
"computeroutput"><span class=
"identifier">val
</span></code>
70 to OutputIterator
<code class=
"computeroutput"><span class=
"identifier">out
</span></code>. The
71 function will write
<code class=
"computeroutput"><span class=
"identifier">chunk_size
</span></code>
72 bits at a time to the OutputIterator, and if
<code class=
"computeroutput"><span class=
"identifier">msv_first
</span></code>
73 is true, will write the most-significant block first. Byte and bit order
74 within each
<code class=
"computeroutput"><span class=
"identifier">chunk_size
</span></code> block
75 is always in the machines native format. Further, each block is stored in
76 a
<code class=
"computeroutput"><span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">uintmax_t
</span></code> when it's assigned to
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">out
</span></code>.
78 <div class=
"note"><table border=
"0" summary=
"Note">
80 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Note]" src=
"../../../../../../doc/src/images/note.png"></td>
81 <th align=
"left">Note
</th>
83 <tr><td align=
"left" valign=
"top"><p>
84 Unfortunately, the standard's OutputIterator concept provides no means
85 of deducing the type to output since
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">iterator_traits
</span><span class=
"special"><</span><span class=
"identifier">OutputIteratorType
</span><span class=
"special">>::
</span><span class=
"identifier">value_type
</span></code>
86 is type
<code class=
"computeroutput"><span class=
"keyword">void
</span></code>. This is why
87 the bit count for each block has to be specified manually. It may also
88 result in compiler warnings about the value being narrowed.
91 <div class=
"tip"><table border=
"0" summary=
"Tip">
93 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Tip]" src=
"../../../../../../doc/src/images/tip.png"></td>
94 <th align=
"left">Tip
</th>
96 <tr><td align=
"left" valign=
"top"><p>
97 If you're exporting to non-native byte layout, then use
<a href=
"http://www.boost.org/doc/libs/release/libs/endian/doc/index.html" target=
"_top">Boost.Endian
</a>
98 to create a custom OutputIterator that reverses the byte order of each
99 chunk prior to actually storing the result.
102 <pre class=
"programlisting"><span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"keyword">unsigned
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_integer_type
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">cpp_int_check_type
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">Allocator
</span><span class=
"special">,
</span>
103 <span class=
"identifier">expression_template_option
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">ForwardIterator
</span><span class=
"special">></span>
104 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">cpp_int_backend
</span><span class=
"special"><</span><span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span>
105 <span class=
"identifier">import_bits
</span><span class=
"special">(
</span>
106 <span class=
"identifier">number
</span><span class=
"special"><</span><span class=
"identifier">cpp_int_backend
</span><span class=
"special"><</span><span class=
"identifier">MinBits
</span><span class=
"special">,
</span> <span class=
"identifier">MaxBits
</span><span class=
"special">,
</span> <span class=
"identifier">SignType
</span><span class=
"special">,
</span> <span class=
"identifier">Checked
</span><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">>,
</span> <span class=
"identifier">ExpressionTemplates
</span><span class=
"special">>&</span> <span class=
"identifier">val
</span><span class=
"special">,
</span>
107 <span class=
"identifier">ForwardIterator
</span> <span class=
"identifier">i
</span><span class=
"special">,
</span>
108 <span class=
"identifier">ForwardIterator
</span> <span class=
"identifier">j
</span><span class=
"special">,
</span>
109 <span class=
"keyword">unsigned
</span> <span class=
"identifier">chunk_size
</span> <span class=
"special">=
</span> <span class=
"number">0</span><span class=
"special">,
</span>
110 <span class=
"keyword">bool
</span> <span class=
"identifier">msv_first
</span> <span class=
"special">=
</span> <span class=
"keyword">true
</span><span class=
"special">);
</span>
113 Imports bits from the iterator range
<span class=
"emphasis"><em>[i,j)
</em></span> and stores
114 them in
<code class=
"computeroutput"><span class=
"identifier">val
</span></code> to produce an
115 unsigned result (if the result is to be signed you will need to handle that
116 separately). When
<code class=
"computeroutput"><span class=
"identifier">msv_first
</span></code>
117 is true, takes
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">i
</span></code>
118 as the most significant chunk. Assumes there are
<code class=
"computeroutput"><span class=
"identifier">chunk_size
</span></code>
119 bits in each value read from the iterator range, and that these are in machine
120 native bit/byte order. When
<code class=
"computeroutput"><span class=
"identifier">chunk_size
</span></code>
121 is zero, then assumes that each chunk contains
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">numeric_limits
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">iterator_traits
</span><span class=
"special"><</span><span class=
"identifier">ForwardIterator
</span><span class=
"special">>::
</span><span class=
"identifier">value_type
</span><span class=
"special">>::
</span><span class=
"identifier">digits
</span></code>,
122 note that this will give the wrong result if dereferencing the iterators
123 leads to a signed-integer type,
<span class=
"bold"><strong>and
</strong></span> the
124 sign bit is significant (be particularly careful if you expect type
<code class=
"computeroutput"><span class=
"keyword">char
</span></code> to contain
8-bit values, as by default
125 it will extract only
7-bits at a time if
<code class=
"computeroutput"><span class=
"keyword">char
</span></code>
126 is signed). As with exporting, if the external data is to be in a non-native
127 byte order (within each chunk), then you will need to create an iterator
128 adaptor that presents it in native order (see
<a href=
"http://www.boost.org/doc/libs/release/libs/endian/doc/index.html" target=
"_top">Boost.Endian
</a>).
130 <div class=
"note"><table border=
"0" summary=
"Note">
132 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Note]" src=
"../../../../../../doc/src/images/note.png"></td>
133 <th align=
"left">Note
</th>
135 <tr><td align=
"left" valign=
"top"><p>
136 Note that this function is optimized for the case where the data can be
137 memcpy'ed from the source to the integer - in this case both iterators
138 much be pointers, and everything must be little-endian.
142 <a name=
"boost_multiprecision.tut.import_export.h0"></a>
143 <span class=
"phrase"><a name=
"boost_multiprecision.tut.import_export.examples"></a></span><a class=
"link" href=
"import_export.html#boost_multiprecision.tut.import_export.examples">Examples
</a>
146 In this simple example, we'll import/export the bits of a cpp_int to a vector
147 of
8-bit unsigned values:
149 <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">cpp_int
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
150 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iostream
</span><span class=
"special">></span>
151 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iomanip
</span><span class=
"special">></span>
152 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">vector
</span><span class=
"special">></span>
153 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iterator
</span><span class=
"special">></span>
156 <span class=
"keyword">int
</span> <span class=
"identifier">main
</span><span class=
"special">()
</span>
157 <span class=
"special">{
</span>
158 <span class=
"keyword">using
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">multiprecision
</span><span class=
"special">::
</span><span class=
"identifier">cpp_int
</span><span class=
"special">;
</span>
159 <span class=
"comment">// Create a cpp_int with just a couple of bits set:
</span>
160 <span class=
"identifier">cpp_int
</span> <span class=
"identifier">i
</span><span class=
"special">;
</span>
161 <span class=
"identifier">bit_set
</span><span class=
"special">(
</span><span class=
"identifier">i
</span><span class=
"special">,
</span> <span class=
"number">5000</span><span class=
"special">);
</span> <span class=
"comment">// set the
5000'th bit
</span>
162 <span class=
"identifier">bit_set
</span><span class=
"special">(
</span><span class=
"identifier">i
</span><span class=
"special">,
</span> <span class=
"number">200</span><span class=
"special">);
</span>
163 <span class=
"identifier">bit_set
</span><span class=
"special">(
</span><span class=
"identifier">i
</span><span class=
"special">,
</span> <span class=
"number">50</span><span class=
"special">);
</span>
164 <span class=
"comment">// export into
8-bit unsigned values, most significant bit first:
</span>
165 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"keyword">char
</span><span class=
"special">></span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
166 <span class=
"identifier">export_bits
</span><span class=
"special">(
</span><span class=
"identifier">i
</span><span class=
"special">,
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">back_inserter
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">),
</span> <span class=
"number">8</span><span class=
"special">);
</span>
167 <span class=
"comment">// import back again, and check for equality:
</span>
168 <span class=
"identifier">cpp_int
</span> <span class=
"identifier">j
</span><span class=
"special">;
</span>
169 <span class=
"identifier">import_bits
</span><span class=
"special">(
</span><span class=
"identifier">j
</span><span class=
"special">,
</span> <span class=
"identifier">v
</span><span class=
"special">.
</span><span class=
"identifier">begin
</span><span class=
"special">(),
</span> <span class=
"identifier">v
</span><span class=
"special">.
</span><span class=
"identifier">end
</span><span class=
"special">());
</span>
170 <span class=
"identifier">assert
</span><span class=
"special">(
</span><span class=
"identifier">i
</span> <span class=
"special">==
</span> <span class=
"identifier">j
</span><span class=
"special">);
</span>
171 <span class=
"special">}
</span>
174 Importing or exporting cpp_bin_float is similar, but we must procede via
175 an intermediate integer:
177 <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">cpp_bin_float
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
178 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iostream
</span><span class=
"special">></span>
179 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iomanip
</span><span class=
"special">></span>
180 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">vector
</span><span class=
"special">></span>
181 <span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">iterator
</span><span class=
"special">></span>
184 <span class=
"keyword">int
</span> <span class=
"identifier">main
</span><span class=
"special">()
</span>
185 <span class=
"special">{
</span>
186 <span class=
"keyword">using
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">multiprecision
</span><span class=
"special">::
</span><span class=
"identifier">cpp_bin_float_100
</span><span class=
"special">;
</span>
187 <span class=
"keyword">using
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">multiprecision
</span><span class=
"special">::
</span><span class=
"identifier">cpp_int
</span><span class=
"special">;
</span>
188 <span class=
"comment">// Create a cpp_bin_float to import/export:
</span>
189 <span class=
"identifier">cpp_bin_float_100
</span> <span class=
"identifier">f
</span><span class=
"special">(
</span><span class=
"number">1</span><span class=
"special">);
</span>
190 <span class=
"identifier">f
</span> <span class=
"special">/=
</span> <span class=
"number">3</span><span class=
"special">;
</span>
191 <span class=
"comment">// export into
8-bit unsigned values, most significant bit first:
</span>
192 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"keyword">unsigned
</span> <span class=
"keyword">char
</span><span class=
"special">></span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
193 <span class=
"identifier">export_bits
</span><span class=
"special">(
</span><span class=
"identifier">cpp_int
</span><span class=
"special">(
</span><span class=
"identifier">f
</span><span class=
"special">.
</span><span class=
"identifier">backend
</span><span class=
"special">().
</span><span class=
"identifier">bits
</span><span class=
"special">()),
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">back_inserter
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">),
</span> <span class=
"number">8</span><span class=
"special">);
</span>
194 <span class=
"comment">// Grab the exponent as well:
</span>
195 <span class=
"keyword">int
</span> <span class=
"identifier">e
</span> <span class=
"special">=
</span> <span class=
"identifier">f
</span><span class=
"special">.
</span><span class=
"identifier">backend
</span><span class=
"special">().
</span><span class=
"identifier">exponent
</span><span class=
"special">();
</span>
196 <span class=
"comment">// Import back again, and check for equality, we have to procede via
</span>
197 <span class=
"comment">// an intermediate integer:
</span>
198 <span class=
"identifier">cpp_int
</span> <span class=
"identifier">i
</span><span class=
"special">;
</span>
199 <span class=
"identifier">import_bits
</span><span class=
"special">(
</span><span class=
"identifier">i
</span><span class=
"special">,
</span> <span class=
"identifier">v
</span><span class=
"special">.
</span><span class=
"identifier">begin
</span><span class=
"special">(),
</span> <span class=
"identifier">v
</span><span class=
"special">.
</span><span class=
"identifier">end
</span><span class=
"special">());
</span>
200 <span class=
"identifier">cpp_bin_float_100
</span> <span class=
"identifier">g
</span><span class=
"special">(
</span><span class=
"identifier">i
</span><span class=
"special">);
</span>
201 <span class=
"identifier">g
</span><span class=
"special">.
</span><span class=
"identifier">backend
</span><span class=
"special">().
</span><span class=
"identifier">exponent
</span><span class=
"special">()
</span> <span class=
"special">=
</span> <span class=
"identifier">e
</span><span class=
"special">;
</span>
202 <span class=
"identifier">assert
</span><span class=
"special">(
</span><span class=
"identifier">f
</span> <span class=
"special">==
</span> <span class=
"identifier">g
</span><span class=
"special">);
</span>
203 <span class=
"special">}
</span>
206 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
207 <td align=
"left"></td>
208 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2002-
2013 John Maddock and Christopher Kormanyos
<p>
209 Distributed under the Boost Software License, Version
1.0. (See accompanying
210 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>)
215 <div class=
"spirit-nav">
216 <a accesskey=
"p" href=
"lits.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../tut.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=
"rounding.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>