| 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 | }
|
|---|