#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
int sign(double x) { return x < -EPS ? -1 : x > EPS; }
const double PI = acos(-1.0);
struct TPoint {
  double x, y;
  TPoint() {}
  TPoint(double x, double y) : x(x), y(y) {}
  TPoint operator-(TPoint P) { return TPoint(x - P.x, y - P.y); }
  double len() { return sqrt(x * x + y * y); }
  double len2() { return (x * x + y * y); }
  double operator^(TPoint P) { return x * P.y - y * P.x; }
  double operator*(TPoint P) { return x * P.x + y * P.y; }
};
double r, R;
double aug(TPoint a, TPoint b) { return acos((a * b) / a.len() / b.len()); }
double dis(TPoint a, TPoint b) {
  double AB = aug(a, b), ans = 0.0;
  double A = acos(r / a.len()), B = acos(r / b.len());
  if (sign(A + B - AB) < 0) {
    ans += sqrt(a.len2() - r * r);
    ans += sqrt(b.len2() - r * r);
    ans += (AB - A - B) * r;
  } else
    ans = (a - b).len();
  return ans;
}
double xp, yp, vp;
double xs, ys, v;
double jiaodu;
int main() {
  while (cin >> xp >> yp >> vp) {
    R = sqrt(xp * xp + yp * yp);
    cin >> xs >> ys >> v >> r;
    jiaodu = atan2(yp, xp);
    double l, r, mid;
    l = 0.0;
    r = 1e6;
    while (l + EPS < r) {
      mid = (l + r) * 0.5;
      double jj = jiaodu + mid * vp / R;
      double ds = dis(TPoint(xs, ys), TPoint(R * cos(jj), R * sin(jj)));
      if (ds < mid * v)
        r = mid;
      else
        l = mid;
    }
    printf("%.10f\n", mid);
  }
  return 0;
}
