]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /////////////////////////////////////////////////////////////////////////////// |
2 | // Copyright 2016 John Maddock. Distributed under the Boost | |
3 | // Software License, Version 1.0. (See accompanying file | |
4 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
7c673cae FG |
6 | #include <boost/multiprecision/cpp_bin_float.hpp> |
7 | ||
8 | int main() | |
9 | { | |
92f5a8d4 | 10 | typedef boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<256> > ext_float_t; |
7c673cae FG |
11 | typedef boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<2046> > long_ext_float_t; |
12 | ||
13 | ext_float_t x = 5e15; | |
14 | x += 0.5; | |
15 | ext_float_t x1 = x + 255.0 / (1 << 20); // + 2^-12 - eps | |
16 | ext_float_t x2 = x + 257.0 / (1 << 20); // + 2^-12 + eps | |
92f5a8d4 TL |
17 | double d1 = x1.convert_to<double>(); |
18 | double d2 = x2.convert_to<double>(); | |
7c673cae FG |
19 | |
20 | std::cout << std::setprecision(18) << d1 << std::endl; | |
21 | std::cout << std::setprecision(18) << d2 << std::endl; | |
22 | ||
92f5a8d4 TL |
23 | x = 1e7 + 0.5; |
24 | x1 = x + ldexp(255.0, -38); // + 2^-30 - eps | |
25 | x2 = x + ldexp(257.0, -38); // + 2^-30 + eps | |
7c673cae FG |
26 | float f1 = x1.convert_to<float>(); |
27 | float f2 = x2.convert_to<float>(); | |
28 | ||
29 | std::cout << std::setprecision(9) << f1 << std::endl; | |
30 | std::cout << std::setprecision(9) << f2 << std::endl; | |
31 | ||
32 | long_ext_float_t lf(1); | |
33 | lf += std::numeric_limits<long_ext_float_t>::epsilon(); | |
34 | lf += std::numeric_limits<float>::epsilon() / 2; | |
1e59de90 | 35 | BOOST_MP_ASSERT(lf != 1); |
7c673cae FG |
36 | float f3 = lf.convert_to<float>(); |
37 | std::cout << std::setprecision(9) << f3 << std::endl; | |
38 | ||
39 | return (d1 == d2) && (f1 == f2) && (f3 != 1) ? 0 : 1; | |
40 | } |