#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
struct P {
  double x, y;
  P() {}
  P(double x, double y) : x(x), y(y) {}
  P operator-(const P& b) { return P(x - b.x, y - b.y); }
  P operator+(const P& b) { return P(x + b.x, y + b.y); }
  double operator*(const P& b) { return x * b.y - y * b.x; }
  double operator&(const P& b) { return x * b.x + y * b.y; }
  double dorm() { return sqrt(((x) * (x)) + ((y) * (y))); }
};
P rot(P a, double ang) {
  P ret;
  ret.x = a.x * cos(ang) - a.y * sin(ang);
  ret.y = a.x * sin(ang) + a.y * cos(ang);
  return ret;
}
int sgn(double x) { return x < -1e-7 ? -1 : x > 1e-7; }
int can(P a, P b, double r, double t, double v) {
  P o = P(0, 0);
  if (sgn(a.x - b.x) == 0 && sgn(a.y - b.y) == 0) return 1;
  double dis1 = (a - o).dorm();
  double dis2 = (b - o).dorm();
  double ang1 = acos(r / dis1);
  double ang2 = acos(r / dis2);
  P shun = rot((o - a), ang1 - pi / 2);
  P ni = rot((o - a), pi / 2 - ang1);
  if (sgn((b - a) * shun) >= 0 || sgn((b - a) * ni) <= 0)
    return (a - b).dorm() / v < t;
  if ((((b - a).dorm()) * ((b - a).dorm())) < ((dis1) * (dis1)) - ((r) * (r)))
    return (a - b).dorm() / v < t;
  double ang3 = acos(((a - o) & (b - o)) / dis1 / dis2);
  ang3 -= ang1 + ang2;
  return (sqrt(((dis1) * (dis1)) - ((r) * (r))) +
          sqrt(((dis2) * (dis2)) - ((r) * (r)))) /
                 v +
             ang3 * r / v <
         t;
}
int main() {
  P ed, st;
  double vp, v;
  double R, r;
  cin >> ed.x >> ed.y >> vp;
  cin >> st.x >> st.y >> v >> r;
  R = ed.dorm();
  double l = 0, h = 1e10;
  for (int i = 0; i < 10000; i++) {
    double mid = (l + h) / 2;
    double ang = vp / R * mid;
    P end = rot(ed, ang);
    if (can(st, end, r, v, mid))
      h = mid;
    else
      l = mid;
  }
  printf("%.10f\n", l);
}
