#include <bits/stdc++.h>
using namespace std;
int ToInt(string& s, int len) {
  int r = 0;
  for (int i = 0, max_ = (len); i < max_; ++i) {
    r *= 10;
    r += s[i] - '0';
  }
  return r;
}
int GCD(int a, int b) { return b != 0 ? GCD(b, a % b) : a; }
int LCM(int a, int b) { return a * (b / GCD(a, b)); }
long long Pow(long long n, long long e) {
  if (e == 0) return 1;
  if (e == 1)
    return n;
  else if (e & 1) {
    long long t = Pow(n, e / 2);
    return n * t * t;
  } else {
    long long t = Pow(n, e / 2);
    return t * t;
  }
}
double R, R2;
int xp, yp, vp, x, y, v, r;
double Distance(double t) {
  double theta = atan2((double)yp, xp) + t * vp / (double)R;
  double currXP = R * cos(theta);
  double currYP = R * sin(theta);
  double len = sqrt((currXP - x) * (currXP - x) + (currYP - y) * (currYP - y));
  double OAB =
      ((-currXP) * (x - currXP) + (-currYP) * (y - currYP)) / (R * len);
  double OBA = ((-x) * (currXP - x) + (-y) * (currYP - y)) / (R2 * len);
  double H = sin(acos(OAB)) * R;
  bool acute1 = OAB > 0.0;
  bool acute2 = OBA > 0.0;
  bool close = H < r;
  if (acute1 && acute2 && close) {
    double d1 = sqrt(currXP * currXP + currYP * currYP - (double)r * r);
    double d2 = sqrt(x * x + y * y - (double)r * r);
    double AOB = acos((currXP * x + currYP * y) / (R * R2));
    double AOC = asin(d1 / R);
    double BOD = asin(d2 / R2);
    double COD = AOB - AOC - BOD;
    double d3 = r * COD;
    return d1 + d2 + d3;
  } else
    return sqrt((currXP - x) * (currXP - x) + (currYP - y) * (currYP - y));
}
int main() {
  while (scanf("%d %d %d %d %d %d %d", &xp, &yp, &vp, &x, &y, &v, &r) == 7) {
    R = sqrt((double)xp * xp + yp * yp);
    R2 = sqrt((double)x * x + y * y);
    double minT = 0.0, maxT = 1.0e6, currT, dist;
    for (int i = 0, max_ = (500); i < max_; ++i) {
      currT = (minT + maxT) * 0.5;
      dist = Distance(currT);
      if (dist >= currT * v)
        minT = currT;
      else
        maxT = currT;
    }
    printf("%.9lf\n", currT);
  }
  return 0;
}
