#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <list>
#include <utility>
#include <tuple>
#include <cstdio>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <unordered_map>
#include <unordered_set>
#include <bitset>
#include <cctype>
#include <cmath>
#include <limits>
#include <iomanip>
#define _GLIBCXX_DEBUG
#define rep(i,n) for(int i=0;i<(n);++i)
using namespace std;
const long long INF = 1LL << 60;
typedef long long ll;
const ll mod = 998244353;
ll power(ll x, ll n){
    ll ret = 1;
    while(n > 0) {
        if(n & 1) {
            ret = ret * x % mod;
        }
        x = x* x % mod;
        n >>= 1;
    }
    return ret;
}
int main() {
    cout << std::fixed << std::setprecision(15) ;
    double s_x,s_y,g_x,g_y;
    cin >> s_x >> s_y >> g_x >> g_y ;
    double ans = s_x + (g_x - s_x) * s_y / (s_y + g_y);
    cout << ans << endl;
}
//#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
//#include <atcoder/all>
using namespace std;
#define all(n) begin(n), end(n)
const long long INF = numeric_limits<long long>::max();
typedef long long ll;
typedef vector<int> vint;
typedef vector<vector<int>> vvint;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef unsigned long long ull;
template <class T>
bool chmax(T &a, const T &b)
{
    if (a < b)
    {
        a = b;
        return 1;
    }
    return 0;
}
template <class T>
bool chmin(T &a, const T &b)
{
    if (b < a)
    {
        a = b;
        return 1;
    }
    return 0;
}
template <typename T>
vector<T> make_v(size_t a) { return vector<T>(a); }

template <typename T, typename... Ts>
auto make_v(size_t a, Ts... ts)
{
    return vector<decltype(make_v<T>(ts...))>(a, make_v<T>(ts...));
}
template <typename T, typename V>
typename enable_if<is_class<T>::value == 0>::type
fill_v(T &t, const V &v) { t = v; }

template <typename T, typename V>
typename enable_if<is_class<T>::value != 0>::type
fill_v(T &t, const V &v)
{
    for (auto &e : t)
        fill_v(e, v);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int a, b, c;
    cin >> a >> b >> c;
    auto dp = make_v<double>(101, 101, 101);

    for (int i = 99; i >= 0; i--)
    {
        for (int j = 99; j >= 0; j--)
        {
            for (int k = 99; k >= 0; k--)
            {
                dp[i][j][k] = (double)(i * (1 + dp[i + 1][j][k]) + j * (1 + dp[i][j + 1][k]) + k * (1 + dp[i][j][k + 1])) / (double)(i + j + k);
            }
        }
    }
    cout << setprecision(20) << dp[a][b][c];

    return 0;
}