func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   T abs(T a) {     return a < 0 ? -a : a;   }   template <typename T>   T sqr(T a) {     return a * a;   }   const int INF = (int)1e9;   const long double EPS = 1e-9;   const long double PI = 3.1415926535897932384626433832795;   long double a, b, h;   inline pair<long double, long double> rotate(       const pair<long double, long double>& a, const long double& ang) {     return pair<long double, long double>(         a.first * cos(ang) + a.second * sin(ang),         -a.first * sin(ang) + a.second * cos(ang));   }   inline long double dist(const long double& w, const long double& h,                           const long double& ang) {     pair<long double, long double> pa(w * cos(ang), 0);     pair<long double, long double> push_back(0, w * sin(ang));     pair<long double, long double> v =         rotate(pair<long double, long double>(h, 0), ang - PI / 2);     pa.first += v.first;     pa.second += v.second;     push_back.first += v.first;     push_back.second += v.second;     long double A, B, C;     A = push_back.second - pa.second;     B = pa.first - push_back.first;     C = -A * pa.first - B * pa.second;     return (A * b + B * a + C) / sqrtl(A * A + B * B);   }   inline long double findMaxAng(const long double& w, const long double& h) {     long double lf = 0;     long double rg = PI / 2;     for (int i = 0; i < int(100); ++i) {       long double mid = lf + (rg - lf) / 2;       if (w * cos(mid) + h * sin(mid) > b)         lf = mid;       else         rg = mid;     }     return lf;   }   inline bool check(const long double& w, const long double& h) {     if (a + EPS < h) return false;     if (w <= b + EPS) return true;     long double lf = 0;     long double rg = findMaxAng(w, h);     for (int i = 0; i < int(200); ++i) {       long double d = (rg - lf) / 3;       long double ml = lf + d;       long double mr = rg - d;       if (dist(w, h, ml) > dist(w, h, mr))         lf = ml;       else         rg = mr;     }     return dist(w, h, lf) > -EPS;   }   int main() {     cin >> a >> b >> h;     long double lf = 0;     long double rg = h;     for (int i = 0; i < int(100); ++i) {       long double mid = lf + ((rg - lf) / 2);       if (check(h, mid) || check(mid, h))         lf = mid;       else         rg = mid;     }     if (lf < EPS) {       puts( My poor head =( );     } else {       cout.precision(10);       cout << fixed << lf << endl;     }     return 0;   }   