1 | #include <math.h>
|
---|
2 | #include <boost/multiprecision/cpp_bin_float.hpp>
|
---|
3 |
|
---|
4 | typedef boost::multiprecision::number
|
---|
5 | <boost::multiprecision::backends::cpp_bin_float<256, boost::multiprecision::backends::digit_base_2> >
|
---|
6 | ext_float_t;
|
---|
7 |
|
---|
8 | int main(int, char**) {
|
---|
9 | ext_float_t x = 1e7+0.5;
|
---|
10 | ext_float_t x1 = x + ldexp(255, -38); // + 2^-30 - eps
|
---|
11 | ext_float_t x2 = x + ldexp(257, -38); // + 2^-30 + eps
|
---|
12 | float f1 = x1.convert_to<float>();
|
---|
13 | float f2 = x2.convert_to<float>();
|
---|
14 | std::cout << std::setprecision(27);
|
---|
15 | std::cout << "x1=" << x1 << " => " << f1 << "\n";
|
---|
16 | std::cout << "x2=" << x2 << " => " << f2 << "\n";
|
---|
17 | if (f1==f2)
|
---|
18 | std::cout << "good\n";
|
---|
19 | else
|
---|
20 | std::cout << "bad\n";
|
---|
21 |
|
---|
22 | return 0;
|
---|
23 | }
|
---|