#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void rd(T &x) {
  char ch;
  x = 0;
  bool fl = false;
  while (!isdigit(ch = getchar())) (ch == '-') && (fl = true);
  for (x = (ch ^ '0'); isdigit(ch = getchar()); x = x * 10 + (ch ^ '0'))
    ;
  (fl == true) && (x = -x);
}
template <class T>
inline void output(T x) {
  if (x / 10) output(x / 10);
  putchar(x % 10 + '0');
}
template <class T>
inline void ot(T x) {
  if (x < 0) putchar('-'), x = -x;
  output(x);
  putchar(' ');
}
template <class T>
inline void prt(T a[], int st, int nd) {
  for (register int i = st; i <= nd; ++i) ot(a[i]);
  putchar('\n');
}
namespace Miracle {
const int N = 1005;
int n, m;
int x, y;
double t[N][N];
double f[N][N];
void guass(int l) {
  for (register int i = 1; i < m; ++i) {
    double lp = t[i + 1][i] / t[i][i];
    for (register int j = i; j <= min(m, i + 2); ++j) {
      t[i + 1][j] = t[i + 1][j] - t[i][j] * lp;
    }
    t[i + 1][m + 1] = t[i + 1][m + 1] - t[i][m + 1] * lp;
  }
  for (register int i = m; i >= 1; --i) {
    t[i][m + 1] = t[i][m + 1] - t[i][i + 1] * f[l][i + 1];
    f[l][i] = t[i][m + 1] / t[i][i];
  }
}
int main() {
  rd(n);
  rd(m);
  rd(x);
  rd(y);
  if (m == 1) {
    for (register int i = n - 1; i >= x; --i) {
      f[i][1] = f[i + 1][1] + 2;
    }
  } else {
    for (register int i = n - 1; i >= x; --i) {
      for (register int j = 1; j <= m; ++j) {
        if (j == 1) {
          t[j][1] = 2;
          t[j][2] = -1;
          t[j][m + 1] = f[i + 1][1] + 3;
        } else if (j == m) {
          t[j][m] = 2;
          t[j][m - 1] = -1;
          t[j][m + 1] = f[i + 1][m] + 3;
        } else {
          t[j][j] = 3;
          t[j][j + 1] = -1;
          t[j][j - 1] = -1;
          t[j][m + 1] = f[i + 1][j] + 4;
        }
      }
      guass(i);
    }
  }
  printf("%.10lf", f[x][y]);
  return 0;
}
}  // namespace Miracle
signed main() {
  Miracle::main();
  return 0;
}
