#include <bits/stdc++.h>
using namespace std;
string filename = "test";
long double p[1001][1001];
vector<long double> go1(vector<long double> a, vector<long double> b,
                        vector<long double> c, vector<long double> d) {
  int n = a.size();
  vector<long double> x(n, 0);
  c[0] /= b[0];
  d[0] /= b[0];
  for (int i = 1; i < n; i++) {
    long double id = 1 / (b[i] - c[i - 1] * a[i]);
    c[i] *= id;
    d[i] = (d[i] - d[i - 1] * a[i]) * id;
  }
  x[n - 1] = d[n - 1];
  for (int i = n - 2; i >= 0; i--) x[i] = d[i] - c[i] * x[i + 1];
  return x;
}
vector<long double> go(vector<long double> a, vector<long double> b,
                       vector<long double> c, vector<long double> d) {
  int n = a.size();
  vector<long double> x(n, 0);
  for (int _n(n), i(1); i < _n; i++) {
    b[i] = b[i] - a[i] * c[i - 1] / b[i - 1];
  }
  for (int _n(n), i(1); i < _n; i++) {
    d[i] = d[i] - a[i] * d[i - 1] / b[i - 1];
  }
  x[n - 1] = d[n - 1] / b[n - 1];
  for (int i = n - 2; i >= 0; --i) {
    x[i] = (d[i] - c[i] * x[i + 1]) / b[i];
  }
  return x;
}
int main() {
  int m, n;
  cin >> n >> m;
  int tx, ty;
  cin >> tx >> ty;
  tx--;
  ty--;
  memset(p, 0, sizeof(p));
  for (int _n(m), i(0); i < _n; i++) p[n - 1][i] = 0.0;
  if (tx == n - 1) {
  } else {
    vector<long double> a(m, 0), b(m, 0), c(m, 0), d(m, 0), x;
    int cr = n - 1;
    while (1) {
      cr--;
      if (m == 1) {
        a[0] = 0.0;
        b[0] = 1.0 / 2.0;
        c[0] = 0.0;
        for (int _n(m), i(0); i < _n; i++)
          d[i] = 1.0 + ((i == 0 || i == m - 1) ? 1.0 / 2.0 : 1.0 / 4.0) *
                           p[cr + 1][i];
      } else {
        a[0] = 0.0;
        for (int _n(m - 1), i(1); i < _n; i++) a[i] = -1.0 / 4.0;
        a[m - 1] = -1.0 / 3.0;
        b[0] = 2.0 / 3.0;
        for (int _n(m - 1), i(1); i < _n; i++) b[i] = 3.0 / 4.0;
        b[m - 1] = 2.0 / 3.0;
        c[0] = -1.0 / 3.0;
        for (int _n(m - 1), i(1); i < _n; i++) c[i] = -1.0 / 4.0;
        c[m - 1] = 0.0;
        for (int _n(m), i(0); i < _n; i++)
          d[i] = 1.0 + ((i == 0 || i == m - 1) ? 1.0 / 3.0 : 1.0 / 4.0) *
                           p[cr + 1][i];
      }
      x = go(a, b, c, d);
      for (int _n(m), i(0); i < _n; i++) p[cr][i] = x[i];
      if (tx == cr) {
        break;
      }
    }
  }
  double r = p[tx][ty];
  printf("%.9lf", r);
  return 0;
}
