#include <bits/stdc++.h>
const double inf = 1.0e18;
const double pi = 3.1415926535897932384626433832795;
double xp, yp, vp;
double x, y, v, r;
struct Point {
  double x, y;
  Point(double tx = 0.0, double ty = 0.0) {
    x = tx;
    y = ty;
  }
};
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double scalar(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double scalar(Point o, Point a, Point b) {
  Point oa(a.x - o.x, a.y - o.y);
  Point ob(b.x - o.x, b.y - o.y);
  return scalar(oa, ob);
}
double dist(Point a, Point b) {
  Point d(b.x - a.x, b.y - a.y);
  return sqrt(d.x * d.x + d.y * d.y);
}
double distance(double tx, double ty) {
  Point a(x, y);
  Point b(tx, ty);
  double h = fabs(cross(a, b)) / dist(a, b);
  if (!(h < r && scalar(a, Point(0, 0), b) > 0 &&
        scalar(b, Point(0, 0), a) > 0))
    return dist(a, b);
  double res = sqrt(dist(Point(), a) * dist(Point(), a) - r * r);
  res += sqrt(dist(Point(), b) * dist(Point(), b) - r * r);
  double aa = acos(std::max(
      -1.0,
      std::min(1.0, scalar(a, b) / (dist(Point(), a) * dist(Point(), b)))));
  double a1 = acos(r / dist(Point(), a));
  double a2 = acos(r / dist(Point(), b));
  aa -= a1 + a2;
  res += aa * r;
  return res;
}
double fly(double x, double y) { return distance(x, y) / v; }
bool faster(double t) {
  double rp = sqrt(xp * xp + yp * yp);
  double ap = atan2(yp, xp);
  double fap = ap + t * (vp / rp);
  return fly(rp * cos(fap), rp * sin(fap)) < t;
}
int main() {
  std::cin >> xp >> yp >> vp;
  std::cin >> x >> y >> v >> r;
  double l = 0, r = inf;
  double ans;
  for (int i = 0; i < 200; i++) {
    ans = (l + r) / 2.0;
    if (faster(ans)) {
      r = ans;
    } else {
      l = ans;
    }
  }
  std::cout << std::fixed << std::setprecision(8) << ans;
  return 0;
}
