1 | #include <iostream>
|
---|
2 | #include <boost/multiprecision/cpp_bin_float.hpp>
|
---|
3 |
|
---|
4 | typedef boost::multiprecision::number<boost::multiprecision::cpp_bin_float<128, boost::multiprecision::backends::digit_base_2> > boost_float128_t;
|
---|
5 | typedef boost::multiprecision::number<boost::multiprecision::cpp_bin_float<256, boost::multiprecision::backends::digit_base_2> > boost_float256_t;
|
---|
6 |
|
---|
7 | int main(int , char** )
|
---|
8 | {
|
---|
9 | boost_float128_t a = 1;
|
---|
10 | boost_float128_t b = ldexp(boost_float128_t(0.99), -128);
|
---|
11 | boost_float128_t c = a - b;
|
---|
12 | boost_float128_t d = boost_float128_t(boost_float256_t(a) - boost_float256_t(b));
|
---|
13 |
|
---|
14 | std::cout
|
---|
15 | << std::setprecision(40)
|
---|
16 | << std::scientific
|
---|
17 | << "a = " << a << "\n"
|
---|
18 | << "b = " << b << "\n"
|
---|
19 | << "c = " << c << " (a - b)\n"
|
---|
20 | << "d = " << d << " (a - b) calculated with 256-bit precision.\n"
|
---|
21 | ;
|
---|
22 |
|
---|
23 | if (c == d)
|
---|
24 | std::cout << "o.k\n";
|
---|
25 | else
|
---|
26 | std::cout << "fail.\n";
|
---|
27 | return 0;
|
---|
28 | }
|
---|