#include <bits/stdc++.h>
using namespace std;
double EPS = 1e-12;
struct PT {
  double x, y;
  PT() {}
  PT(double x, double y) : x(x), y(y) {}
  PT(const PT &p) : x(p.x), y(p.y) {}
  PT operator+(const PT &p) const { return PT(x + p.x, y + p.y); }
  PT operator-(const PT &p) const { return PT(x - p.x, y - p.y); }
  PT operator*(double c) const { return PT(x * c, y * c); }
  PT operator/(double c) const { return PT(x / c, y / c); }
};
double dot(PT p, PT q) { return p.x * q.x + p.y * q.y; }
double dist2(PT p, PT q) { return dot(p - q, p - q); }
double cross(PT p, PT q) { return p.x * q.y - p.y * q.x; }
ostream &operator<<(ostream &os, const PT &p) {
  return os << "(" << p.x << "," << p.y << ")";
}
PT RotateCCW90(PT p) { return PT(-p.y, p.x); }
PT RotateCW90(PT p) { return PT(p.y, -p.x); }
PT RotateCCW(PT p, double t) {
  return PT(p.x * cos(t) - p.y * sin(t), p.x * sin(t) + p.y * cos(t));
}
PT ProjectPointLine(PT a, PT b, PT c) {
  return a + (b - a) * dot(c - a, b - a) / dot(b - a, b - a);
}
PT ProjectPointSegment(PT a, PT b, PT c) {
  double r = dot(b - a, b - a);
  if (fabs(r) < EPS) return a;
  r = dot(c - a, b - a) / r;
  if (r < 0) return a;
  if (r > 1) return b;
  return a + (b - a) * r;
}
double DistancePointSegment(PT a, PT b, PT c) {
  return sqrt(dist2(c, ProjectPointSegment(a, b, c)));
}
double clamp(double a, double lo, double hi) {
  if (a < lo) return lo;
  if (a > hi) return hi;
  return a;
}
double dis(PT A, PT B, PT O, double r) {
  if (DistancePointSegment(A, B, O) >= r) return sqrt(dist2(A, B));
  double da2 = dist2(O, A);
  double db2 = dist2(O, B);
  assert(da2 >= r * r && db2 >= r * r);
  double straight = sqrt(da2 - r * r) + sqrt(db2 - r * r);
  double cosa = dot(A - O, B - O) / sqrt(da2 * db2);
  double angle = acos(clamp(cosa, -1, 1));
  angle -= acos(r / sqrt(da2)) + acos(r / sqrt(db2));
  return straight + r * angle;
}
int main() {
  PT O(0, 0);
  PT P;
  double vp;
  cin >> P.x >> P.y >> vp;
  double R = sqrt(dist2(O, P));
  double theta0 = atan2(P.y, P.x);
  double w = vp / R;
  PT A;
  double v, r;
  cin >> A.x >> A.y >> v >> r;
  double lo = 0, hi = 1e9;
  for (int it = 0; it < 100; ++it) {
    double mid = (lo + hi) / 2;
    double theta = w * mid + theta0;
    PT X(R * cos(theta), R * sin(theta));
    double d = dis(A, X, O, r);
    if (d / mid <= v)
      hi = mid;
    else
      lo = mid;
  }
  cout << setprecision(15) << fixed << lo << endl;
}
