func_code_string: #include <bits/stdc++.h>   using namespace std;   struct point {     double x, y;     point() { x = y = 0.0; }     point(double A, double B) { x = A, y = B; }     double operator*(point B) { return x * B.x + y * B.y; }     point turn(double A) {       return point(x * cos(A) - y * sin(A), y * cos(A) + x * sin(A));     }   } zero, e, s, t;   double ans, L1, L2, L3, L4, ev, ew, sv, r;   double dis(point &A, point &B) {     return sqrt(((B.x - A.x) * (B.x - A.x)) + ((B.y - A.y) * (B.y - A.y)));   }   bool check(double mid) {     double A, B, C;     t = e.turn(ew * mid);     L2 = dis(t, zero);     L4 = sqrt(((L2) * (L2)) - ((r) * (r)));     C = acos(t * s / L1 / L2);     A = acos(r / L1);     B = acos(r / L2);     if (A + B - C > 1e-8) {       if (sv * mid - dis(s, t) > 1e-8) return true;       return false;     } else {       C -= A + B;       if (sv * mid - C * r - L3 - L4 > 1e-8) return true;       return false;     }   }   int main() {     scanf( %lf%lf%lf , &e.x, &e.y, &ev);     double R = dis(e, zero);     ew = ev / R;     scanf( %lf%lf%lf%lf , &s.x, &s.y, &sv, &r);     L1 = dis(s, zero);     L3 = sqrt(((L1) * (L1)) - ((r) * (r)));     double l = 0, r = dis(s, e);     while (r - l > 1e-8) {       double mid = (l + r) / 2.0;       if (check(mid))         ans = mid, r = mid;       else         l = mid;     }     printf( %lf n , ans);     return 0;   }   