#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const double PI = acos(-1.0);
int sgn(double x) { return x < -eps ? -1 : x > eps; }
struct P {
  double x, y;
  P() {}
  P(double x, double y) : x(x), y(y) {}
  P operator-(const P& p) const { return P(x - p.x, y - p.y); }
  P operator+(const P& p) const { return P(x + p.x, y + p.y); }
  double operator*(const P& p) const { return x * p.y - y * p.x; }
  double operator&(const P& p) const { return x * p.x + y * p.y; }
  double getA() const { return atan2(y, x); }
  P operator*(const double& d) const { return P(x * d, y * d); }
  P rot(const double& d) const {
    return P(x * cos(d) - y * sin(d), x * sin(d) + y * cos(d));
  }
  bool operator==(const P& p) const {
    return sgn(x - p.x) == 0 && sgn(y - p.y) == 0;
  }
  void init() { scanf("%lf%lf", &x, &y); }
  double norm() const { return hypot(x, y); }
} p, o;
double vp, v, r;
bool ins(const P& u, const P& v) {
  double A = (v - u) & (v - u);
  double B = 2.0 * ((v - u) & u);
  double C = (u & u) - r * r;
  double D = B * B - 4.0 * A * C;
  if (sgn(D) < 0) return false;
  D = sqrt(fabs(D));
  double lhs = (-B + D) / (2 * A);
  double rhs = (-B - D) / (2 * A);
  return sgn(lhs) > 0 && sgn(lhs - 1) < 0 && sgn(rhs) > 0 && sgn(rhs - 1) < 0 &&
         sgn(lhs - rhs);
}
void getP(const P& p, P* ret) {
  double d = p.norm();
  double beta = asin(r / d);
  double dr = sqrt(fabs(d * d - r * r));
  ret[0] = p + (P(0.0, 0.0) - p).rot(beta) * (dr / d);
  ret[1] = p + (P(0.0, 0.0) - p).rot(-beta) * (dr / d);
}
double getT(const P& p, const P& A, const P& B) {
  double h = fabs((p - A) * (B - A)) / (B - A).norm();
  double d = (p - A).norm();
  return sqrt(fabs(d * d - h * h));
}
double sol(double t) {
  double R = p.norm();
  double alpha = t / (R / vp);
  P lhs = o;
  P rhs = p.rot(alpha);
  if (ins(lhs, rhs)) {
    P pA[2], pB[2];
    getP(lhs, pA);
    getP(rhs, pB);
    double ret = 1e100;
    for (int i = 0; i < 2; i++) {
      for (int j = 0; j < 2; j++) {
        double alpha = fabs(pA[i].getA() - pB[j].getA());
        ret = min(ret, (lhs - pA[i]).norm() + (rhs - pB[j]).norm() +
                           min(alpha, 2 * PI - alpha) * r);
      }
    }
    return ret / v;
  } else {
    return (lhs - rhs).norm() / v;
  }
}
int main() {
  double L = 0.0, R = 1e10, mid;
  p.init();
  scanf("%lf", &vp);
  o.init();
  scanf("%lf%lf", &v, &r);
  if (p == o) {
    printf("%.10f\n", 0.0);
    return 0;
  }
  for (int i = 0; i < 200; i++) {
    mid = (L + R) / 2.0;
    if (sgn(sol(mid) - mid) <= 0)
      R = mid;
    else
      L = mid;
  }
  printf("%.10f\n", R);
  return 0;
}
