#include <bits/stdc++.h>
using namespace std;
const double pai = acos(-1.0L);
const double eps = 1e-10;
const long long mod = 1e9 + 7;
const int MXN = 1e6 + 5;
int sx;
double xp, yp, vp, x, y, v, r, rp;
double xy_to_jiao(int xx, int yy) {
  double ax = abs(xx), ay = abs(yy);
  if (ax == 0 && yy == 0) return 0;
  if (ax == 0 && yy > 0) return pai / 2.0;
  if (ax == 0 && yy < 0) return -pai / 2.0;
  if (xx >= 0 && yy >= 0) return atan(ay / ax);
  if (xx >= 0 && yy <= 0) return -atan(ay / ax);
  if (xx <= 0 && yy >= 0) return pai - atan(ay / ax);
  return -(pai - atan(ay / ax));
}
pair<double, double> jiao_to_xy(double Ejiao) {
  pair<double, double> re;
  int cc = (int)(Ejiao / (2.0 * pai));
  Ejiao = Ejiao - (cc) * (2.0 * pai);
  if (Ejiao < -2.0 * pai) Ejiao += (2.0 * pai);
  if (Ejiao > 2.0 * pai) Ejiao -= (2.0 * pai);
  if (Ejiao > pai) Ejiao = Ejiao - (2.0 * pai);
  if (Ejiao < -pai) Ejiao = Ejiao + (2.0 * pai);
  if (Ejiao >= 0 && Ejiao <= pai / (2.0)) {
    re.first = cos(Ejiao) * rp, re.second = sin(Ejiao) * rp;
    return re;
  }
  if (Ejiao >= pai / 2.0 && Ejiao <= pai) {
    Ejiao -= (pai / 2.0);
    re.second = cos(Ejiao) * rp, re.first = -sin(Ejiao) * rp;
    return re;
  }
  if (Ejiao <= 0 && Ejiao >= -pai / (2.0)) {
    Ejiao = -Ejiao;
    re.first = cos(Ejiao) * rp, re.second = -sin(Ejiao) * rp;
    return re;
  }
  Ejiao = -Ejiao;
  Ejiao -= (pai / 2.0);
  re.second = -cos(Ejiao) * rp, re.first = -sin(Ejiao) * rp;
  return re;
}
bool xj(double npx, double npy) {
  double k = (npy - y) / (npx - x);
  double b = (npx * y - x * npy) / (npx - x);
  double aa = (1.0 + k * k), bb = 2.0 * k * b, cc = b * b - r * r;
  if (bb * bb - 4.0 * aa * cc <= 0)
    return 0;
  else {
    double x1 = (-bb - sqrt(bb * bb - 4.0 * aa * cc)) / (2.0 * aa);
    double x2 = (-bb + sqrt(bb * bb - 4.0 * aa * cc)) / (2.0 * aa);
    if (npx < x1 && x < x1) return 0;
    if (npx > x2 && x > x2) return 0;
  }
  return 1;
}
double dis(double a, double b, double c, double d) {
  return sqrt((a - c) * (a - c) + (b - d) * (b - d));
}
bool ck(double tme) {
  double Ejiao = xy_to_jiao(xp, yp);
  double Ajiao = vp * tme / (rp);
  Ejiao += Ajiao;
  pair<double, double> xyzz = jiao_to_xy(Ejiao);
  bool ju = xj(xyzz.first, xyzz.second);
  if (ju == 0) {
    return dis(xyzz.first, xyzz.second, x, y) / v <= tme;
  }
  double npx = xyzz.first, npy = xyzz.second;
  double d1 = dis(x, y, 0, 0), d2 = dis(npx, npy, 0, 0);
  double s1 = sqrt(d1 * d1 - r * r);
  double s2 = sqrt(d2 * d2 - r * r);
  double d3 = dis(x, y, npx, npy);
  double jj = acos(-(d3 * d3 - d1 * d1 - d2 * d2) / (2.0 * d1 * d2)) -
              asin(s1 / d1) - asin(s2 / d2);
  double dd = s1 + s2 + jj * r;
  return dd / v <= tme;
}
int main() {
  cin >> sx;
  xp = sx;
  cin >> sx;
  yp = sx;
  cin >> sx;
  vp = sx;
  cin >> sx;
  x = sx;
  cin >> sx;
  y = sx;
  cin >> sx;
  v = sx;
  cin >> sx;
  r = sx;
  rp = sqrt(xp * xp + yp * yp);
  double l = 0, r = 1e16, ans = -1;
  for (int _ = 1; _ <= 200; _++) {
    double mid = (l + r) / 2.0;
    if (ck(mid))
      ans = mid, r = mid;
    else
      l = mid;
  }
  printf("%.10lf", ans);
  return 0;
}
