#include <bits/stdc++.h>
using namespace std;
int toInt(string s) {
  istringstream sin(s);
  int t;
  sin >> t;
  return t;
}
template <class T>
string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T>
void chmin(T &t, T f) {
  if (t > f) t = f;
}
template <class T>
void chmax(T &t, T f) {
  if (t < f) t = f;
}
double xp, yp, vp;
double x, y, v, r, R;
double O, P;
double T, L, l;
double pi = acos(-1);
double getT(double x) {
  if (x > pi) x = 2 * pi - x;
  if (x > P) return ((x - P) * r + L) / v;
  return sqrt(l * l + R * R - 2 * l * R * cos(x)) / v;
}
int main() {
  cin >> xp >> yp >> vp;
  cin >> x >> y >> v >> r;
  double lo, hi;
  R = hypot(xp, yp);
  if (x * yp == xp * y) {
    O = 0;
    if (x * xp < 0 || y * yp < 0) O += pi;
  } else {
    O = acos((x * xp + y * yp) / hypot(xp, yp) / hypot(x, y));
    if (x * yp - xp * y < 0) O = 2 * pi - O;
  }
  l = hypot(x, y);
  L = sqrt(l * l - r * r) + sqrt(R * R - r * r);
  P = acos(r / l) + acos(r / R);
  double t = 2 * pi * R / vp;
  int tt = fabs(R - l) / v;
  int r = tt / t;
  lo = 0, hi = t * (r + 2);
  int i;
  for (i = (0); i < (50); i++) {
    double m = (lo + hi) / 2;
    double theta = O + vp * m / R;
    r = theta / pi / 2;
    theta -= pi * 2 * r;
    if (getT(theta) < m)
      hi = m;
    else
      lo = m;
  }
  printf("%.08lf\n", lo);
  return 0;
}
