#include <bits/stdc++.h>
using namespace std;
double getX(const pair<double, double>& pt) { return pt.first; }
double getY(const pair<double, double>& pt) { return pt.second; }
const int INF = std::numeric_limits<int>::max();
long double dist(long double x0, long double y0, long double x1, long double y1,
                 long double r) {
  long double d = hypotl(x0 - x1, y0 - y1);
  if (d < 1e-8) return d;
  long double t = (x0 * (x0 - x1) + y0 * (y0 - y1)) /
                  ((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));
  if (t < 0 || t > 1) return d;
  if (hypotl(x0 + (x1 - x0) * t, y0 + (y1 - y0) * t) >= r) {
    return d;
  }
  long double d1 = hypotl(x0, y0);
  long double d2 = hypotl(x1, y1);
  long double result =
      sqrtl(x0 * x0 + y0 * y0 - r * r) + sqrtl(x1 * x1 + y1 * y1 - r * r);
  long double an = fabs(atan2l(y0, x0) - atan2l(y1, x1));
  if (an > 3.14159265358979323846) an = 2 * 3.14159265358979323846 - an;
  an -= acosl(r / d1);
  an -= acosl(r / d2);
  if (an < 0) return 0.0;
  return result + an * r;
}
void solve() {
  long double xp, yp, vp, x, y, v, rr;
  cin >> xp >> yp >> vp;
  cin >> x >> y >> v >> rr;
  long double R = hypotl(xp, yp);
  long double startPhi = atan2l(yp, xp);
  long double l = 0, r = 1000 * 1000.0;
  for (int iter = 0; iter < int(1000); ++iter) {
    long double m = (l + r) / 2;
    long double px = cosl(startPhi + m * vp / R) * R;
    long double py = sinl(startPhi + m * vp / R) * R;
    if (dist(x, y, px, py, rr) < m * v) {
      r = m;
    } else {
      l = m;
    }
  }
  cout << setprecision(10) << fixed << l << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  solve();
  return 0;
}
