#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
struct pnt {
  double x, y;
  pnt(double xx = 0.0, double yy = 0.0) {
    x = xx;
    y = yy;
  }
};
pnt operator-(pnt a, pnt b) { return pnt(a.x - b.x, a.y - b.y); }
double sqr(double x) { return x * x; }
double vect(pnt a, pnt b) { return a.x * b.y - a.y * b.x; }
double scal(pnt a, pnt b) { return a.x * b.x + a.y * b.y; }
double dist(pnt a, pnt b) { return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y)); }
double distSegPnt(pnt a, pnt b, pnt c) {
  double ret = min(dist(a, c), dist(b, c));
  if (scal(b - a, c - a) > -EPS && scal(a - b, c - b) > -EPS)
    ret = min(ret, fabs(vect(b - a, c - a) / dist(a, b)));
  return ret;
}
double lenPath(pnt O, double r, pnt a, pnt b) {
  if (distSegPnt(a, b, O) + EPS >= r) return dist(a, b);
  double d1 = dist(O, a);
  double d2 = dist(O, b);
  double goA = sqrt(max(0.0, sqr(d1) - sqr(r)));
  double goB = sqrt(max(0.0, sqr(d2) - sqr(r)));
  double AOB = fabs(atan2(vect(a - O, b - O), scal(a - O, b - O)));
  AOB = min(AOB, 2 * M_PI - AOB);
  double alpha = acos(r / d1);
  double beta = acos(r / d2);
  double angle = max(0.0, AOB - alpha - beta);
  return goA + goB + angle * r;
}
pnt p, a;
double vp, v, r, R;
bool check(double timeGo) {
  double angle = timeGo * vp / R;
  pnt ps = pnt(p.x * cos(angle) - p.y * sin(angle),
               p.y * cos(angle) + p.x * sin(angle));
  return timeGo * v + EPS >= lenPath(pnt(), r, a, ps);
}
int main() {
  cin >> p.x >> p.y >> vp >> a.x >> a.y >> v >> r;
  R = dist(pnt(), p);
  double l = 0.0, r = 1e9, mid;
  for (int i = 0; i < 200; i++) {
    mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.10f\n", r);
  return 0;
}
