#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 1, w = 0;
  char x = 0;
  while (x < '0' || x > '9') {
    if (x == '-') f = -1;
    x = getchar();
  }
  while (x != EOF && x >= '0' && x <= '9') {
    w = (w << 3) + (w << 1) + (x ^ 48);
    x = getchar();
  }
  return w * f;
}
const int N = 1010;
int n, m, x, y;
double las[N], a[N][N], f[N][N];
inline void Gauss() {
  for (int i = 1; i <= m; i++) {
    if (i < m) a[i][i + 1] /= a[i][i];
    a[i][m + 1] /= a[i][i];
    a[i][i] = 1.0;
    a[i + 1][i + 1] -= a[i + 1][i] * a[i][i + 1];
    a[i + 1][m + 1] -= a[i + 1][i] * a[i][m + 1];
    a[i + 1][i] = 0.0;
  }
  for (int i = m - 1; i; i--) a[i][m + 1] -= a[i][i + 1] * a[i + 1][m + 1];
}
int main() {
  n = read(), m = read(), x = read(), y = read();
  if (m == 1) {
    printf("%.10lf\n", (double)2 * (n - x));
    return 0;
  }
  for (int i = n - 1; i >= x; i--) {
    for (int j = 1; j <= m; j++) las[j] = f[i + 1][j];
    a[1][1] = 2.0, a[1][2] = -1.0, a[1][m + 1] = 3.0 + las[1];
    a[m][m] = 2.0, a[m][m - 1] = -1.0, a[m][m + 1] = 3.0 + las[m];
    for (int j = 2; j < m; j++)
      a[j][j - 1] = -1.0, a[j][j] = 3.0, a[j][j + 1] = -1.0,
               a[j][m + 1] = 4.0 + las[j];
    Gauss();
    for (int j = 1; j <= m; j++) f[i][j] = a[j][m + 1];
  }
  printf("%.10lf", f[x][y]);
}
