#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
template <typename T>
inline void read(T &AKNOI) {
  T x = 0, flag = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') flag = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  AKNOI = flag * x;
}
int n, m, X, Y;
double f[N][N], a[N][N], b[N];
void Build(int x) {
  a[1][1] = a[m][m] = -2.0 / 3;
  a[1][2] = a[m][m - 1] = 1.0 / 3;
  b[1] = -f[x + 1][1] / 3 - 1;
  b[m] = -f[x + 1][m] / 3 - 1;
  for (int i = 2; i < m; ++i) {
    a[i][i - 1] = a[i][i + 1] = 1.0 / 4;
    a[i][i] = -3.0 / 4;
    b[i] = -f[x + 1][i] / 4 - 1;
  }
}
void Gauss(int x) {
  for (int i = 1; i < m; ++i) {
    double t = a[i + 1][i] / a[i][i];
    a[i + 1][i] = 0;
    a[i + 1][i + 1] -= t * a[i][i + 1];
    b[i + 1] -= t * b[i];
  }
  f[x][m] = b[m] / a[m][m];
  for (int i = m - 1; i >= 1; --i) {
    f[x][i] = (b[i] - a[i][i + 1] * f[x][i + 1]) / a[i][i];
  }
}
void solve() {
  read(n);
  read(m);
  read(X);
  read(Y);
  if (X == n) {
    printf("0.0000000000\n");
    return;
  }
  if (m == 1) {
    printf("%.10lf\n", 2.0 * (n - X));
    return;
  }
  for (int i = n - 1; i >= X; --i) {
    Build(i);
    Gauss(i);
  }
  printf("%.10lf\n", f[X][Y]);
}
int main() {
  solve();
  return 0;
}
