

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	}


	public static long d(long n) {
		String a=String.valueOf(n);
		return (long)a.length();
	}

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} import java.math.BigDecimal; BigDecimal java.math import java.math.RoundingMode; RoundingMode java.math import java.util.Scanner; Scanner java.util public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	}


	public static long d(long n) {
		String a=String.valueOf(n);
		return (long)a.length();
	}

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} Main static Scanner scanner; scanner public static void main(String[] args) {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	} main {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	} scanner = new Scanner(System.in) scanner new Scanner(System.in) double a=gd(); a gd() gd double b=gd(); b gd() gd double h=gd(); h gd() gd double m=gd(); m gd() gd BigDecimal hk=BigDecimal.valueOf((h*60+m)/2); hk BigDecimal.valueOf((h*60+m)/2) BigDecimal.valueOf BigDecimal (h*60+m)/2 (h*60+m) h*60 h 60 m 2 BigDecimal mk=BigDecimal.valueOf(m*6); mk BigDecimal.valueOf(m*6) BigDecimal.valueOf BigDecimal m*6 m 6 BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue())); k BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue())) BigDecimal.valueOf BigDecimal Math.abs(hk.subtract(mk).doubleValue()) Math.abs Math hk.subtract(mk).doubleValue() hk.subtract(mk).doubleValue hk.subtract(mk) hk.subtract hk mk if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k); k.doubleValue()>180 k.doubleValue() k.doubleValue k 180 k=BigDecimal.valueOf(360).subtract(k) k BigDecimal.valueOf(360).subtract(k) BigDecimal.valueOf(360).subtract BigDecimal.valueOf(360) BigDecimal.valueOf BigDecimal 360 k k=BigDecimal.valueOf(Math.PI).multiply(k) k BigDecimal.valueOf(Math.PI).multiply(k) BigDecimal.valueOf(Math.PI).multiply BigDecimal.valueOf(Math.PI) BigDecimal.valueOf BigDecimal Math.PI Math Math.PI k k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP) k k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP) k.divide k BigDecimal.valueOf(180) BigDecimal.valueOf BigDecimal 180 11 RoundingMode.HALF_UP RoundingMode RoundingMode.HALF_UP double s=a*a+b*b; s a*a+b*b a*a a a b*b b b k=BigDecimal.valueOf(Math.cos(k.doubleValue())) k BigDecimal.valueOf(Math.cos(k.doubleValue())) BigDecimal.valueOf BigDecimal Math.cos(k.doubleValue()) Math.cos Math k.doubleValue() k.doubleValue k k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b)) k k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b)) k.multiply(BigDecimal.valueOf(a)).multiply k.multiply(BigDecimal.valueOf(a)) k.multiply k BigDecimal.valueOf(a) BigDecimal.valueOf BigDecimal a BigDecimal.valueOf(2*b) BigDecimal.valueOf BigDecimal 2*b 2 b System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue())) System.out.print System.out System System.out Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()) Math.sqrt Math BigDecimal.valueOf(s).subtract(k).doubleValue() BigDecimal.valueOf(s).subtract(k).doubleValue BigDecimal.valueOf(s).subtract(k) BigDecimal.valueOf(s).subtract BigDecimal.valueOf(s) BigDecimal.valueOf BigDecimal s k String[] args args public static long d(long n) {
		String a=String.valueOf(n);
		return (long)a.length();
	} d {
		String a=String.valueOf(n);
		return (long)a.length();
	} String a=String.valueOf(n); a String.valueOf(n) String.valueOf String n return (long)a.length(); (long)a.length() a.length a long n n // 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	} gs {
		return scanner.next();
	} return scanner.next(); scanner.next() scanner.next scanner // intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	} gi {
		return Integer.parseInt(scanner.next());
	} return Integer.parseInt(scanner.next()); Integer.parseInt(scanner.next()) Integer.parseInt Integer scanner.next() scanner.next scanner // longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	} gl {
		return Long.parseLong(scanner.next());
	} return Long.parseLong(scanner.next()); Long.parseLong(scanner.next()) Long.parseLong Long scanner.next() scanner.next scanner // doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	} gd {
		return Double.parseDouble(scanner.next());
	} return Double.parseDouble(scanner.next()); Double.parseDouble(scanner.next()) Double.parseDouble Double scanner.next() scanner.next scanner public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	}


	public static long d(long n) {
		String a=String.valueOf(n);
		return (long)a.length();
	}

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	}


	public static long d(long n) {
		String a=String.valueOf(n);
		return (long)a.length();
	}

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} Main


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

        double a=gd();
        double b=gd();
        double h=gd();
        double m=gd();

        //System.out.println("No");

        BigDecimal hk=BigDecimal.valueOf((h*60+m)/2);
        BigDecimal mk=BigDecimal.valueOf(m*6);
        BigDecimal k=BigDecimal.valueOf(Math.abs(hk.subtract(mk).doubleValue()));
        if (k.doubleValue()>180) k=BigDecimal.valueOf(360).subtract(k);
        k=BigDecimal.valueOf(Math.PI).multiply(k);
        k=k.divide(BigDecimal.valueOf(180), 11, RoundingMode.HALF_UP);
        double s=a*a+b*b;
        k=BigDecimal.valueOf(Math.cos(k.doubleValue()));
        k=k.multiply(BigDecimal.valueOf(a)).multiply(BigDecimal.valueOf(2*b));

        System.out.print(Math.sqrt(BigDecimal.valueOf(s).subtract(k).doubleValue()));
	}


	public static long d(long n) {
		String a=String.valueOf(n);
		return (long)a.length();
	}

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
}