Consider the following failing test -
a = real("3.11");
result = real::acos(real::cos(a)); // acos(cos(3.11)) = 3.110000000000000
lower_limit = real("3.109999999999999");
upper_limit = real("3.110000000000001");
CHECK(result > lower_limit);
CHECK(result < upper_limit);
There is loss of precision while computing Taylor expansion and using divide and conquer approach. So it is necessary to call the intermediate terms with more precision in math functions.