版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/82589535
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const double eps=1e-9;
int sgn(double x)
{
if(fabs(x)<eps)
return 0;
if(x<0)
return -1;
else
return 1;
}
double H,h,D;
double f(double x)
{
return D+H-(x+D*(H-h)/x);
}
double three_search(double l,double r)
{
while(sgn(r-l)>0)
{
double lmid;
double rmid;
lmid=l+(r-l)/3;
rmid=r-(r-l)/3;
if(f(lmid)>=f(rmid))
r=rmid;
else
l=lmid;
}
return f(l);
}
int main()
{
int n;
cin>>n;
while(n--)
{
cin>>H>>h>>D;
double ans;
ans=three_search((H-h)*D/H,D);
printf("%.3lf\n",ans);
}
return 0;
}