#include <bits/stdc++.h>
using namespace std;
const long double INF = 1e6, EPS = 1e-10;
int x11, y11, v1, x, y, v, r;
long double R;
bool equal(long double a, long double b) { return (fabsl(a - b) < EPS); }
bool les(long double a, long double b) { return (b - a > EPS); }
bool mor(long double a, long double b) { return (a - b > EPS); }
struct point {
  long double x, y;
  point() : x(0), y(0) {}
  point(long double a, long double b) : x(a), y(b) {}
  point(point a, point b) : x(b.x - a.x), y(b.y - a.y) {}
  long double len() { return (sqrtl(x * x + y * y)); }
};
long double dot(point a, point b) { return (a.x * b.x + a.y * b.y); }
long double cross(point a, point b) { return (a.x * b.y - a.y * b.x); }
bool ok(long double t) {
  long double phi = v1 * t / R, x2 = x11 * cosl(phi) - y11 * sinl(phi),
              y2 = x11 * sinl(phi) + y11 * cosl(phi);
  point a(x2, y2), b(x, y), o(0, 0), ao(a, o), ab(a, b), ba(b, a), bo(b, o);
  long double sq = fabsl(cross(ao, bo));
  if (mor(dot(ao, ab), 0) && mor(dot(bo, ba), 0) && les(sq / ab.len(), r)) {
    long double aob = fabsl(atan2l(cross(ao, bo), dot(ao, bo))),
                alp = fabsl(acosl(r / ao.len())),
                bet = fabsl(acosl(r / bo.len())), gam = aob - alp - bet,
                c = gam * r, cao1 = sqrtl(ao.len() * ao.len() - r * r),
                cbo1 = sqrtl(bo.len() * bo.len() - r * r);
    return (mor(v * t, c + cao1 + cbo1));
  }
  return (mor(v * t, ab.len()));
}
int main() {
  cin >> x11 >> y11 >> v1 >> x >> y >> v >> r;
  R = sqrtl(x11 * x11 + y11 * y11);
  long double lef = 0, rig = INF;
  for (int i = 0; i < 100; i++) {
    long double mid = (lef + rig) / 2;
    if (ok(mid)) {
      rig = mid;
    } else {
      lef = mid;
    }
  }
  cout.setf(ios::fixed);
  cout.precision(20);
  cout << rig << endl;
}
