fun main(arr: Array<String>) {
    val inpt = readLine()!!.split(" ").map { it.toInt() }
    a = inpt[0]
    b = inpt[1]
    x = inpt[2]
    println(getAns(0.0, 90.0))
}

var a = 0
var b = 0
var x = 0

fun getAns(min:Double, max:Double):Double {
    if(x == a*a*b) {
        return 0.0
    }
    if(max-min <= 0.000000001) {
        return min
    }
    val mid = (max+min)/2
    var isSafe = false
    var triangleEdge = Math.tan(Math.toRadians(mid)) * a
    val remain = x - ((a * triangleEdge / 2) * a)
    val tmp = Math.round(remain * 100000)/100000.0
    if(remain < 0) {
        val squareEdge = Math.sqrt(x*2.0/a/Math.tan(Math.toRadians(90-mid)))
        isSafe = squareEdge <= b
    } else if (remain >= 0) {
        val t = remain / (a*a)
        isSafe = t+triangleEdge <= b
    } else {
        isSafe = triangleEdge <= b
    }
    if(isSafe) {
        return getAns(mid, max)
    } else {
        return getAns(min, mid)
    }
}