#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-7;
inline int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  return x * f;
}
int n, m, x, y, now;
double g[1010][1010], ans[1010][1010];
void Guass(int n, int band) {
  static int from[1010];
  for (int i = 1; i <= n; ++i) {
    from[i] = i;
  }
  for (int i = 1; i <= n; ++i) {
    int u = i, ext = 0;
    for (int j = i; j <= band; ++j) {
      if (fabs(g[i][j]) > eps) {
        u = j;
        break;
      }
      ++ext;
    }
    if (u ^ i) {
      swap(from[u], from[i]);
      for (int j = max(1, i - band + ext); j <= min(n, i + band - ext); ++j) {
        swap(g[i][j], g[u][j]);
      }
    }
    if (fabs(g[i][i]) < eps) continue;
    for (int j = i + 1; j <= min(n, i + band + ext); ++j) {
      double div = g[j][i] / g[i][i];
      for (int k = i; k <= min(n, i + band); ++k) {
        g[j][k] -= g[i][k] * div;
      }
      g[j][n + 1] -= g[i][n + 1] * div;
    }
  }
  for (int i = n; i >= 1; --i) {
    ans[now][from[i]] = g[i][n + 1];
    for (int j = i + 1; j <= min(n, i + band); ++j) {
      ans[now][from[i]] -= ans[now][from[j]] * g[i][j];
    }
    ans[now][from[i]] /= g[i][i];
  }
}
int main() {
  n = read(), m = read();
  int x = read(), y = read();
  if (m == 1) {
    printf("%.10lf\n", 2.0 * (n - x));
    return 0;
  }
  for (int i = n - 1; i >= 1; --i) {
    now = i;
    g[1][1] = g[m][m] = 2;
    g[1][2] = g[m][m - 1] = -1;
    g[1][m + 1] = 3 + ans[i + 1][1];
    g[m][m + 1] = 3 + ans[i + 1][m];
    for (int j = 2; j < m; ++j) {
      g[j][j] = 3;
      g[j][j - 1] = g[j][j + 1] = -1;
      g[j][m + 1] = 4 + ans[i + 1][j];
    }
    Guass(m, 1);
  }
  printf("%.10lf\n", ans[x][y]);
  return 0;
}
