#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-12;
long double xp, yp, vp, x, y, v, r;
long double angle(long double x, long double y) {
  long double alpha = atan2(y, x);
  if (alpha < 0) alpha += 2.0 * acos(-1);
  return alpha;
}
long double fix(long double alpha) {
  alpha -= floor((alpha) / 2.0 / acos(-1)) * 2.0 * acos(-1);
  if (alpha < 0) alpha += 2.0 * acos(-1);
  if (alpha + EPS > 2.0 * acos(-1)) alpha -= 2.0 * acos(-1);
  return alpha;
}
bool solve(long double t) {
  long double rp = hypot(xp, yp);
  long double alpha = angle(xp, yp);
  alpha += vp * t / (rp);
  alpha -= floor((alpha) / 2.0 / acos(-1)) * 2.0 * acos(-1);
  long double cur_xp = cos(alpha) * rp;
  long double cur_yp = sin(alpha) * rp;
  long double dalpha = acos(r / rp);
  long double alpha_min = alpha - dalpha, alpha_max = alpha + dalpha;
  long double beta = angle(x, y);
  long double dbeta = acos(r / hypot(x, y));
  long double beta_min = beta - dbeta, beta_max = beta + dbeta;
  if (alpha_min < beta_min && beta_min < beta_max && beta_max < alpha_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (beta_min < alpha_min && alpha_min < alpha_max && alpha_max < beta_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (alpha_min < beta_min && beta_min < alpha_max && alpha_max < beta_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (beta_min < alpha_min && alpha_min < beta_max && beta_max < alpha_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  alpha_min += 2 * acos(-1);
  alpha_max += 2 * acos(-1);
  if (alpha_min < beta_min && beta_min < beta_max && beta_max < alpha_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (beta_min < alpha_min && alpha_min < alpha_max && alpha_max < beta_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (alpha_min < beta_min && beta_min < alpha_max && alpha_max < beta_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (beta_min < alpha_min && alpha_min < beta_max && beta_max < alpha_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  alpha_min -= 4 * acos(-1);
  alpha_max -= 4 * acos(-1);
  if (alpha_min < beta_min && beta_min < beta_max && beta_max < alpha_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (beta_min < alpha_min && alpha_min < alpha_max && alpha_max < beta_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (alpha_min < beta_min && beta_min < alpha_max && alpha_max < beta_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  if (beta_min < alpha_min && alpha_min < beta_max && beta_max < alpha_max)
    return hypot(x - cur_xp, y - cur_yp) / v < t;
  long double min_gamma =
      min(fix(alpha_min - beta_max), fix(beta_min - alpha_max));
  long double time_need = (min_gamma * r + sqrt(pow(hypot(x, y), 2) - r * r) +
                           sqrt(rp * rp - r * r)) /
                          v;
  return time_need < t;
}
int main() {
  cin >> xp >> yp >> vp >> x >> y >> v >> r;
  long double lo = 0, hi = 1e18, mid;
  for (int i = 0; i < 1000; ++i) {
    mid = (lo + hi) / 2;
    if (solve(mid))
      hi = mid;
    else
      lo = mid;
  }
  cout << fixed << setprecision(12) << lo << '\n';
}
