#include<stdio.h>

int main()
{
    double Sx,Sy,Gx,Gy;
    scanf("%lf%lf%lf%lf",&Sx,&Sy,&Gx,&Gy);
    double ans;
    ans=Gx+Gy*(Sx-Gx)/(Gy+Sy);
    printf("%.10lf\n",ans);
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define inf 1000000005 /*10^9+5*/
#define mod 1000000007 /*10^9+7*/
#define eps 1e-10
#define rep(i,n) for(int i = 0; i < (n); ++i) /*0からn-1までのrepeat*/
#define rrep(i,n) for(int i = 1; i <= (n); ++i) /*1からnまでのrepeat*/
#define drep(i,n) for(int i = (n)-1; i >= 0; --i) /*n-1から0までのrepeat*/
#define srep(i,s,t) for (int i = s; i < t; ++i) /*sからt-1までのrepeat*/
#define isin(x,l,r) ((l) <= (x) && (x) < (r)) /*l以上r未満のx*/
#define each(a,b) for(auto& (a): (b)) /*よくわかんない☆*/
#define pct __builtin_popcountll /*1bitの数*/
#define all(a) a.begin(),a.end() /*ぜーんぶ*/
#define sz(v) (int)(v).size() /*大きさ*/
#define zip(v) sort(all(v)),v.erase(unique(all(v)),v.end()) /*重複削除*/
#define cmx(x,y) x=max(x,y) /*最大*/
#define cmn(x,y) x=min(x,y) /*最小*/
#define rev(v) reverse((v).begin(),(v).end()); /*逆順*/
#define so(v) sort((v).begin(), (v).end()); /*ソート*/
#define yn {puts("Yes");}else{puts("No");} /*はいかいいえか*/
#define YN {puts("YES");}else{puts("NO");} /*大文字-はいかいいえか*/
#define dame { puts("-1"); return 0;}/*だめ*/
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define vipls vector<int> pls; /*@_vipls*/

using ll = long long;
using unit = unsigned;
using ull = unsigned long long;
using P = pair<int, int>;
using T = tuple<int, int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vvi = vector<vi>;
using vl = vector<ll>;
using vvl = vector<vl>;
using vd = vector<double>;
using vp = vector<P>;
using vt = vector<T>;
using vs = vector<string>;
using vc = vector<char>;



int main() {
    double a, b, c, d;
    cin >> a >> b >> c >> d;

    cout <<setprecision(15)<<c-((d*(c-a))/(d+b)) <<endl;
    return 0;
}