#include <bits/stdc++.h>
using namespace std;
struct Point {
  long double x, y;
  Point() {}
  Point(long double a, long double b) {
    x = a;
    y = b;
  }
  long double mod2() { return x * x + y * y; }
  long double mod() { return sqrt(x * x + y * y); }
  long double arg() { return atan2(y, x); }
  Point ort() { return Point(-y, x); }
  Point unit() {
    long double k = mod();
    return Point(x / k, y / k);
  }
};
Point operator+(const Point &a, const Point &b) {
  return Point(a.x + b.x, a.y + b.y);
}
Point operator-(const Point &a, const Point &b) {
  return Point(a.x - b.x, a.y - b.y);
}
Point operator/(const Point &a, long double k) {
  return Point(a.x / k, a.y / k);
}
Point operator*(const Point &a, long double k) {
  return Point(a.x * k, a.y * k);
}
bool operator==(const Point &a, const Point &b) {
  return fabs(a.x - b.x) < 1e-8 && fabs(a.y - b.y) < 1e-8;
}
bool operator!=(const Point &a, const Point &b) { return !(a == b); }
bool operator<(const Point &a, const Point &b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
long double dist(const Point &A, const Point &B) {
  return hypot(A.x - B.x, A.y - B.y);
}
long double cross(const Point &A, const Point &B) {
  return A.x * B.y - A.y * B.x;
}
long double dot(const Point &A, const Point &B) {
  return A.x * B.x + A.y * B.y;
}
long double area(const Point &A, const Point &B, const Point &C) {
  return cross(B - A, C - A);
}
bool onSegment(const Point &A, const Point &B, const Point &P) {
  return abs(area(A, B, P)) < 1e-8 && P.x >= min(A.x, B.x) &&
         P.x <= max(A.x, B.x) && P.y >= min(A.y, B.y) && P.y <= max(A.y, B.y);
}
vector<Point> lineCircleIntersection(Point A, Point B, Point O, long double r) {
  vector<Point> X;
  Point H1 = O + (B - A).ort() * cross(O - A, B - A) / (B - A).mod2();
  long double d1 = abs(cross(O - A, B - A) / (B - A).mod());
  if (d1 - 1e-8 <= r) {
    long double k = sqrt(abs(r * r - d1 * d1));
    Point P1 = H1 + (B - A).unit() * k;
    Point P2 = H1 - (B - A).unit() * k;
    if (onSegment(A, B, P1)) X.push_back(P1);
    if (k > 1e-8 && onSegment(A, B, P2)) X.push_back(P2);
  }
  return X;
}
vector<Point> TangentLineThroughPoint(Point P, Point C, long double r) {
  vector<Point> X;
  long double hyp = dist(C, P);
  if (hyp < r)
    return X;
  else {
    long double d = sqrt(hyp * hyp - r * r);
    long double m1 = (r * (P.x - C.x) + d * (P.y - C.y)) / (r * r + d * d);
    long double n1 = (P.y - C.y - d * m1) / r;
    long double n2 = (d * (P.x - C.x) + r * (P.y - C.y)) / (r * r + d * d);
    long double m2 = (P.x - C.x - d * n2) / r;
    X.push_back(C + Point(m1, n1) * r);
    if (d != 0) X.push_back(C + Point(m2, n2) * r);
    return X;
  }
}
Point P0, P;
long double vp, v, r, R;
bool valid(long double t) {
  long double alpha = P0.arg() + t * vp / R;
  Point Q(R * cos(alpha), R * sin(alpha));
  vector<Point> X = lineCircleIntersection(P, Q, Point(0, 0), r);
  if (X.size() != 2) {
    long double d = dist(P, Q);
    return v * t >= d;
  } else {
    vector<Point> T1 = TangentLineThroughPoint(P, Point(0, 0), r);
    vector<Point> T2 = TangentLineThroughPoint(Q, Point(0, 0), r);
    long double minD = HUGE_VAL;
    for (int i = 0; i < T1.size(); i++) {
      for (int j = 0; j < T2.size(); j++) {
        long double d = dist(P, T1[i]) + dist(Q, T2[j]);
        long double alpha1 = T1[i].arg(), alpha2 = T2[j].arg();
        alpha = alpha1 - alpha2;
        while (alpha < 0) alpha += 2 * acos(-1);
        while (alpha > 2 * acos(-1) + 1e-8) alpha -= 2 * acos(-1);
        d += min(alpha * r, (2 * acos(-1) - alpha) * r);
        minD = min(minD, d);
      }
    }
    return v * t >= minD;
  }
}
int main() {
  while (cin >> P0.x >> P0.y >> vp) {
    cin >> P.x >> P.y >> v;
    cin >> r;
    R = P0.mod();
    long double lo = 0, hi = 100000000.0;
    if (valid(lo))
      printf("%.10lf\n", (double)lo);
    else {
      for (int it = 0; it < 100; it++) {
        long double mid = (lo + hi) / 2;
        if (valid(mid))
          hi = mid;
        else
          lo = mid;
      }
      printf("%.10lf\n", (double)hi);
    }
  }
  return 0;
}
