#include #include #include #include namespace mp = boost::multiprecision; template void roundTest() { typedef mp::number, mp::et_off> decimal; const decimal origDigs(1.0); const decimal scale = pow(decimal(10), N); decimal digs = origDigs * scale; digs = boost::math::round(digs ); digs = digs / scale; std::string result = digs.str(); if (result != origDigs.str()) { std::cout << "roundTest failed for N = " << N << ": " << result << std::endl; } } template struct roundTester { static void test () { roundTest(); roundTester::test(); } }; template<> struct roundTester<0> { static void test () { roundTest<0>(); } }; int main(int argc, char* argv[]) { roundTester<60>::test(); return 0; }