#include #include typedef boost::multiprecision::number > boost_quadfloat_t; int main(int , char** ) { char opc = '+'; for (int op = 0; op < 2; ++op) { double a = 0; for (int i = 0; i < 2; ++i) { double b = 0; for (int k = 0; k < 2; ++k) { double dab = (opc == '+') ? a + b : a - b; boost_quadfloat_t ba = a, bb = b; boost_quadfloat_t bab = (opc == '+') ? ba + bb : ba - bb; std::cout << "double: " << std::setw(2) << a << " " << opc << " " << std::setw(2) << b << " => " << std::setw(2) << dab << ";\tcpp_bin_float: " << std::setw(2) << ba << " " << opc << " " << std::setw(2) << bb << " => " << std::setw(2) << bab << "\n" ; b = - b; } a = - a; } opc = '-'; } std::cout << "\n"; opc = '+'; for (int op = 0; op < 2; ++op) { double a = 1; for (int i = 0; i < 2; ++i) { double b = (opc == '+') ? -a : a; double dab = (opc == '+') ? a + b : a - b; boost_quadfloat_t ba = a, bb = b; boost_quadfloat_t bab = (opc == '+') ? ba + bb : ba - bb; std::cout << "double: " << std::setw(2) << a << " " << opc << " " << std::setw(2) << b << " => " << std::setw(2) << dab << ";\tcpp_bin_float: " << std::setw(2) << ba << " " << opc << " " << std::setw(2) << bb << " => " << std::setw(2) << bab << "\n" ; a = - a; } opc = '-'; } return 0; }