#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
struct ww {
  double x, y;
  inline double ju() { return x * x + y * y; }
  inline ww operator-(const ww &A) { return (ww){x - A.x, y - A.y}; }
} a, b;
int i, j, k, n, m;
double vp, v, r, R;
inline ww zhuan(ww a, double b) {
  return (ww){a.x * cos(b) - a.y * sin(b), a.x * sin(b) + a.y * cos(b)};
}
inline void work(ww &a, ww &b, ww c) {
  double t = r * r, w = c.x * c.x;
  double A = c.ju(), B = -2 * c.y * t, C = t * t - w * t;
  double del = B * B - 4 * A * C;
  del = sqrt(del);
  a.y = (-B + del) / 2 / A;
  b.y = (-B - del) / 2 / A;
  w = c.y * c.y;
  B = -2 * c.x * t, C = t * t - w * t;
  del = B * B - 4 * A * C;
  del = sqrt(del);
  a.x = (-B + del) / 2 / A;
  b.x = (-B - del) / 2 / A;
  if (abs(a.ju() - r * r) > 1e-5) swap(a.x, b.x);
}
inline double cal(ww a, ww b) { return sqrt((a - b).ju()); }
inline double hu(ww a, ww b) {
  double c = abs(atan2(a.y, a.x) - atan2(b.y, b.x));
  if (c > pi) c = 2 * pi - c;
  return c * r;
}
inline bool pan(double t) {
  double jiao = t / R * vp;
  ww c = zhuan(a, jiao);
  ww d = b, e = d - c;
  double K = e.y / e.x;
  double B = c.y - c.x * K;
  double dis = abs(B) / sqrt(K * K + 1);
  if ((c - d).ju() + d.ju() + (1e-8) < c.ju() ||
      (c - d).ju() + c.ju() + (1e-8) < d.ju() || dis + (1e-8) > r)
    return cal(c, d) < t * v;
  ww a[5];
  work(a[1], a[2], c);
  work(a[3], a[4], d);
  int i, j;
  double mi = 1e15;
  for (i = 1; i <= 2; i++)
    for (j = 3; j <= 4; j++)
      mi = min(mi, cal(c, a[i]) + cal(d, a[j]) + hu(a[i], a[j]));
  return mi < t * v;
}
int main() {
  scanf("%lf%lf%lf", &a.x, &a.y, &vp);
  R = sqrt(a.ju());
  scanf("%lf%lf%lf%lf", &b.x, &b.y, &v, &r);
  double ll = (1e-8), rr = 1e6 - (1e-8), mid;
  for (; ll + (1e-8) < rr;) {
    mid = (ll + rr) / 2;
    if (pan(mid))
      rr = mid;
    else
      ll = mid;
  }
  printf("%.11lf\n", rr);
  return 0;
}
