#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
} P, S, H;
double r, R, vp, vs;
bool zero(double x) { return abs(x) < 0.000000000001; }
bool Cmp(double a, double b) { return a - b > -0.000000000001; }
double Pow(double a) { return a * a; }
double dis(Point p1, Point p2) {
  return sqrt(Pow(p1.x - p2.x) + Pow(p1.y - p2.y));
}
double Dot_mul(Point p1, Point p2, Point p3, Point p4) {
  double x1, x2, y1, y2;
  x1 = p2.x - p1.x;
  y1 = p2.y - p1.y;
  x2 = p4.x - p3.x;
  y2 = p4.y - p3.y;
  return x1 * x2 + y1 * y2;
}
double dis2(Point p1, Point p2, Point p0) {
  double D = Dot_mul(p1, p2, p1, p0) / dis(p1, p2);
  Point pp = p2;
  pp.x -= p1.x;
  pp.y -= p1.y;
  pp.x *= D;
  pp.y *= D;
  pp.x /= dis(p1, p2);
  pp.y /= dis(p1, p2);
  pp.x += p1.x;
  pp.y += p1.y;
  return dis(p0, pp);
}
Point Rota(Point p0, double A) {
  Point pp;
  pp.x = p0.x * cos(A) - p0.y * sin(A);
  pp.y = p0.y * cos(A) + p0.x * sin(A);
  return pp;
}
bool Check(double T) {
  double A, D, T2, D1, D2, A1, A2;
  Point pp;
  D = T * vp;
  A = D / R;
  pp = Rota(P, A);
  D1 = sqrt(Pow(dis(S, H)) - Pow(r));
  D2 = sqrt(Pow(R) - Pow(r));
  A = acos(Dot_mul(H, S, H, pp) / R / dis(H, S));
  A1 = atan(D1 / r);
  A2 = atan(D2 / r);
  if (Cmp(A1 + A2, A)) {
    D = dis(pp, S);
    T2 = D / vs;
    return Cmp(T, T2);
  }
  D = (A - A1 - A2) * r;
  D += D1 + D2;
  T2 = D / vs;
  return Cmp(T, T2);
}
void Binary_search() {
  double l = 0, r = 1000000, mid, ans;
  while (!zero(r - l)) {
    mid = (l + r) / 2;
    if (Check(mid))
      ans = mid, r = mid;
    else
      l = mid;
  }
  printf("%.9lf\n", ans);
}
int main() {
  cin >> P.x >> P.y >> vp >> S.x >> S.y >> vs >> r;
  H.x = 0;
  H.y = 0;
  R = dis(P, H);
  if (P.x == S.x && P.y == S.y) {
    cout << 0.0000000000 << endl;
    return 0;
  }
  Binary_search();
  return 0;
}
