#include <bits/stdc++.h>
using namespace std;
const double epsi = 1e-15;
const double eps = 1e-9;
struct point {
  double x, y;
} pl, sh;
double vp, vs, omega, R, ang1, ang2, d1, d2, rp, rs;
void init() {
  scanf("%lf%lf%lf", &pl.x, &pl.y, &vp);
  scanf("%lf%lf%lf%lf", &sh.x, &sh.y, &vs, &R);
}
int sign(double x) {
  if (x > epsi) return 1;
  if (x < -epsi) return -1;
  return 0;
}
point rot(point cur, double ang) {
  point ret;
  ret.x = cur.x * cos(ang) - cur.y * sin(ang);
  ret.y = cur.y * cos(ang) + cur.x * sin(ang);
  return ret;
}
double sqr(double a) { return a * a; }
double dis(point p1, point p2) {
  return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));
}
double getang(point p1, point p2) {
  double x1, y1, x2, y2;
  x1 = p1.x;
  y1 = p1.y;
  x2 = p2.x;
  y2 = p2.y;
  return acos((x1 * x2 + y1 * y2) / (rp * rs));
}
bool check(double T) {
  point npl;
  double ang3;
  npl = rot(pl, T * omega);
  ang3 = getang(sh, npl);
  if (sign(ang1 + ang2 - ang3) >= 0)
    return sign(T - dis(sh, npl) / vs) >= 0;
  else
    return sign(T - ((ang3 - ang1 - ang2) * R + d1 + d2) / vs) >= 0;
}
void solve() {
  double l, r, mid;
  rp = sqrt(sqr(pl.x) + sqr(pl.y));
  rs = sqrt(sqr(sh.x) + sqr(sh.y));
  ang1 = acos(R / rp);
  ang2 = acos(R / rs);
  d1 = sqrt(sqr(rp) - sqr(R));
  d2 = sqrt(sqr(rs) - sqr(R));
  omega = vp / rp;
  l = 0;
  r = 1e9;
  while (l + eps < r) {
    mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.9lf\n", r);
}
int main() {
  init();
  solve();
  return 0;
}
