#include #include typedef boost::multiprecision::number > ext_float_t; int main(int, char**) { ext_float_t x = 5e15; x += 0.5; ext_float_t x1 = x + 255.0/(1<<20); // + 2^-12 - eps ext_float_t x2 = x + 257.0/(1<<20); // + 2^-12 + eps double d1 = x1.convert_to(); double d2 = x2.convert_to(); printf("%.1f\n%.1f\n%s\n", d1, d2, d1==d2 ? "good" : "bad"); return 0; }