// JG GAP GG 



#include <iostream>
#include <cstring>
#include<vector>
#include <algorithm>
#include<cstdlib>
#include<set>
#include<math.h>
#include<map>
#include<unordered_map>
#include<iomanip>
#include<queue>
#include<bitset>

using namespace std;
using ll = long long;
using ull = unsigned long long;
const ll MOD = 1000000007;
#define rep(n,x) for(ll i=0;i<n;i++) cin>>x[i];
#define forr(a,b) for(ll i=a;i<b;i++);
#define vecsort(myVec,x,y) sort(myVec.begin(),myVec.end(),[](const vector<y> &alpha,const vector<y> &beta){return alpha[x] < beta[x];});
#define vsort(v) sort(v.begin(),v.end());
#define vdownsort(v) sort(v.begin(),v.end(),greater<ll>());
ll modpow(ll a, ll n, ll mod)
{
	ll res = 1;
	while (0 < n)
	{
		if (n & 1) res = res * a % mod;
		a = a * a % mod;
		n >>= 1;
	}
	return res;
}


int main()
{
	ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	
	double sx, sy, gx, gy;
	cin >> sx >> sy >> gx >> gy;
	double ans = (sy * gx + sx * gy) / (sy + gy);
	cout << fixed << setprecision(10) << ans << endl;





	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define LL long int

#define MOD const LL 1000000007;

int ans = 0;

int main(){
    long double sx,sy,gx,gy;
    cin >> sx >> sy >> gx >> gy;
    cout << fixed << setprecision(16) << (sx * gy + gx * sy)/(sy + gy) << endl;

    return 0;
}