#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-10;
const long double PI = acos(-1.0);
const int INF = (int)1e9 + 5;
const long long LINF = (long long)1e18 + 5;
template <class T>
long long abs(const T& x) {
  return x < 0 ? -x : x;
}
template <class T>
long long round(const T& x) {
  return x < 0 ? x - 0.5 : x + 0.5;
}
template <class T>
bool chmin(T& x, const T& y) {
  if (y < x) {
    x = y;
    return true;
  }
  return false;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  os << "{";
  for (typename vector<T>::const_iterator it = v.begin(); it != v.end(); ++it) {
    os << *it;
    if ((it + 1) != v.end()) os << ", ";
  }
  os << "}";
  return os;
}
template <class P, class Q>
ostream& operator<<(ostream& os, const pair<P, Q>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <class T>
bool chmax(T& x, const T& y) {
  if (x < y) {
    x = y;
    return true;
  }
  return false;
}
bool can(int n, double all, double v1, double v2, int k, double t) {
  double x = (all - v2 * t) / (v1 - v2);
  if (x < 0) return false;
  if (x > t) return true;
  double needTime = t - x;
  double busPos = 0;
  double childPos = 0;
  while (n > 0) {
    n -= k;
    double whereMeet = childPos + (busPos - childPos) * v1 / (v1 + v2);
    childPos = whereMeet;
    busPos = whereMeet;
    busPos += needTime * v2;
    if (busPos > all) return false;
    childPos += needTime * v1;
  }
  return true;
}
int main() {
  srand(time(0));
  int n, all, v1, v2, k;
  cin >> n >> all >> v1 >> v2 >> k;
  double l = 0, r = (double)all / v1;
  for (int it = 0; it < 100; it++) {
    double mid = (l + r) / 2;
    if (can(n, all, v1, v2, k, mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.20f\n", r);
}
