]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multiprecision/example/logged_adaptor.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / multiprecision / example / logged_adaptor.cpp
CommitLineData
7c673cae
FG
1///////////////////////////////////////////////////////////////
2// Copyright 2013 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//[logged_adaptor
7
8#include <boost/multiprecision/mpfi.hpp>
9#include <boost/multiprecision/logged_adaptor.hpp>
10#include <iostream>
11#include <iomanip>
12//
13// Begin by overloading log_postfix_event so we can capture each arithmetic event as it happens:
14//
15namespace boost{ namespace multiprecision{
16
17template <unsigned D>
18inline void log_postfix_event(const mpfi_float_backend<D>& val, const char* event_description)
19{
20 // Print out the (relative) diameter of the interval:
21 using namespace boost::multiprecision;
22 number<mpfr_float_backend<D> > diam;
23 mpfi_diam(diam.backend().data(), val.data());
24 std::cout << "Diameter was " << diam << " after operation: " << event_description << std::endl;
25}
26template <unsigned D, class T>
27inline void log_postfix_event(const mpfi_float_backend<D>&, const T&, const char* event_description)
28{
29 // This version is never called in this example.
30}
31
32}}
33
34
35int main()
36{
37 using namespace boost::multiprecision;
38 typedef number<logged_adaptor<mpfi_float_backend<17> > > logged_type;
39 //
40 // Test case deliberately introduces cancellation error, relative size of interval
41 // gradually gets larger after each operation:
42 //
43 logged_type a = 1;
44 a /= 10;
45
46 for(unsigned i = 0; i < 13; ++i)
47 {
48 logged_type b = a * 9;
49 b /= 10;
50 a -= b;
51 }
52 std::cout << "Final value was: " << a << std::endl;
53 return 0;
54}
55
56//]
57
58/*
59//[logged_adaptor_output
60
61Diameter was nan after operation: Default construct
62Diameter was 0 after operation: Assignment from arithmetic type
63Diameter was 4.33681e-18 after operation: /=
64Diameter was nan after operation: Default construct
65Diameter was 7.70988e-18 after operation: *
66Diameter was 9.63735e-18 after operation: /=
67Diameter was 1.30104e-16 after operation: -=
68Diameter was nan after operation: Default construct
69Diameter was 1.30104e-16 after operation: *
70Diameter was 1.38537e-16 after operation: /=
71Diameter was 2.54788e-15 after operation: -=
72Diameter was nan after operation: Default construct
73Diameter was 2.54788e-15 after operation: *
74Diameter was 2.54863e-15 after operation: /=
75Diameter was 4.84164e-14 after operation: -=
76Diameter was nan after operation: Default construct
77Diameter was 4.84164e-14 after operation: *
78Diameter was 4.84221e-14 after operation: /=
79Diameter was 9.19962e-13 after operation: -=
80Diameter was nan after operation: Default construct
81Diameter was 9.19962e-13 after operation: *
82Diameter was 9.19966e-13 after operation: /=
83Diameter was 1.74793e-11 after operation: -=
84Diameter was nan after operation: Default construct
85Diameter was 1.74793e-11 after operation: *
86Diameter was 1.74793e-11 after operation: /=
87Diameter was 3.32107e-10 after operation: -=
88Diameter was nan after operation: Default construct
89Diameter was 3.32107e-10 after operation: *
90Diameter was 3.32107e-10 after operation: /=
91Diameter was 6.31003e-09 after operation: -=
92Diameter was nan after operation: Default construct
93Diameter was 6.31003e-09 after operation: *
94Diameter was 6.31003e-09 after operation: /=
95Diameter was 1.19891e-07 after operation: -=
96Diameter was nan after operation: Default construct
97Diameter was 1.19891e-07 after operation: *
98Diameter was 1.19891e-07 after operation: /=
99Diameter was 2.27792e-06 after operation: -=
100Diameter was nan after operation: Default construct
101Diameter was 2.27792e-06 after operation: *
102Diameter was 2.27792e-06 after operation: /=
103Diameter was 4.32805e-05 after operation: -=
104Diameter was nan after operation: Default construct
105Diameter was 4.32805e-05 after operation: *
106Diameter was 4.32805e-05 after operation: /=
107Diameter was 0.00082233 after operation: -=
108Diameter was nan after operation: Default construct
109Diameter was 0.00082233 after operation: *
110Diameter was 0.00082233 after operation: /=
111Diameter was 0.0156243 after operation: -=
112Diameter was nan after operation: Default construct
113Diameter was 0.0156243 after operation: *
114Diameter was 0.0156243 after operation: /=
115Diameter was 0.296861 after operation: -=
116Final value was: {8.51569e-15,1.14843e-14}
117
118//]
119*/