#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;
}
