#include <bits/stdc++.h>
using namespace std;
void init() {
  ios::sync_with_stdio(0);
  srand(time(0));
}
void pause() {}
void scanBigInteger(vector<short> &A) {
  string s;
  cin >> s;
  for (int x = s.length() - 1; x >= 0; x--) {
    A.push_back(s[x] - '0');
  }
}
void printBigInteger(vector<short> A) {
  if (A.empty())
    cout << 0 << endl;
  else
    for (int x = A.size() - 1; x >= 0; x--) cout << A[x];
}
void swap(vector<short> &A, vector<short> &B) {
  vector<short> C = A;
  A = B;
  B = C;
}
void convert(vector<short> &A, vector<short> &B) {
  if (A.size() > B.size())
    while (abs((int)A.size() - (int)B.size())) B.push_back(0);
  if (A.size() < B.size())
    while (abs((int)A.size() - (int)B.size())) A.push_back(0);
}
void normalize(vector<short> &A) {
  while (A.size() && A[A.size() - 1] == 0) A.pop_back();
}
bool operator>(vector<short> A, vector<short> B) {
  if (A.size() > B.size()) return true;
  if (A.size() < B.size())
    return false;
  else {
    for (int i = A.size() - 1; i >= 0; i--) {
      if (A[i] == B[i]) continue;
      if (A[i] > B[i]) return true;
      if (A[i] < B[i]) return false;
    }
    return false;
  }
}
bool operator<(vector<short> A, vector<short> B) {
  if (A.size() > B.size()) return false;
  if (A.size() < B.size())
    return true;
  else {
    for (int i = A.size() - 1; i >= 0; i--) {
      if (A[i] == B[i]) continue;
      if (A[i] > B[i]) return false;
      if (A[i] < B[i]) return true;
    }
    return false;
  }
}
bool operator!=(vector<short> A, vector<short> B) {
  if (A.size() != B.size()) return true;
  bool notequal = false;
  for (int i = 0; i < A.size() && !notequal; i++) {
    if (A[i] != B[i]) notequal = true;
  }
  return notequal;
}
bool operator==(vector<short> A, vector<short> B) {
  if (A.size() != B.size()) return false;
  bool equal = true;
  for (int i = 0; i < A.size() && equal; i++) {
    if (A[i] != B[i]) equal = false;
  }
  return equal;
}
bool operator<=(vector<short> A, vector<short> B) { return (A < B) | (A == B); }
bool operator>=(vector<short> A, vector<short> B) { return (A > B) | (A == B); }
vector<short> operator+(vector<short> A, vector<short> B) {
  vector<short> C;
  convert(A, B);
  int carry = 0;
  for (int i = 0; i < A.size(); i++) {
    carry += A[i] + B[i];
    C.push_back(carry % 10);
    carry /= 10;
  }
  if (carry) C.push_back(carry);
  return C;
}
vector<short> operator-(vector<short> A, vector<short> B) {
  if (B > A) swap(A, B);
  int carry = 0;
  for (int i = 0; i < A.size(); i++) {
    A[i] -= carry + int(i < B.size() ? B[i] : 0);
    carry = int(A[i] < 0);
    if (carry) A[i] += 10;
  }
  while (A.size() && A[A.size() - 1] == 0) A.pop_back();
  return A;
}
vector<short> operator*(vector<short> A, vector<short> B) {
  if (B > A) swap(A, B);
  vector<short> C;
  C.resize(A.size() + B.size());
  int slice = 0;
  for (int i = 0; i < A.size(); i++) {
    for (int j = 0; j < B.size() || slice; j++) {
      int tmp = C[i + j] + slice + (j < B.size() ? B[j] : 0) * A[i];
      C[i + j] = tmp % 10;
      slice = tmp / 10;
    }
  }
  while (C.size() && C[C.size() - 1] == 0) C.pop_back();
  return C;
}
int main() {
  init();
  long double l, d, v1, v2;
  cin >> l >> d >> v1 >> v2;
  if (d <= l)
    cout << 0.0000000000000 << endl;
  else
    cout << fixed << setprecision(7) << abs(l - d) / (v1 + v2) << endl;
  pause();
  return 0;
}
