#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double pi = 3.1415926535897932;
int xp, yp, vp;
int x, y, v, r;
double dist(double x1, double y1, double x2, double y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
double gougu(double d1, double d2) { return sqrt(d1 * d1 - d2 * d2); }
double cosines(double d1, double d2, double d3) {
  return (d1 * d1 + d2 * d2 - d3 * d3) / 2 / d1 / d2;
}
bool con(double x1, double y1, double x2, double y2) {
  return x1 * x2 + y1 * y2 > 0;
}
bool canReach(double t) {
  double R = sqrt(xp * xp + yp * yp);
  double ang_p = vp * t / R;
  double xt = xp * cos(ang_p) - yp * sin(ang_p);
  double yt = xp * sin(ang_p) + yp * cos(ang_p);
  double a = yt - y;
  double b = x - xt;
  double c = y * xt - x * yt;
  double z = sqrt(a * a + b * b);
  double need;
  if (fabs(c / z) - r > eps) {
    need = dist(x, y, xt, yt);
  } else {
    if (con(x - xt, y - yt, 0 - xt, 0 - yt) > 0 &&
        con(xt - x, yt - y, 0 - x, 0 - y) > 0) {
      double disOp = dist(xt, yt, 0, 0);
      double disOq = dist(x, y, 0, 0);
      need = gougu(disOp, r) + gougu(disOq, r);
      double dispq = dist(xt, yt, x, y);
      double alpha = pi - acos(cosines(dispq, disOq, disOp)) -
                     acos(cosines(dispq, disOp, disOq));
      alpha -= acos(r / disOp) + acos(r / disOq);
      need += alpha * r;
    } else {
      need = dist(x, y, xt, yt);
    }
  }
  return need < v * t;
}
int main() {
  scanf("%d %d %d %d %d %d %d", &xp, &yp, &vp, &x, &y, &v, &r);
  double l, r, mid, ans;
  l = 0, r = 1e8;
  while (r - l > eps) {
    mid = (l + r) / 2.0;
    if (canReach(mid)) {
      ans = mid;
      r = mid;
    } else
      l = mid;
  }
  printf("%.8lf\n", ans);
}
