#include <bits/stdc++.h>
using namespace std;
#define _USE_MATH_DEFINES
#include <cmath>
// long long mod=180143987779;
// vector<long long > t(4*100001);
// long long gcd(long long a,long long b)
// {
//   if(b>a)
//   {
//     return gcd(b,a);
//   }
//   if(b==0)
//   {
//     return a;
//   }
//   else
//   {
//     return gcd(b,a%b);
//   }
// }
class comp{
public:
    bool operator()(pair<long long ,long long > a,pair<long long ,long long > b)
{
  if(a.first>b.first)
  {
    return false;
  }
  else if(a.first==b.first && a.second<b.second)
  {
    return false;
  }
  else
  {
    return true;
  }
 }
};
// void buildseg(long long  x,long long  l,long long  r,vector<long long > &a,long long  modi)
// {
//   if(l==r)
//   {
//     t[x]=a[l]%modi;
//   }
//   else
//   {
//     long long  mid=(l+r)/2;
//     buildseg(2*x+1,l,mid,a,modi);
//     buildseg(2*x+2,mid+1,r,a,modi);
//     t[x]=(t[2*x+1]+t[2*x+2])%modi;
//   }
// }
// long long  sum(long long  x,long long  l1,long long  r1,long long  l,long long  r,long long  modi)
// {
//   if(l>r)
//   {
//     return 0;
//   }
//   else if(l1==l && r1==r)
//   {
//     return t[x];
//   }
//   else
//   {
//     long long  mid=(l1+r1)/2;
//     return (sum(2*x+1,l1,mid,l,min(r,mid),modi)+sum(2*x+2,mid+1,r1,max(l,mid+1),r,modi))%modi;
//   }
// }
// void update(long long  x,long long  l,long long  r,long long  value,long long  pos,long long  modi)
// {
//   if(l==r)
//   {
//     t[x]=value%modi;
//   }
//   else
//   {
//     long long  mid=(l+r)/2;
//     if(mid>=pos)
//     {
//       update(2*x+1,l,mid,value,pos,modi);
//     }
//     else
//     {
//         update(2*x+2,mid+1,r,value,pos,modi);
//     }
//     t[x]=(t[2*x+1]+t[2*x+2])%modi;
//   }
// }
// void prdoubleseg(long long  n)
// {
//   for(long long  i=0;i<4*n;i++)
//   {
//     cout<<t[i]<<" ";
//   }
//   cout<<endl;
// }
// void dfs(double x,  vector<vector<double> > &adj,vector<set<double> > &v,double &count,vector<double> &vis)
// {
//   v[x].insert(count);
//   vis[x]=1;
//   for(auto i : adj[x])
//   {
//     if(vis[i]==0)
//     {
//       vis[i]=1;
//       dfs(i,adj,v,count,vis);
//     }
//   }
// }
// int bfs(int s,vector<vector<int> > adj,vector<int> &vis,vector<int> &level,int &max)
//   {
//     queue<int> q;
//     q.push(s);
//     level[s]=0;
//     vis[s]=1;
//     int k=s;
//     while(!q.empty())
//     {
//       int j=q.front();
//       q.pop();
//     //  cout<<j<<" ";
//       for(auto i:adj[j])
//       {
//         if(vis[i]==0)
//         {
//           q.push(i);
//           level[i]=level[j]+1;
//           if(level[i]>max)
//           {
//             max=level[i];
//             k=i;
//           }
//           vis[i]=1;
//         }
//       }
//     }
//     //cout<<endl;
//     return k;
//   }
// long long  diff(long long  a ,long long  b,long long  c)
// {
//   long long  q=min(a,b);
//   q=min(q,c);
//   long long  w=max(a,b);
//   w=max(w,c);
//   return (w-q);
// }
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long T;
  T=1;
  while(T--)
  {
    double a,b;
    cin>>a>>b;
    double h,m;
    cin>>h>>m;
    double total=(60*h)+m;
    double ho=((6*total)/12);
    double hm=((6)*m);

   //cout<<hm<<" "<<ho<<endl;
    double diff=(hm-ho);
    if(diff<0)
    {
      diff+=360;
    }
    if(diff>180)
    {
      diff=360-diff;
    }
    //cout<<diff<<endl;
    double pi=3.14159265358979323846;
    double ans=sqrt((a*a)+(b*b)-(2*a*b*cos((diff*pi)/180)));
    cout<<fixed<<setprecision(20)<<ans<<endl;
  }
   return 0;
}


Measured memory_bytes: 4220