#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
struct Point {
  long double x, y;
};
Point s, p;
long double vp, v, r, rad;
long double len2(Point& p) { return p.x * p.x + p.y * p.y; }
long double dist(Point& p1, Point& p2) {
  return sqrtl(
      fabsl((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)));
}
long double acos1(long double an) {
  if (an < 0) an = 0;
  if (an > 1) an = 1;
  return acosl(an);
}
long double func(Point& p1, Point& p2, long double t) {
  Point p;
  p.x = p1.x + t * (p2.x - p1.x);
  p.y = p1.y + t * (p2.y - p1.y);
  return len2(p);
}
long double dist_segm(Point p1, Point p2) {
  long double L = 0, R = 1;
  for (int it = 0; it < int(80); it++) {
    long double m1 = L + (R - L) / 3;
    long double m2 = R - (R - L) / 3;
    if (func(p1, p2, m1) < func(p1, p2, m2))
      R = m2;
    else
      L = m1;
  }
  return sqrtl(func(p1, p2, (L + R) / 2));
}
long double get_angle(Point p1, Point p2) {
  long double a = atan2l(p1.y, p1.x) - atan2l(p2.y, p2.x);
  while (a < 0) a += 2 * 3.1415926535897932;
  while (a > 2 * 3.1415926535897932) a -= 2 * 3.1415926535897932;
  return min(a, 2 * 3.1415926535897932 - a);
}
bool can(long double t) {
  long double a = (t * vp) / rad;
  Point cur;
  cur.x = p.x * cosl(a) - p.y * sinl(a);
  cur.y = p.x * sinl(a) + p.y * cosl(a);
  if (dist_segm(s, cur) >= r) {
    return dist(s, cur) < t * v;
  }
  long double an = get_angle(s, cur) - acos1(r / sqrtl(s.x * s.x + s.y * s.y)) -
                   acosl(r / rad);
  return sqrtl(fabsl(s.x * s.x + s.y * s.y - r * r)) +
             sqrtl(fabsl(rad * rad - r * r)) + an * r <
         t * v;
}
int main() {
  cin >> p.x >> p.y >> vp;
  cin >> s.x >> s.y >> v >> r;
  rad = sqrtl(len2(p));
  long double L = 0, R = 1e+12;
  for (int it = 0; it < int(80); it++) {
    long double mid = (L + R) / 2;
    if (can(mid))
      R = mid;
    else
      L = mid;
  }
  cout.precision(10);
  cout << fixed;
  cout << (L + R) / 2 << endl;
  return 0;
}
