]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multiprecision/example/cpp_bin_float_import_export.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / multiprecision / example / cpp_bin_float_import_export.cpp
CommitLineData
7c673cae
FG
1///////////////////////////////////////////////////////////////
2// Copyright 2015 John Maddock. Distributed under the Boost
3// Software License, Version 1.0. (See accompanying file
92f5a8d4 4// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
7c673cae
FG
5
6#include <boost/multiprecision/cpp_bin_float.hpp>
7#include <iostream>
8#include <iomanip>
9#include <vector>
10#include <iterator>
11
92f5a8d4
TL
12// Contains Quickbook snippets in comments.
13
7c673cae
FG
14//[IE2
15
16/*`
17Importing or exporting cpp_bin_float is similar, but we must procede via an intermediate integer:
18*/
19/*=
20#include <boost/multiprecision/cpp_bin_float.hpp>
21#include <iostream>
22#include <iomanip>
23#include <vector>
24#include <iterator>
25*/
26
27int main()
28{
29 using boost::multiprecision::cpp_bin_float_100;
30 using boost::multiprecision::cpp_int;
31 // Create a cpp_bin_float to import/export:
32 cpp_bin_float_100 f(1);
33 f /= 3;
34 // export into 8-bit unsigned values, most significant bit first:
35 std::vector<unsigned char> v;
36 export_bits(cpp_int(f.backend().bits()), std::back_inserter(v), 8);
37 // Grab the exponent as well:
38 int e = f.backend().exponent();
39 // Import back again, and check for equality, we have to procede via
40 // an intermediate integer:
41 cpp_int i;
42 import_bits(i, v.begin(), v.end());
43 cpp_bin_float_100 g(i);
44 g.backend().exponent() = e;
92f5a8d4 45 BOOST_ASSERT(f == g);
7c673cae
FG
46}
47
48//]
49