You can use Boost multiprecision. Here an example to compute [$]\pi[$].
BTW Archimedes of Syracuse probably invented Interval Arithmetic.
N, value: 20/3.141592653589662682701706171090774719985979379159334657412021084377287605362950884738001859546262235
Error: 3.9166728e-13
N, value: 40/3.141592653589793238462643264539730025868175440272163320532165222527356511645931880184364385214446692
Error: 3.5621932e-25
N, value: 60/3.141592653589793238462643383279502884089176205070734653848659243661099969287718976336684872480311458
Error: 3.2397958e-37
N, value: 80/3.14159265358979323846264338327950288419716939937500760173689723236079737032492766828422638159104739
Error: 2.9465771e-49
N, value: 100/3.141592653589793238462643383279502884197169399375105820974944502977939790038327551870396055373551631
Error: 2.6798963e-61
N, value: 120/3.141592653589793238462643383279502884197169399375105820974944592307816406204963949135527982537650455
Error: 2.4373515e-73
N, value: 140/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998627960933400058354
Error: 2.2167583e-85
N, value: 160/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117001
Error: 2.0161299e-97
N, value: 180/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
Error: 1.833314e-109
N, value: 200/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
Error: 3.6190453e-113
template <typename T>
void ArchimedesPi(int N)
{ // N == number of iterations
T three(3.0); T two(2.0);
T an, anp1, bn, bnp1;
an = 2.0*boost::multiprecision::sqrt(three); bn = T(three);
for (int n = 1; n <= N; ++n)
{
// Take harmonic and geometric means
anp1 = two*an*bn / (an + bn);
bnp1 = boost::multiprecision::sqrt(bn*anp1);
an = anp1; bn = bnp1;
}
std::cout << "N, value: " << std::setprecision(std::numeric_limits<T>::digits10)
<< N << "/" << bn << "\n\n";
std::cout << "Error: " << std::setprecision(8)
<< boost::multiprecision::abs(bn - an) << "\n\n";
}