#include <bits/stdc++.h>
using namespace std;
template <class T>
void splitstr(const string &s, vector<T> &out) {
  istringstream in(s);
  out.clear();
  copy(istream_iterator<T>(in), istream_iterator<T>(), back_inserter(out));
}
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
static void redirect(int argc, const char **argv) {
  if (argc > 1) {
    static filebuf f;
    f.open(argv[1], ios::in);
    cin.rdbuf(&f);
    if (!cin) {
      cerr << "Failed to open '" << argv[1] << "'" << endl;
      exit(1);
    }
  }
  if (argc > 2) {
    static filebuf f;
    f.open(argv[2], ios::out | ios::trunc);
    cout.rdbuf(&f);
    if (!cout) {
      cerr << "Failed to open '" << argv[2] << "'" << endl;
    }
  }
}
static double dot(const complex<double> &a, const complex<double> &b) {
  return real(conj(a) * b);
}
static double cross(const complex<double> &a, const complex<double> &b) {
  return imag(conj(a) * b);
}
static double dist(complex<double> a, complex<double> b, double r) {
  double ab = abs(b - a);
  if (ab < 1e-9) return ab;
  double mdist = abs(cross(a, b - a) / ab);
  if (mdist >= r) return ab;
  if (dot(-a, b - a) < 0.0 || dot(-b, a - b) < 0.0) return ab;
  double as = sqrt(dot(a, a) - r * r);
  double bs = sqrt(dot(b, b) - r * r);
  double aang = arg(complex<double>(r, as));
  double bang = arg(complex<double>(r, bs));
  double best = HUGE_VAL;
  double aa[2] = {arg(a) - aang, arg(a) + aang};
  double bb[2] = {arg(b) - bang, arg(b) + bang};
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++) {
      double d = aa[i] - bb[j];
      while (
          d <
          -3.1415926535897932384626433832795028841971693993751058209749445923078164)
        d +=
            2 *
            3.1415926535897932384626433832795028841971693993751058209749445923078164;
      while (
          d >=
          3.1415926535897932384626433832795028841971693993751058209749445923078164)
        d -=
            2 *
            3.1415926535897932384626433832795028841971693993751058209749445923078164;
      best = min(best, abs(d));
    }
  return as + bs + best * r;
}
int main(int argc, const char **argv) {
  redirect(argc, argv);
  double xp, yp, vp;
  double x, y, v, r;
  cin >> xp >> yp >> vp >> x >> y >> v >> r;
  complex<double> xy0(x, y);
  complex<double> xyp0(xp, yp);
  double rp = abs(xyp0);
  double L = 0.0;
  double R = 1e9;
  while (R - L > 1e-8) {
    double t = (L + R) * 0.5;
    complex<double> xyp = xyp0 * exp(complex<double>(0, vp / rp * t));
    double d = dist(xy0, xyp, r);
    if (d <= v * t)
      R = t;
    else
      L = t;
  }
  cout.precision(9);
  cout << L << '\n';
  return 0;
}
