#include <bits/stdc++.h>
using namespace std;
struct node {
  double x, y, v, r;
} p, Q, h, D;
double mid, l, r, alp, thelen;
double l1, l2, l3, a1;
double dis(node a, node b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
bool CorssTheCircle(node a, node b) {
  double d1 = fabs(a.x * b.y - b.x * a.y) / dis(a, b), d2, d3, d4;
  if (a1 < 1e-10 || d1 - Q.r > -1e-10) return true;
  return false;
}
double judge(double t) {
  double a = p.v * t + alp, t1;
  h.x = p.r * cos(a);
  h.y = p.r * sin(a);
  l1 = (Q.x * Q.x) + (Q.y * Q.y);
  l2 = (h.x * h.x) + (h.y * h.y);
  l3 = (Q.x - h.x) * (Q.x - h.x) + (Q.y - h.y) * (Q.y - h.y);
  a1 = acos((l1 + l2 - l3) / (2 * sqrt(l1) * sqrt(l2))) - acos(Q.r / sqrt(l1)) -
       acos(Q.r / sqrt(l2));
  if (CorssTheCircle(Q, h))
    t1 = dis(h, Q);
  else
    t1 = sqrt(l1 - Q.r * Q.r) + sqrt(l2 - Q.r * Q.r) +
         thelen * a1 / (2 * acos(-1));
  t1 /= Q.v;
  if (t1 < t) return false;
  return true;
}
int main() {
  while (~scanf("%lf%lf%lf", &p.x, &p.y, &p.v)) {
    scanf("%lf%lf%lf%lf", &Q.x, &Q.y, &Q.v, &Q.r);
    thelen = 2 * acos(-1) * Q.r;
    p.r = sqrt(p.x * p.x + p.y * p.y);
    D.x = D.y = 0;
    alp = acos(p.x / p.r);
    if (p.y < 0) alp = -alp;
    p.v /= p.r;
    l = 0;
    r = 1e+10;
    while (r - l > 1e-12) {
      mid = (l + r) * 0.5;
      if (judge(mid))
        l = mid;
      else
        r = mid;
    }
    printf("%.9lf\n", l);
  }
  return 0;
}
