import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author AnandOza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    }

    static class CColon {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }

    static class Util {
        public static String formatDouble(double x) {
            return String.format("%.15f", x);
        }

        private Util() {
        }

    }
}
 import java.io.OutputStream; OutputStream java.io import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.util.StringTokenizer; StringTokenizer java.util import java.io.IOException; IOException java.io import java.io.BufferedReader; BufferedReader java.io import java.io.InputStreamReader; InputStreamReader java.io import java.io.InputStream; InputStream java.io public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    }

    static class CColon {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }

    static class Util {
        public static String formatDouble(double x) {
            return String.format("%.15f", x);
        }

        private Util() {
        }

    }
} Main public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    } main {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    } InputStream inputStream = System.in; inputStream System.in System System.in OutputStream outputStream = System.out; outputStream System.out System System.out InputReader in = new InputReader(inputStream); in new InputReader(inputStream) PrintWriter out = new PrintWriter(outputStream); out new PrintWriter(outputStream) CColon solver = new CColon(); solver new CColon() solver.solve(1, in, out) solver.solve solver 1 in out out.close() out.close out String[] args args static class CColon {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        }

    } CColon public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        } solve {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        } double a = in.nextInt() a in.nextInt() in.nextInt in b = in.nextInt(); b in.nextInt() in.nextInt in double h = in.nextInt() h in.nextInt() in.nextInt in m = in.nextInt(); m in.nextInt() in.nextInt in double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI); x1 a * Math.cos((h + m / 60) / 12 * 2 * Math.PI) a Math.cos((h + m / 60) / 12 * 2 * Math.PI) Math.cos Math (h + m / 60) / 12 * 2 * Math.PI (h + m / 60) / 12 * 2 * Math.PI (h + m / 60) / 12 (h + m / 60) h m / 60 m 60 12 2 Math.PI Math Math.PI double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI); y1 a * Math.sin((h + m / 60) / 12 * 2 * Math.PI) a Math.sin((h + m / 60) / 12 * 2 * Math.PI) Math.sin Math (h + m / 60) / 12 * 2 * Math.PI (h + m / 60) / 12 * 2 * Math.PI (h + m / 60) / 12 (h + m / 60) h m / 60 m 60 12 2 Math.PI Math Math.PI double x2 = b * Math.cos(m / 60 * 2 * Math.PI); x2 b * Math.cos(m / 60 * 2 * Math.PI) b Math.cos(m / 60 * 2 * Math.PI) Math.cos Math m / 60 * 2 * Math.PI m / 60 * 2 * Math.PI m / 60 m 60 2 Math.PI Math Math.PI double y2 = b * Math.sin(m / 60 * 2 * Math.PI); y2 b * Math.sin(m / 60 * 2 * Math.PI) b Math.sin(m / 60 * 2 * Math.PI) Math.sin Math m / 60 * 2 * Math.PI m / 60 * 2 * Math.PI m / 60 m 60 2 Math.PI Math Math.PI out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2))) out.println out Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)) Util.formatDouble Util Math.hypot(x1 - x2, y1 - y2) Math.hypot Math x1 - x2 x1 x2 y1 - y2 y1 y2 int testNumber testNumber InputReader in in PrintWriter out out static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    } InputReader public BufferedReader reader; reader public StringTokenizer tokenizer; tokenizer public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        } InputReader {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        } reader = new BufferedReader(new InputStreamReader(stream), 32768) reader new BufferedReader(new InputStreamReader(stream), 32768) tokenizer = null tokenizer null InputStream stream stream public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        } next {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        } while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            } tokenizer == null || !tokenizer.hasMoreTokens() tokenizer == null tokenizer null !tokenizer.hasMoreTokens() tokenizer.hasMoreTokens() tokenizer.hasMoreTokens tokenizer {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            } try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                } IOException e {
                    throw new RuntimeException(e);
                } throw new RuntimeException(e); new RuntimeException(e) {
                    tokenizer = new StringTokenizer(reader.readLine());
                } tokenizer = new StringTokenizer(reader.readLine()) tokenizer new StringTokenizer(reader.readLine()) return tokenizer.nextToken(); tokenizer.nextToken() tokenizer.nextToken tokenizer public int nextInt() {
            return Integer.parseInt(next());
        } nextInt {
            return Integer.parseInt(next());
        } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next static class Util {
        public static String formatDouble(double x) {
            return String.format("%.15f", x);
        }

        private Util() {
        }

    } Util public static String formatDouble(double x) {
            return String.format("%.15f", x);
        } formatDouble {
            return String.format("%.15f", x);
        } return String.format("%.15f", x); String.format("%.15f", x) String.format String "%.15f" x double x x private Util() {
        } Util {
        } public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    }

    static class CColon {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }

    static class Util {
        public static String formatDouble(double x) {
            return String.format("%.15f", x);
        }

        private Util() {
        }

    }
} public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    }

    static class CColon {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }

    static class Util {
        public static String formatDouble(double x) {
            return String.format("%.15f", x);
        }

        private Util() {
        }

    }
} Main
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author AnandOza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CColon solver = new CColon();
        solver.solve(1, in, out);
        out.close();
    }

    static class CColon {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            double a = in.nextInt(), b = in.nextInt();
            double h = in.nextInt(), m = in.nextInt();

            double x1 = a * Math.cos((h + m / 60) / 12 * 2 * Math.PI);
            double y1 = a * Math.sin((h + m / 60) / 12 * 2 * Math.PI);
            double x2 = b * Math.cos(m / 60 * 2 * Math.PI);
            double y2 = b * Math.sin(m / 60 * 2 * Math.PI);

            out.println(Util.formatDouble(Math.hypot(x1 - x2, y1 - y2)));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }

    static class Util {
        public static String formatDouble(double x) {
            return String.format("%.15f", x);
        }

        private Util() {
        }

    }
}

