#include <bits/stdc++.h>
using namespace std;
const int N = 1010, M = 1000010, P = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int INF = 0xcfcfcfcf;
const double eps = 1e-9, pi = asin(1) * 2;
inline long long read();
inline int ADD(int a, int b) { return a + b >= P ? a + b - P : a + b; }
inline int MINUS(int a, int b) { return a - b < 0 ? a - b + P : a - b; }
int n, m, s, t;
double dp[N][N];
double a[N][N];
inline void write() {
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= m + 1; j++) cerr << a[i][j] << " ";
    cerr << "\n";
  }
  cerr << "\n";
}
inline void gauss(int n) {
  for (int i = 1; i <= n; i++) {
    if (i == n) break;
    a[i][n + 1] /= a[i][i], a[i][i + 1] /= a[i][i], a[i][i] = 1;
    a[i + 1][n + 1] -= a[i + 1][i] * a[i][n + 1];
    a[i + 1][i + 1] -= a[i + 1][i] * a[i][i + 1];
    a[i + 1][i] = 0;
  }
  for (int i = n; i; i--) {
    a[i][n + 1] /= a[i][i], a[i][i] = 1;
    if (i == 1) break;
    a[i - 1][n + 1] -= a[i - 1][i] * a[i][n + 1];
    a[i - 1][i] = 0;
  }
}
inline long long read() {
  long long s = 0;
  bool flag = false;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') flag = true;
  for (; '0' <= ch && ch <= '9'; ch = getchar())
    s = (s << 3) + (s << 1) + (ch ^ '0');
  if (flag) return -s;
  return s;
}
int main() {
  n = read(), m = read(), s = read(), t = read();
  if (m == 1) {
    printf("%.10lf\n", (n - s) * 2.0);
    return 0;
  }
  for (int i = n - 1; i; i--) {
    a[1][1] = -2, a[1][2] = 1, a[1][m + 1] = -dp[i + 1][1] - 3;
    a[m][m] = -2, a[m][m - 1] = 1, a[m][m + 1] = -dp[i + 1][m] - 3;
    for (int j = 2; j < m; j++)
      a[j][j - 1] = a[j][j + 1] = 1, a[j][j] = -3,
               a[j][m + 1] = -dp[i + 1][j] - 4;
    gauss(m);
    for (int j = 1; j <= m; j++) dp[i][j] = a[j][m + 1];
  }
  printf("%.15lf\n", dp[s][t]);
  return 0;
}
