#include #include #include #include using namespace std; template double integrate(F f, double lo, double hi, double eps = 1e-8) { const double th = eps / numeric_limits::epsilon(); function rec = [&](double x0, double x6, double y0, double y6, int d) { const double a = sqrt(2.0/3.0), b = 1.0 / sqrt(5.0); double x3 = (x0 + x6)/2, y3 = f(x3), h = (x6 - x0)/2; double x1 = x3-a*h, x2 = x3-b*h, x4 = x3+b*h, x5 = x3+a*h; double y1 = f(x1), y2 = f(x2), y4 = f(x4), y5 = f(x5); double I1 = (y0+y6 + 5*(y2+y4)) * (h/6); double I2 = (77*(y0+y6) + 432*(y1+y5) + 625*(y2+y4) + 672*y3) * (h/1470); if (x3 + h == x3 || d > 50) return 0.0; if (d > 4 && th + (I1-I2) == th) return I2; // avoid degeneracy return (double)(rec(x0, x1, y0, y1, d+1) + rec(x1, x2, y1, y2, d+1) + rec(x2, x3, y2, y3, d+1) + rec(x3, x4, y3, y4, d+1) + rec(x4, x5, y4, y5, d+1) + rec(x5, x6, y5, y6, d+1)); }; return rec(lo, hi, f(lo), f(hi), 0); } double circle_circle_intersection(double r, double d) { double D = 4*r*r - d*d; if (D < 0) { return 0; } else { return 2*r*r*acos(d/2/r)-d*sqrt(D)/2; } } int main(){ double r, h, d; scanf("%lf %lf %lf", &r, &h, &d); r /= h; d /= h; double ans = integrate([&](double z) { return circle_circle_intersection(r*z, d); }, 0, 1, 1e-8); printf("%.12lf", ans*h*h*h); }