#include #include typedef boost::multiprecision::number > ext_float_t; int main(int, char**) { ext_float_t x = 1e7+0.5; ext_float_t x1 = x + ldexp(255, -38); // + 2^-30 - eps ext_float_t x2 = x + ldexp(257, -38); // + 2^-30 + eps float f1 = x1.convert_to(); float f2 = x2.convert_to(); std::cout << std::setprecision(27); std::cout << "x1=" << x1 << " => " << f1 << "\n"; std::cout << "x2=" << x2 << " => " << f2 << "\n"; if (f1==f2) std::cout << "good\n"; else std::cout << "bad\n"; return 0; }