// Задача "Электрик-ковбой Джо"
// XVI командный чемпионат школьников Санкт-Петербурга по программированию
// Автор задачи: Антон Феськов, feskov@rain.ifmo.ru
// Автор решения: Сергей Поромов, poromov@rain.ifmo.ru

import java.io.*;
import java.util.*;

public class joe_sp implements Runnable {

	public static void main(String[] args) {
		new Thread(new joe_sp()).run();
	}

	public void run() {
		try {
			Locale.setDefault(Locale.US);
			br = new BufferedReader(new FileReader(FILENAME + ".in"));
			out = new PrintWriter(FILENAME + ".out");
			solve();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	BufferedReader br;

	PrintWriter out;

	StringTokenizer st;

	String nextToken() throws IOException {
		while (st == null || !st.hasMoreTokens()) {
			st = new StringTokenizer(br.readLine());
		}
		return st.nextToken();
	}

	int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	void myAssert(boolean e, String s) {
		if (!e) {
			throw new Error("Assertion failure " + s);
		}
	}

	private static final String FILENAME = "joe";

	public void solve() throws IOException {
		double d = nextInt();
		double h1 = nextInt();
		double h2 = nextInt();
		double l = nextInt();
		if (h1 > h2) {
			double t = h1;
			h1 = h2;
			h2 = t;
		}
		double dh = Math.hypot(h2 - h1, d) - (h2 - h1);
		double ans = h1;
		if (dh <= l) {
		  if (dh > h1) {
		  	ans += h2;
		  } else {
				ans += h2 - h1 + dh;
			}
		} else {
			double h = (l * l - d * d) / (2 * l) + h2;
			if (h < l) {
			  ans += h2;
			} else {
			  ans += h2 - (h - l);
			}
		}
		out.println(ans);
	}
}
