#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  char c = getchar();
  x = 0;
  bool f = 0;
  while (!isdigit(c)) f |= (c == '-'), c = getchar();
  while (isdigit(c)) x = x * 10 + (c ^ 48), c = getchar();
  x = f ? -x : x;
}
const int N = 1e3 + 5;
double f[N], a[N][N];
void gauss(int n) {
  for (int i = 1; i <= n; ++i) {
    if (i < n) a[i][i + 1] /= a[i][i];
    a[i][n + 1] /= a[i][i], a[i][i] = 1;
    a[i + 1][i + 1] -= a[i][i + 1] * a[i + 1][i],
        a[i + 1][n + 1] -= a[i][n + 1] * a[i + 1][i], a[i + 1][i] = 0;
  }
  for (int i = n - 1; i >= 1; --i) a[i][n + 1] -= a[i][i + 1] * a[i + 1][n + 1];
}
int main() {
  int n, m, x, y;
  read(n), read(m), read(x), read(y);
  n -= x - 1;
  if (m == 1) return printf("%.10lf", 2.0 * (n - 1)), 0;
  for (int i = 1; i <= n - 1; ++i) {
    a[1][1] = 2, a[1][2] = -1, a[1][m + 1] = f[1] + 3;
    a[m][m] = 2, a[m][m - 1] = -1, a[m][m + 1] = f[m] + 3;
    for (int i = 2; i <= m - 1; ++i) a[i][i - 1] = a[i][i + 1] = -1;
    for (int i = 2; i <= m - 1; ++i) a[i][i] = 3, a[i][m + 1] = f[i] + 4;
    gauss(m);
    for (int i = 1; i <= m; ++i) f[i] = a[i][m + 1];
  }
  printf("%.10lf", f[y]);
}
