#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
const double eps = 1e-6;//eps是整个辛普森应用的关键,取的大小根据题目要求的精度来确定,如果取的太小,会导致递归次数太多TLE
int T;
double a,b,l,r;
double f(double x) //定义函数
{
return b * sqrt(1 - x * x / (a * a));
}
double simpson(double a, double b) //返回区间[a,b]的三点辛普森值
{
double c = (a + b) / 2;
return (f(a) + 4 * f(c) + f(b)) * (b-a) / 6;
}
double asr(double a, double b, double eps)
{
double mid = (a + b) / 2;
double L = simpson(a, mid), R = simpson(mid, b), S = simpson(a, b);
if (fabs(S - L - R) <= 15 * eps) return L + R + (S - L - R) / 15;
return asr(a, mid, eps /2) + asr(mid, b, eps / 2);
}
int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%lf%lf%lf%lf", &a, &b, &l, &r);
printf("%.3f\n", 2 * asr(l, r, eps));
}
}