/*
ye mera template hai
apna khud likho bc :P
*/
/*
Author : Sarvagya Agarwal
*/
#include<bits/stdc++.h>
using namespace std;
//defines
#define openin freopen("input.txt","r",stdin)
#define openout freopen("output.txt","w",stdout)
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long
#define mod 1000000007
#define rep(i,a,n) for(__typeof(n) i=a;i<=n;++i)
#define all(c) (c).begin(),(c).end()
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
//templates
template <typename T>T expo(T e, T n){T x=1,p=e;while(n){if(n&1)x=x*p;p=p*p;n>>=1;}return x;}
template <typename T>T power(T e, T n, T m){T x=1,p=e;while(n){if(n&1)x=(x*p)%m;p=(p*p)%m;n>>=1;}return x;}
template <typename T> T InverseEuler(T a, T m){return (a==1? 1 : power(a, m-2, m));}
template <typename T> T gcd(T a, T b){while(a%=b^=a^=b^=a); return b;}
template <typename T> T lcm(T a, T b){return (a*(b/gcd(a,b)));}
double tick()
{
static clock_t oldtick;
clock_t newtick = clock();
double diff = 1.0*(newtick-oldtick)/CLOCKS_PER_SEC;
oldtick = newtick ;
return diff ;
}
//debug
#define TRACE
#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif
// DOBARA OVERFLOW KI GALTI HUI TO TU CHUTIYA HAI BC
int main()
{
fast;
int t;
cin>>t;
long double n,d;
int p,q,r,s;
while(t--)
{
cin>>p>>q>>r>>s;
n = p*s;
d = q*r + p*s - p*r;
//trace(n,d);
cout<<fixed<<setprecision(10)<<n/d<<endl;
}
return 0;
}
LyoKeWUgbWVyYSB0ZW1wbGF0ZSBoYWkKYXBuYSBraHVkIGxpa2hvIGJjIDpQCiovCgovKgpBdXRob3IgOiBTYXJ2YWd5YSBBZ2Fyd2FsCiovCgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy9kZWZpbmVzCiNkZWZpbmUgb3BlbmluIGZyZW9wZW4oImlucHV0LnR4dCIsInIiLHN0ZGluKQojZGVmaW5lIG9wZW5vdXQgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCkKI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCkKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIHJlcChpLGEsbikgZm9yKF9fdHlwZW9mKG4pIGk9YTtpPD1uOysraSkKI2RlZmluZSBhbGwoYykgKGMpLmJlZ2luKCksKGMpLmVuZCgpCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKCi8vdGVtcGxhdGVzCnRlbXBsYXRlIDx0eXBlbmFtZSBUPlQgZXhwbyhUIGUsIFQgbil7VCB4PTEscD1lO3doaWxlKG4pe2lmKG4mMSl4PXgqcDtwPXAqcDtuPj49MTt9cmV0dXJuIHg7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD5UIHBvd2VyKFQgZSwgVCBuLCBUIG0pe1QgeD0xLHA9ZTt3aGlsZShuKXtpZihuJjEpeD0oeCpwKSVtO3A9KHAqcCklbTtuPj49MTt9cmV0dXJuIHg7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVCBJbnZlcnNlRXVsZXIoVCBhLCBUIG0pe3JldHVybiAoYT09MT8gMSA6IHBvd2VyKGEsIG0tMiwgbSkpO30KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFQgZ2NkKFQgYSwgVCBiKXt3aGlsZShhJT1iXj1hXj1iXj1hKTsgcmV0dXJuIGI7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVCBsY20oVCBhLCBUIGIpe3JldHVybiAoYSooYi9nY2QoYSxiKSkpO30KCmRvdWJsZSB0aWNrKCkKewogICAgc3RhdGljIGNsb2NrX3Qgb2xkdGljazsKICAgIGNsb2NrX3QgbmV3dGljayA9IGNsb2NrKCk7CiAgICBkb3VibGUgZGlmZiA9IDEuMCoobmV3dGljay1vbGR0aWNrKS9DTE9DS1NfUEVSX1NFQzsKICAgIG9sZHRpY2sgPSBuZXd0aWNrIDsKICAgIHJldHVybiBkaWZmIDsKfQoKLy9kZWJ1ZwojZGVmaW5lIFRSQUNFCgojaWZkZWYgVFJBQ0UKI2RlZmluZSB0cmFjZSguLi4pIF9fZigjX19WQV9BUkdTX18sIF9fVkFfQVJHU19fKQp0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMT4Kdm9pZCBfX2YoY29uc3QgY2hhciogbmFtZSwgQXJnMSYmIGFyZzEpewoJCWNlcnIgPDwgbmFtZSA8PCAiIDogIiA8PCBhcmcxIDw8IHN0ZDo6ZW5kbDsKfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBfX2YoY29uc3QgY2hhciogbmFtZXMsIEFyZzEmJiBhcmcxLCBBcmdzJiYuLi4gYXJncyl7CgkJY29uc3QgY2hhciogY29tbWEgPSBzdHJjaHIobmFtZXMgKyAxLCAnLCcpO2NlcnIud3JpdGUobmFtZXMsIGNvbW1hIC0gbmFtZXMpIDw8ICIgOiAiIDw8IGFyZzE8PCIgfCAiO19fZihjb21tYSsxLCBhcmdzLi4uKTsKfQojZWxzZQojZGVmaW5lIHRyYWNlKC4uLikKI2VuZGlmCgovLyBET0JBUkEgT1ZFUkZMT1cgS0kgR0FMVEkgSFVJIFRPIFRVIENIVVRJWUEgSEFJIEJDCgppbnQgbWFpbigpCnsKICAgIGZhc3Q7CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIGxvbmcgZG91YmxlIG4sZDsKICAgIGludCBwLHEscixzOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIGNpbj4+cD4+cT4+cj4+czsKICAgICAgICBuID0gcCpzOwogICAgICAgIGQgPSBxKnIgKyBwKnMgLSBwKnI7CiAgICAgICAgLy90cmFjZShuLGQpOwogICAgICAgIGNvdXQ8PGZpeGVkPDxzZXRwcmVjaXNpb24oMTApPDxuL2Q8PGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=