/* Author:- Neel_Patel */
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define vi vector<int>
#define pii pair<int,int>
#define pll pair<long long,long long>  
#define vll vector<long long>
#define priq priority_queue
#define sp fixed<<setprecision
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long int llu;
const long double pi=3.14159265358979323846;        
const int inf=INT_MAX;
const ll inff=LLONG_MAX;
const long long int mod=1000000007;

///////////////// debug
#define deb(...) print1(#__VA_ARGS__,__VA_ARGS__)
void print()
{cout<<endl;}
template <typename T, typename... Types>  void print(T var1, Types... var2) {cout << var1 << ", " ;print(var2...) ;}
template<typename ...Args> void print1(string vars, Args&&... values) {cout<<vars<<" = ";print(values...);}
////////////////////

// ostream operator overloading
template<typename T>
ostream& operator<< (ostream& out, const vector<T>& v) {
    out << "{";size_t last = v.size() - 1;for(size_t i = 0; i < v.size(); ++i) { out << v[i];  if (i != last)  out << ", ";}out << "}";return out;
}
template<typename T1,typename T2> 
ostream & operator << (ostream &out,pair<T1,T2> x) { out<<"("<<x.ff<<","<<x.ss<<")";return out; } 
///////////////////////// functions 
template<typename T>
T gcd(T a,T b,T& x,T& y)    // extended gcd:- x and y such that xa+yb=gcd(a,b);
{
    if(b==0) { x=1;y=0;return a;}
    T x1,y1;  T d=gcd(b,a%b,x1,y1);  x=y1;  y=x1-y1*(a/b);  return d;
}
template<typename T>
T pow(T a,T b,T M)
{
    // if M is prime # then we can take //  b=b%(M-1);  // using fermat's littel theorem 
    // b=b%(M-1);
    T res = 1;
    while(b)
    {
        if(b&1) res=(res*a)%M;
        a=(a*a)%M;
        b>>=1;
    }
    return res;
}

template<typename T>
T modular_inverse(T n, T mod)    { return pow(n, mod-2, mod); }


//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
// check value of t(#of test case -- in main function)
/////////////global variable///////////////////////
// #define int ll
#define ld long double
const ld eps=1e-10;
ld fun(ld c,ld m,ld p,ld v)
{
    ld ans=0;
     // deb(c,m,p,v);
    if(c>eps)
    {
        ld diff=min(c,v);
        ld nm=m,nc=c-diff,np=p;
        if(m>eps)
        {
            nm+=diff/2.0;
            np+=diff/2.0;
        }
        else
        {
            np+=diff;
        }
        //  deb(nc,nm,np,v);
        ans+=c*(1.0+fun(nc,nm,np,v));
    }
    if(m>eps)
    {
        ld diff=min(m,v);
        ld nm=m-diff,nc=c,np=p;
        if(c>eps)
        {
            nc+=diff/2.0;
            np+=diff/2.0;
        }
        else
        {
            np+=diff;
        }
        ans+=m*(1.0+fun(nc,nm,np,v));
    }
    return ans+p;

}
ll ask(ll n)
{
    cout<<n<<endl;
    cin>>n;
    return n;
}
void solve()
{
    ld c,m,p,v;
    cin>>c>>m>>p>>v;
    cout<<sp(20)<<fun(c,m,p,v)<<endl;

    
}
// priority_queue <int, vector<int>, greater<int>> g = gq; // for small value on top
////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
signed main()  // signed int
{
    // snippet = https://snippet-generator.app/
    #ifndef ONLINE_JUDGE
    cout<<"hi!!";
   //  cout<<"Code is running....\n";
    freopen("input.txt", "r", stdin);
     freopen("output.txt", "w", stdout);
    //  chrono::time_point<std::chrono::system_clock> start, end;
    //  start = chrono::system_clock::now(); 
    #endif // ONLINE_JUDGE
    fast;
     // cout<<"hi\n";
    int t=1;
    cin>>t;
    while(t--)  
    {
        
        solve();
    }

    /* #ifndef ONLINE_JUDGE
        end = chrono::system_clock::now();
        chrono::duration<double> elapsed_seconds = end - start;
        cout<<elapsed_seconds.count()<<endl;
    #endif // ONLINE_JUDGE  */

}