#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define SIZE 100
#define rep(i, N) for (i = 0; i < N; i++) //制御変数iを用いてN回転
#define array(N, t) (t*)calloc(N, sizeof(t)) //t型N要素の1次元配列を動的確保後0クリア(freeを忘れずに)
#define zero(a); {int iter; rep(iter, sizeof(a)/sizeof((a)[0])) (a)[iter]=0;} //1次元配列aのゼロ初期化?
typedef long long ll;
void print_log(); //とりあえず文字を出力してどこまで実行できているか確認(for debug)
void printa_int(int *a, int size); //int型の1次元配列aを出力(for debug)

int main() {
    int A, B, H, M;
    long double angle, ans;
    scanf("%d %d %d %d", &A, &B, &H, &M);
    angle = 30.0 * H - 5.5 * M;
    if (angle > 180) angle -= 180;
    else if (angle < -180) angle += 180;
    ans = powl(A * A + B * B - 2.0 * A * B * cosl(angle * M_PI / 180.0),0.5);
    printf("%.20llf\n", ans);
    return 0;
}

void print_log() {
    printf("===finish!===\n");
}

void printa_int(int *a, int size) {
    int i;
    printf("[");
    for (i = 0; i < size; i++)
        printf("%d, ", a[i]);
    printf("]\n");
}