#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  return os << '(' << p.first << ',' << p.second << ')';
}
const double PI = acos(-1);
const double EPS = 1e-9;
struct Line {
  complex<double> pos, dir;
  Line() {}
  Line(complex<double> p, complex<double> d) : pos(p), dir(d) {}
};
double Dot(complex<double> p1, complex<double> p2) {
  return real(conj(p1) * p2);
}
double Cross(complex<double> p1, complex<double> p2) {
  return imag(conj(p1) * p2);
}
complex<double> Proj(const complex<double> &a, const complex<double> &b) {
  return b * Dot(a, b) / norm(b);
}
complex<double> Perf(const Line &l, const complex<double> &p) {
  complex<double> a(p - l.pos);
  return (l.pos + Proj(a, l.dir));
}
pair<complex<double>, complex<double> > Tangent(complex<double> p,
                                                complex<double> c, double r) {
  p -= c;
  complex<double> a = r * r / norm(p) * p;
  ;
  complex<double> b =
      r * sqrt(norm(p) - r * r) / norm(p) * (p * complex<double>(0, 1));
  return make_pair(c + a + b, c + a - b);
}
double DistanceSP(Line l, complex<double> p) {
  complex<double> q = Proj(p - l.pos, l.dir);
  if (Dot(q, l.dir) < 0 || abs(q) > abs(l.dir))
    return min(abs(p - l.pos), abs(p - (l.pos + l.dir)));
  else
    return abs(l.pos + q - p);
}
double Length(complex<double> a, complex<double> b, double r) {
  if (DistanceSP(Line(a, b - a), complex<double>(0, 0)) > r - EPS)
    return abs(b - a);
  pair<complex<double>, complex<double> > pa =
      Tangent(a, complex<double>(0, 0), r);
  pair<complex<double>, complex<double> > pb =
      Tangent(b, complex<double>(0, 0), r);
  double l1 =
      abs(pa.first - a) + abs(pb.first - b) + abs(r * arg(pa.first / pb.first));
  double l2 = abs(pa.first - a) + abs(pb.second - b) +
              abs(r * arg(pa.first / pb.second));
  double l3 = abs(pa.second - a) + abs(pb.first - b) +
              abs(r * arg(pa.second / pb.first));
  double l4 = abs(pa.second - a) + abs(pb.second - b) +
              abs(r * arg(pa.second / pb.second));
  return min(min(l1, l2), min(l3, l4));
}
int main() {
  for (int xp, yp, vp, x, y, v, r; cin >> xp >> yp >> vp >> x >> y >> v >> r;) {
    double rp = hypot(xp, yp), theta0 = atan2(yp, xp), wp = vp / rp;
    double lo = 0, hi = 1e10;
    for (int _ = int(0); _ < int(100); _++) {
      double t = (lo + hi) / 2;
      double theta = theta0 + wp * t;
      double xt = rp * cos(theta), yt = rp * sin(theta);
      double len = Length(complex<double>(x, y), complex<double>(xt, yt), r);
      if (len / v <= t)
        hi = t;
      else
        lo = t;
    }
    printf("%.10f\n", lo);
  }
  return 0;
}
