#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
void __never(int a) { printf("\nOPS %d", a); }
int n, m;
int x, y;
void init() {
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
}
vector<double> solve(vector<double>& a, vector<double>& b, vector<double>& c,
                     vector<double>& d) {
  int n = (int)((a).size());
  vector<double> x(n);
  vector<double> al(n), be(n);
  al[0] = -c[0] / b[0];
  be[0] = d[0] / b[0];
  for (int(i) = (1); (i) <= (n - 1); ++(i)) {
    double z = a[i] * al[i - 1] + b[i];
    al[i] = -c[i] / z;
    be[i] = (d[i] - be[i - 1] * a[i]) / z;
  }
  x[n - 1] = be[n - 1];
  for (int(i) = (n - 2); (i) >= (0); --(i)) x[i] = al[i] * x[i + 1] + be[i];
  return x;
}
void sol() {
  cin >> n >> m;
  cin >> x >> y;
  if (m == 1) {
    printf("%.6lf", 2. * (n - x));
    return;
  }
  n = n - x + 1;
  vector<double> cur(m, 0);
  for (int(I) = (n - 1); (I) >= (1); --(I)) {
    vector<double> a(m), b(m), c(m), d(m);
    a[0] = 0;
    b[0] = 2. / 3;
    c[0] = -1. / 3;
    d[0] = 1 + cur[0] / 3;
    for (int(i) = (1); (i) <= (m - 2); ++(i)) {
      a[i] = -0.25;
      b[i] = 0.75;
      c[i] = -0.25;
      d[i] = 1 + 0.25 * cur[i];
    }
    a[m - 1] = -1. / 3;
    b[m - 1] = 2. / 3;
    c[m - 1] = 0.;
    d[m - 1] = 1 + cur[m - 1] / 3;
    cur = solve(a, b, c, d);
  }
  printf("%.6lf", cur[y - 1]);
}
int main() {
  sol();
  return 0;
}
