#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T Max(T a, T b) {
  if (a > b)
    return a;
  else
    return b;
}
template <class T>
inline T Min(T a, T b) {
  if (a < b)
    return a;
  else
    return b;
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / gcd(a, b));
}
template <class T>
inline T TripleMax(T a, T b, T c) {
  return Max(Max(a, b), c);
}
template <class T>
inline T TripleMin(T a, T b, T c) {
  return Min(Min(a, b), c);
}
const long double pi = M_PI;
const long double e = M_E;
const long double sqrt2 = M_SQRT2;
const int maxt = 1000000;
const long double eps = 1e-7;
int xp, yp, vp;
int x, y, vmax, r;
double lt, rt, mid;
long double ret;
int check(double t) {
  double xf, yf;
  double br;
  double dis;
  double alefa;
  br = sqrt(xp * xp + yp * yp);
  alefa = vp * t / br;
  xf = xp * cos(alefa) - yp * sin(alefa);
  yf = yp * cos(alefa) + xp * sin(alefa);
  if (fabs(xf - x) < eps) {
    dis = abs(xf);
  } else {
    double k = (yf - y) / (xf - x);
    double b = yf - k * xf;
    dis = (abs(b)) / (sqrt(k * k + 1));
  }
  if (dis < r - eps) {
    double disa = sqrt(x * x + y * y);
    double disb = sqrt(xf * xf + yf * yf);
    double disab = sqrt((x - xf) * (x - xf) + (y - yf) * (y - yf));
    double theta =
        acos((disa * disa + disb * disb - disab * disab) / (2 * disa * disb));
    double oab, oba;
    oab = (disa * disa + disab * disab - disb * disb) / (2 * disab * disa);
    oba = (disb * disb + disab * disab - disa * disa) / (2 * disb * disab);
    if (oab < pi / 2 && oba < pi / 2 && oab >= 0 && oba >= 0) {
      double atheta;
      double btheta;
      double rettheta;
      double fidis;
      atheta = acos(r / disa);
      btheta = acos(r / disb);
      rettheta = theta - atheta - btheta;
      fidis =
          sqrt(disa * disa - r * r) + sqrt(disb * disb - r * r) + rettheta * r;
      if (fidis / vmax > t) {
        return 0;
      } else {
        return 1;
      }
    } else {
      double fidis = sqrt((x - xf) * (x - xf) + (y - yf) * (y - yf));
      if (fidis / vmax > t) {
        return 0;
      } else {
        return 1;
      }
    }
  } else {
    double fidis = sqrt((x - xf) * (x - xf) + (y - yf) * (y - yf));
    if (fidis / vmax > t) {
      return 0;
    } else {
      return 1;
    }
  }
}
int main(int argc, const char* argv[]) {
  cin >> xp >> yp >> vp;
  cin >> x >> y >> vmax >> r;
  lt = 0;
  rt = maxt;
  while (fabs(lt - rt) > 0.000000001) {
    mid = (lt + rt) / 2;
    if (check(mid) == 1) {
      rt = mid;
    } else {
      lt = mid;
    }
  }
  if (rt < eps) {
    rt = 0;
  }
  cout << setprecision(15) << rt << endl;
  return 0;
}
