#define MIN(x,y) (x < y ? x : y) #define MAX(x,y) (x > y ? x : y) double t,tol,x,y,s,m; tol = pow(0.5,27), s = 0, m = 1; x = MAX(a,b); y = MIN(a,b); while (x - y > tol * y) { t = (x + y) / 2; y = sqrt(x * y); x = t; m *= 2; s += m * (x - y) * (x - y); } len = M_PI * ((a + b) * (a + b) - s) / (x + y);