/* 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  */      }