#include "vector"
#include "string"
#include "set"
#include "map"
#include "sstream"
#include "algorithm"
#include "cmath"
#include "cassert"
#include "iostream"
#include "numeric"
#include "fstream"
#include "queue"
#include <functional>
#include <climits>
#include <cstring>
#include <ctime>
#include <list>
#include <iomanip>
#include <unordered_map>

using namespace  std;

#define int64 long long
#define F(vec, index) for (int index=0; index  < vec.size(); ++index)
#define F2(index, vec) for (int index=0; index  < vec.size(); ++index)
#define F3(index, from, vec) for (int indexfrom + 1; index  < vec.size(); ++index)
#define _GLIBCXX_DEBUG

bool Ok(long double t, int64 n, long double d, int64 v1, int64 v2, int64 k) {
    while (n > 0 && d > 0 && d - t * v1 > 0) {
        if (t < 0) return false;
        long double t2 = (d - t * v1) / static_cast<long double>(v2 - v1);
        long double t1 = t - t2;
        //assert(abs(t1 * v1 + t2 * v2 - d) < 0.00001);
        //assert(abs(t1 + t2 - t) < 0.00001);
        if (t2 < 0 || t1 < 0) return false;

    	n -= k;
        d -= t2 * v1;
        t -= t2;

        long double retTime = static_cast<long double>(t2 * v2 - t2 * v1) / (v1 + v2);
        d -= retTime * v1;
        t -= retTime;

    }
    return true;
}

int main(int argc, char* argv[])
{
    std::ios::sync_with_stdio(false);

    int64 n, d, v1, v2, k;
    cin >> n >> d >> v1 >> v2 >> k;
    if (v1 >= v2) {
        cout << setprecision(10) << double(d) / v1 << endl;
        return 0;
    }
    long double l = 0;
    long double r = double(d) / v1;
    Ok(4, n, d, v1, v2, k);
    while ((r - l >= 0.0000001) && r - l / r > 0.0000001) {
        double m = (r + l) / 2;

        if (Ok(m, n, d, v1, v2, k)) {
            r = m;
        }
        else {
            l = m;
        }
    }

    cout << setprecision(10) << r << endl;

    return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;

int n,k;
double l,v1,v2;

void init()
{
    cin>>n>>l>>v1>>v2>>k;
    if(n % k == 0) n = n / k;
    else n = n / k + 1;
}

bool check(double t0)
{
    double x1 = 0.0,x2 = 0.0,t1;

    for(int i = 1;i <= n;i++)
    {
        x1 += v1 * t0;
//        x2 = v1;
        x2 += v2 * t0;
        if(i < n)
        {
            t1 = (x2 - x1) / (v1 + v2);
            x1 += t1 * v1;
            x2 = x1;
        }
    }

    if(x2 <= l) return true;
    return false;
}

void work()
{
    double L = 0,R = l / v2,mid;
    for(int i = 1;i <= 160;i++)
    {
        mid = (L + R) * 0.5;
        if(check(mid)) L = mid;
        else R = mid;
    }

    double ti = L + (l - L * v2) / v1;
    printf("%.9f\n",ti);
}

int main()
{
    init();
    work();

    return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

#define mo 1000000007
typedef long long LL;

int main()
{
    LL n,v1,v2,k;
    double ans=0,t,l;
    scanf("%I64d%lf%I64d%I64d%I64d",&n,&l,&v1,&v2,&k);
    n=(n+k-1)/k;
    t=l*(v1+v2)/v2/(2*n*v1-v1+v2);
    ans=(l-t*v2)/v1+t;
    printf("%.10f\n",ans);

    return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;

int n,k;
double l,v1,v2;

void init()
{
    cin>>n>>l>>v1>>v2>>k;
    if(n % k == 0) n = n / k;
    else n = n / k + 1;
}

bool check(double t0)
{
    double x1 = 0.0,x2 = 0.0,t1;
    for(int i = 1;i <= n;i++)
    {
        x1 += v1 * t0;
        x2 += v2 * t0;
        if(i < n)
        {
            t1 = (x2 - x1) / (v1 + v2);
            x1 += t1 * v1;
            x2 = x1;
        }
    }
    if(x2 <= l) return true;
    else return false;
}

void work()
{
    double L = 0,R = l / v2,mid;
    for(int i = l;i <= 50;i++)
    {
        mid = (L + R) * 0.5;
        if(check(mid)) L = mid;
        else R = mid;
    }

    double ti = L + (l - L * v2) / v1;
    printf("%.9f\n",ti);
}

int main()
{
    init();
    work();

    return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;

int n,k;
double l,v1,v2;

void init()
{
    cin>>n>>l>>v1>>v2>>k;
    if(n % k == 0) n = n / k;
    else n = n / k + 1;
}

bool check(double t0)
{
    double x1 = 0.0,x2 = 0.0,t1;
    for(int i = 1;i <= n;i++)
    {
        x1 += v1 * t0;
        x2 += v2 * t0;
        if(i < n)
        {
            t1 = (x2 - x1) / (v1 + v2);
            x1 += t1 * v1;
            x2 = x1;
        }
    }
    if(x2 <= l) return true;
    else return false;
}

void work()
{
    double L = 0,R = l / v2,mid;
    for(int i = l;i <= 160;i++)
    {
        mid = (L + R) * 0.5;
        if(check(mid)) L = mid;
        else R = mid;
    }

    double ti = L + (l - L * v2) / v1;
    printf("%.9f\n",ti);
}

int main()
{
    init();
    work();

    return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;

int n,k;
double l,v1,v2;

void init()
{
    cin>>n>>l>>v1>>v2>>k;
    if(n % k == 0) n = n / k;
    else n = n / k + 1;
}

bool check(double t0)
{
    double x1 = 0.0,x2 = 0.0,t1;

    for(int i = 1;i <= n;i++)
    {
        x1 += v1 * t0;
//        x2 = v1;
        x2 += v2 * t0;
        if(i < n)
        {
            t1 = (x2 - x1) / (v1 + v2);
            x1 += t1 * v1;
            x2 = x1;
        }
    }

    if(x2 <= l) return true;
    return false;
}

void work()
{
    double L = 0,R = l / v2,mid;
    for(int i = 1;i <= 50;i++)
    {
        mid = (L + R) * 0.5;
        if(check(mid)) L = mid;
        else R = mid;
    }

    double ti = L + (l - L * v2) / v1;
    printf("%.9f\n",ti);
}

int main()
{
    init();
    work();

    return 0;
}


#include<iostream>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
double ll,v1,v2;
bool check(double tim) {
	double sheng=ll;
	double te=tim;
	double t1,t2;
	double tee;
	//v2>v1
	//t1*v1+t2*v1==te*v1
	//t1*v1+t2*v2==sheng
	for(int i=1; i<=(n-1)/k+1; i++) {
		if (te<(double(0))) {
			return false;
		}
		/*	if (sheng-te*v1<0)
			{
				return false;
			}*/
		t2=(sheng-te*v1)/(v2-v1);
		t1=te-t2;
		/*if (t2<0)
		{
			return false;
		}*/
		if (t2<=0) {
			return true;
		}
		if (t1<0) {
			return false;
		}
		tee=sheng-t2*v2;
		sheng=sheng-t2*v1;
		double tt=(sheng-tee)/(v1+v2);
		te=te-t2-tt;
		sheng=sheng-tt*v1;
		if(sheng<=0) {
			return true;
		}
		/*	if (te<0)
			{
				return false;
			}*/

	}
	return true;
}
int main() {
//	cin>>n>>l>>v1>>v2>>k;
	scanf("%d%lf%lf%lf%d",&n,&ll,&v1,&v2,&k);
	double l=0;
	double r=ll/(v1*1.0);
	double mid;

	while (0.000001<r-l) {
		mid=(l+r)/2;
		//  cout<<check(mid)<<" "<<mid<<endl;
		if (check(mid)) r=mid;
		else l=mid+1e-7;

	}
//	cout<<check(4.7)<<" "<<check(4.8)<<endl;
	printf("%.8lf",l);
}


#include<iostream>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
double ll,v1,v2;
bool check(double tim)
{
	double sheng=ll;double te=tim;
	double t1,t2;double tee;
	//v2>v1
	//t1*v1+t2*v1==te*v1
	//t1*v1+t2*v2==sheng
	for(int i=1;i<=(n-1)/k+1;i++)
	{
		if (te<(double(0)))
		{
			return false;
		}
	/*	if (sheng-te*v1<0)
		{
			return false;
		}*/
		t2=(sheng-te*v1)/(v2-v1);t1=te-t2;
		/*if (t2<0)
		{
			return false;
		}*/
		if (t2<=0)
		{
			return true;
		}
		if (t1<0)
		{
			return false;
		}
		tee=sheng-t2*v2;
		sheng=sheng-t2*v1;
		double tt=(sheng-tee)/(v1+v2);
		te=te-t2-tt;
		sheng=sheng-tt*v1;
		if(sheng<=0)
		{
			return true;
		}
	/*	if (te<0)
		{
			return false;
		}*/

	}
	return true;
}
int main()
{
//	cin>>n>>l>>v1>>v2>>k;
	scanf("%d%lf%lf%lf%d",&n,&ll,&v1,&v2,&k);
	double l=0;
	double r=ll/(v1*1.0);
	double mid;

	while (0.0000001<r-l)
    {
        mid=(l+r)/2;
      //  cout<<check(mid)<<" "<<mid<<endl;
        if (check(mid)) r=mid;
        else l=mid+1e-8;

	}
//	cout<<check(4.7)<<" "<<check(4.8)<<endl;
	printf("%.8lf",l);
}


#include<iostream>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
double ll,v1,v2;
bool check(double tim)
{
	double sheng=ll;double te=tim;
	double t1,t2;double tee;
	//v2>v1
	//t1*v1+t2*v1==te*v1
	//t1*v1+t2*v2==sheng
	for(int i=1;i<=(n-1)/k+1;i++)
	{
		if (te<(double(0)))
		{
			return false;
		}
	/*	if (sheng-te*v1<0)
		{
			return false;
		}*/
		t2=(sheng-te*v1)/(v2-v1);t1=te-t2;
		/*if (t2<0)
		{
			return false;
		}*/
		if (t2<=0)
		{
			return true;
		}
		if (t1<0)
		{
			return false;
		}
		tee=sheng-t2*v2;
		sheng=sheng-t2*v1;
		double tt=(sheng-tee)/(v1+v2);
		te=te-t2-tt;
		sheng=sheng-tt*v1;
		if(sheng<=0)
		{
			return true;
		}
	/*	if (te<0)
		{
			return false;
		}*/

	}
	return true;
}
int main()
{
//	cin>>n>>l>>v1>>v2>>k;
	scanf("%d%lf%lf%lf%d",&n,&ll,&v1,&v2,&k);
	double l=0;
	double r=ll/(v1*1.0);
	double mid;

	while (0.0000001<r-l)
    {
        mid=(l+r)/2;
        cout<<check(mid)<<" "<<mid<<endl;
        if (check(mid)) r=mid;
        else l=mid+1e-8;

	}
//	cout<<check(4.7)<<" "<<check(4.8)<<endl;
	printf("%.8lf",l);
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
	for (int i = 0; i < n; i += k) {
		if (i + k >= n) {
		//	cerr << pos << " " << ans << "\n";
			ans += (l - pos) / v2;
			break;
		}
		d = min(d, l - pos);
		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
	//	cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
		assert(pos < l);      //             cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);

	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-7;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
		if (f(mid) >= f(mid + eps)) bot = mid + eps;
		else top = mid;
	}
	cout << fixed << setprecision(10) << f(bot) << "\n";

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef long double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
    const ld eps = 1e-8;
	for (int i = 0; i < n && l - pos > eps; i += k) {
		if (i + k >= n) {
			ans += (l - pos) / v2;
			break;
		}
		if (d - (l - pos) > eps) d = l - pos;
		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
//		cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
		assert(pos <= l); //                  cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);
	    cerr << fixed << setprecision(5);
	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-8;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
	    ld m1 = (bot + mid) / 2;
	    ld m2 = (top + mid) / 2;
		if (f(m1) >= f(m2)) bot = mid + eps;
		else top = mid;
	}
	cout << fixed << setprecision(10) << double(f(bot)) << "\n";

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef long double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
	for (int i = 0; i < n; i += k) {
		if (i + k >= n) {
		//	cerr << pos << " " << ans << "\n";
			ans += (l - pos) / v2;
			break;
		}
		d = min(d, l - pos);
		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
	//	cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
		assert(pos < l);      //             cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);

	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-6;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
		if (f(mid) >= f(mid + eps)) bot = mid + eps;
		else top = mid;
	}
	cout << fixed << setprecision(10) << f(bot) << "\n";

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef long double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
	for (int i = 0; i < n && pos < l; i += k) {
		if (i + k >= n) {
		//	cerr << pos << " " << ans << "\n";
			ans += (l - pos) / v2;
			break;
		}
		d = min(d, l - pos);
		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
	//	cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
	//	assert(pos < l);                   cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);

	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-7;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
		if (f(mid) >= f(mid + eps)) bot = mid + eps;
		else top = mid;
	}
	cout << fixed << setprecision(10) << f(bot) << "\n";

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef long double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
    const ld eps = 1e-8;
	for (int i = 0; i < n && l - pos > eps; i += k) {
		if (i + k >= n) {
			ans += (l - pos) / v2;
			break;
		}
		if (d - (l - pos) > eps) d = l - pos;

		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
//		cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
		assert(pos <= l); //                  cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);
	    cerr << fixed << setprecision(5);
	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-8;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
		if (f(mid) >= f(mid + eps)) bot = mid + eps;
		else top = mid;
	}
	cout << fixed << setprecision(10) << double(f(bot)) << "\n";

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
	for (int i = 0; i < n; i += k) {
		if (i + k >= n) {
		//	cerr << pos << " " << ans << "\n";
			ans += (l - pos) / v2;
			break;
		}
		d = min(d, l - pos);
		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
	//	cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
	//	assert(pos < l);      //             cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);

	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-6;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
		if (f(mid) >= f(mid + eps)) bot = mid + eps;
		else top = mid;
	}
	cout << fixed << setprecision(10) << f(bot) << "\n";

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define forn(i, x, n) for(int i = int(x); i <= int(n); ++i)
#define for1(i, n, x) for(int i = int(n); i >= int(x); --i)
#define file ""
#define pb push_back
#define x first
#define y second
#define _bits __builtin_popcountll

typedef long long ll;
typedef long double ld;
typedef pair <int, int> PII;

const int N = 2e6 + 1;
const int INF = 1e9 + 9;
const int B = 1e9 + 7;

int n, k;
ld l, v1, v2;

ld f(ld d) {
    ld ans = 0, pos = 0;
    ld mx = 0;
    const ld eps = 1e-8;
	for (int i = 0; i < n && l - pos > eps; i += k) {
		if (i + k >= n) {
			ans += (l - pos) / v2;
			break;
		}
		if (d - (l - pos) > eps) d = l - pos;
		ld t = (d / v2);
		ld npos = pos + d;
		pos += v1 * t;
		ans += t;
		mx = max(mx, ans + (l - npos) / v1);
//		cerr << i << ": " << t << " " << (l - npos) << " " << npos << "\n";
	//	cerr << ans << ": " << pos << "\n";
		t = (npos - pos) / (v1 + v2);
		pos += v1 * t;
		ans += t;
	//	cerr << ans << ": " << pos << "\n";
		assert(pos <= l); //                  cerr << "-\n";
	}
	ans = max(ans, mx);
	return ans;
}

int main() {
#ifdef machine42
	freopen(file"in", "r", stdin);
	freopen(file"out", "w", stdout);
#endif
	ios_base :: sync_with_stdio (0);
	cin.tie(0);
	    cerr << fixed << setprecision(5);
	cin >> n >> l >> v1 >> v2 >> k;
	ld bot = 0, top = l;
	const ld eps = 1e-8;
	while (top - bot > eps) {
		ld mid = (top + bot) / 2;
	    ld m1 = (bot + mid) / 2;
	    ld m2 = (top + mid) / 2;
		if (f(m1) - f(m2) > eps) bot = m1 + eps;
		else top = m2;
	}
	cout << fixed << setprecision(10) << double(f(bot)) << "\n";

	return 0;
}


#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n,d,v1,v2,k;
	scanf("%d %d %d %d %d", &n, &d, &v1, &v2, &k);

	double low = 0;
	double high = 1.0 * d * v1;

	while (abs(low-high) > 1e-8)
	{
		double mid = (low+high)/2;
		double t = 1.0 * ceil(1.0*n/k) * (d - v1 * mid) / (v2-v1)
			+ 1.0 * (ceil(1.0*n/k)-1) * (d - v1 * mid) / (v1+v2);
		if (t < mid)
			high = mid;
		else
			low = mid;
	}
	printf("%.10f\n", (high+low)/2);
}


#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n,d,v1,v2,k;
	scanf("%d %d %d %d %d", &n, &d, &v1, &v2, &k);

	double low = 0;
	double high = 1.0 * d * v1;

	while (abs(low-high) > 1e-8)
	{
		double mid = (low+high)/2;
		double t = 1.0 * ceil(n/k) * (d - v1 * mid) / (v2-v1)
			+ 1.0 * (ceil(n/k)-1) * (d - v1 * mid) / (v1+v2);
		if (t < mid)
			high = mid;
		else
			low = mid;
	}
	printf("%.10f\n", (high+low)/2);
}


#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double n,d,v1,v2,k;
	scanf("%lf %lf %lf %lf %lf", &n, &d, &v1, &v2, &k);

	double low = 0;
	double high = 1.0 * d * v1;

	while (abs(low-high) > 1e-6)
	{
		double mid = (low+high)/2;
		double t = 1.0 * ceil(1.0*n/k) * (d - v1 * mid) / (v2-v1)
			+ 1.0 * (ceil(1.0*n/k)-1) * (d - v1 * mid) / (v1+v2);
		if (t < mid)
			high = mid;
		else
			low = mid;
	}
	printf("%.10f\n", (high+low)/2);
}


#include <iostream>
#include <algorithm>
#include <bitset>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <iomanip>
#include <queue>
#include <utility>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, char> pci;

const double kEps = 1e-9;

int main() {
    std::ios_base::sync_with_stdio(false);
    int n, k;
    double len, v1, v2;
    cin >> n >> len >> v1 >> v2 >> k;
    double l = 0.0, r = 1e9;
    for (int iter = 0; iter < 3500; ++iter) {
        double m = (l + r) / 2;
        double t = m;
        double curr_l = len;
        bool ok = true;
        for (int i = 0; i + 1 < (n + k - 1) / k; ++i) {
            if (curr_l <= t * v1 + kEps) {
                break;
            }
            double dt = (curr_l - t * v1) / (v2 - v1);
            double dl = dt * v2;
            t -= 2 * dl / (v1 + v2);
            if (t < -kEps) { ok = false; break; }
            curr_l -= 2 * dl / (v1 + v2) * v1;
        }
        if (t * v2 < curr_l - kEps) {
            ok = false;
        }
        if (ok) {
            r = m;
        } else {
            l = m;
        }
    }
    cout.precision(9);
    cout << fixed << l << '\n';
    return 0;
}


#include <iostream>
#include <algorithm>
#include <bitset>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <iomanip>
#include <queue>
#include <utility>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, char> pci;

const double kEps = 1e-9;

int main() {
    std::ios_base::sync_with_stdio(false);
    int n, k;
    double len, v1, v2;
    cin >> n >> len >> v1 >> v2 >> k;
    double l = 0.0, r = 1e9;
    while (r - l > kEps) {
        double m = (l + r) / 2;
        double t = m;
        double curr_l = len;
        bool ok = true;
        for (int i = 0; i + 1 < (n + k - 1) / k; ++i) {
            if (curr_l <= t * v1 + kEps) {
                break;
            }
            double dt = (curr_l - t * v1) / (v2 - v1);
            double dl = dt * v2;
            t -= 2 * dl / (v1 + v2);
            if (t < -kEps) { ok = false; break; }
            curr_l -= 2 * dl / (v1 + v2) * v1;
        }
        if (t * v2 < curr_l - kEps) {
            ok = false;
        }
        if (ok) {
            r = m;
        } else {
            l = m;
        }
    }
    cout.precision(9);
    cout << fixed << l << '\n';
    return 0;
}


#include <iostream>
#include <algorithm>
#include <bitset>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <iomanip>
#include <queue>
#include <utility>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, char> pci;

int main() {
    std::ios_base::sync_with_stdio(false);
    int n, k;
    double len, v1, v2;
    cin >> n >> len >> v1 >> v2 >> k;
    double l = 0.0, r = 2e9;
    while (r - l > 1e-9) {
        double m = (l + r) / 2;
        double t = m;
        double curr_l = len;
        bool ok = true;
        for (int i = 0; i + 1 < (n + k - 1) / k; ++i) {
            if (curr_l / v1 <= t) {
                break;
            }
            double dt = (curr_l - t * v1) / (v2 - v1);
            double dl = dt * v2;
            t -= 2 * dl / (v1 + v2);
            if (t < 0) { ok = false; break; }
            curr_l -= 2 * dl / (v1 + v2);
        }
        if (t * v2 < curr_l) {
            ok = false;
        }
        if (ok) {
            r = m;
        } else {
            l = m;
        }
    }
    cout.precision(9);
    cout << fixed << l << '\n';
    return 0;
}


#include <iostream>
#include <algorithm>
#include <bitset>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <iomanip>
#include <queue>
#include <utility>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, char> pci;

const double kEps = 1e-9;

int main() {
    std::ios_base::sync_with_stdio(false);
    int n, k;
    double len, v1, v2;
    cin >> n >> len >> v1 >> v2 >> k;
    double l = 0.0, r = 2e9;
    while (r - l > kEps) {
        double m = (l + r) / 2;
        double t = m;
        double curr_l = len;
        bool ok = true;
        for (int i = 0; i + 1 < (n + k - 1) / k; ++i) {
            if (curr_l <= t * v1 + kEps) {
                break;
            }
            double dt = (curr_l - t * v1) / (v2 - v1);
            double dl = dt * v2;
            t -= 2 * dl / (v1 + v2);
            if (t < -kEps) { ok = false; break; }
            curr_l -= 2 * dl / (v1 + v2);
        }
        if (t * v2 < curr_l - kEps) {
            ok = false;
        }
        if (ok) {
            r = m;
        } else {
            l = m;
        }
    }
    cout.precision(9);
    cout << fixed << l << '\n';
    return 0;
}


#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
#include <map>
#include <set>
#define MOD 1e9 + 7
#define eps 1e-11
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sz(a) a.size()
#define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define vii vector<int>
#define vll vector<long long>
typedef long long ll;
typedef long double ld;

using namespace std;

/*@Sergey_Miller*/

ll n,k;
ld l,v1,v2;
ld t;

ld get(ld time_ft) {
    ll cur = k;
    t = time_ft;
    ld dist = time_ft * v1;
    ld aut = time_ft * v2;
    ld nxt = aut;
    while(1) {
        if(cur >= n) {
            t += (l - aut)/v1;
            break;
        }
        cur+=k;
        ld tmet = (aut - dist)/(v1 + v2);
        t += tmet;
        dist += tmet*v1;
        nxt += v1 * tmet;
        ld tmet2 = (nxt - dist)/(v2 - v1);

        t += tmet2;
        dist += tmet2 * v1;
        nxt += tmet2 * v1;
        aut = nxt;
    }

    return aut;
}

void solve() {
    cin >> n >> l >> v1 >> v2 >> k;
    ld L = 0;
    ld R = 1e10;
    ld M;

    while(abs(R - L) > eps) {
        M = (L+R)/2;
        if(get(M) < l + eps) {
            L = M;
        } else {
            R = M;
        }
    }

    cout<<fixed;
    cout.precision(10);
    cout << t << endl;
    // cout << L << endl;

    // ld d = ((n-1)/k)+1;
    // ld agg = d + (d-1)*(v2-v1)/(v2+v1);
    // cout << agg * l / (v1 * agg + (v2-v1)) << endl;
}

int main () {
    ios::sync_with_stdio(false);
    // freopen("input.txt", "r", stdin);
 //    freopen("output.txt", "w", stdout);
    solve();
    return 0;
}


#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
#include <map>
#include <set>
#define MOD 1e9 + 7
#define eps 1e-12
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sz(a) a.size()
#define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define vii vector<int>
#define vll vector<long long>
typedef long long ll;
typedef long double ld;

using namespace std;

/*@Sergey_Miller*/

ll n,k;
ld l,v1,v2;
ld t;

ld get(ld time_ft) {
    ll cur = k;
    t = time_ft;
    ld dist = time_ft * v1;
    ld aut = time_ft * v2;
    ld nxt = aut;
    while(1) {
        if(cur >= n) {
            t += (l - aut)/v1;
            break;
        }
        cur+=k;
        ld tmet = (aut - dist)/(v1 + v2);
        t += tmet;
        dist += tmet*v1;
        nxt += v1 * tmet;
        ld tmet2 = (nxt - dist)/(v2 - v1);

        t += tmet2;
        dist += tmet2 * v1;
        nxt += tmet2 * v1;
        aut = nxt;
    }

    return aut;
}

void solve() {
    cin >> n >> l >> v1 >> v2 >> k;
    ld L = 0;
    ld R = 1e10;
    ld M;

    while(abs(R - L) > eps) {
        M = (L+R)/2;
        if(get(M) < l + eps) {
            L = M;
        } else {
            R = M;
        }
    }

    cout<<fixed;
    cout.precision(10);
    cout << t << endl;
    // cout << L << endl;

    // ld d = ((n-1)/k)+1;
    // ld agg = d + (d-1)*(v2-v1)/(v2+v1);
    // cout << agg * l / (v1 * agg + (v2-v1)) << endl;
}

int main () {
    ios::sync_with_stdio(false);
    // freopen("input.txt", "r", stdin);
 //    freopen("output.txt", "w", stdout);
    solve();
    return 0;
}


#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
#include <map>
#include <set>
#define MOD 1e9 + 7
#define eps 1e-10
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sz(a) a.size()
#define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define vii vector<int>
#define vll vector<long long>
typedef long long ll;
typedef long double ld;

using namespace std;

/*@Sergey_Miller*/

ll n,k;
ld l,v1,v2;
ld t;

ld get(ld time_ft) {
    ll cur = k;
    t = time_ft;
    ld dist = time_ft * v1;
    ld aut = time_ft * v2;
    ld nxt = aut;
    while(1) {
        if(cur >= n) {
            t += (l - aut)/v1;
            break;
        }
        cur+=k;
        ld tmet = (aut - dist)/(v1 + v2);
        t += tmet;
        dist += tmet*v1;
        nxt += v1 * tmet;
        ld tmet2 = (nxt - dist)/(v2 - v1);

        t += tmet2;
        dist += tmet2 * v1;
        nxt += tmet2 * v1;
        aut = nxt;
    }

    return aut;
}

void solve() {
    cin >> n >> l >> v1 >> v2 >> k;
    ld L = 0;
    ld R = 1e10;
    ld M;

    while(abs(R - L) > eps) {
        M = (L+R)/2;
        if(get(M) < l + eps) {
            L = M;
        } else {
            R = M;
        }
    }

    cout<<fixed;
    cout.precision(10);
    cout << t << endl;
    // cout << L << endl;

    // ld d = ((n-1)/k)+1;
    // ld agg = d + (d-1)*(v2-v1)/(v2+v1);
    // cout << agg * l / (v1 * agg + (v2-v1)) << endl;
}

int main () {
    ios::sync_with_stdio(false);
    // freopen("input.txt", "r", stdin);
 //    freopen("output.txt", "w", stdout);
    solve();
    return 0;
}


#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
#include <map>
#include <set>
#define MOD 1e9 + 7
#define eps 1e-12
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sz(a) a.size()
#define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define vii vector<int>
#define vll vector<long long>
typedef long long ll;
typedef long double ld;

using namespace std;

/*@Sergey_Miller*/

ll n,k;
ld l,v1,v2;
ld t;

ld get(ld time_ft) {
    ll cur = k;
    t = time_ft;
    ld dist = time_ft * v1;
    ld aut = time_ft * v2;
    ld nxt = aut;
    while(1) {
        if(cur >= n) {
            t += (l - aut)/v1;
            break;
        }
        cur+=k;
        ld tmet = (aut - dist)/(v1 + v2);
        t += tmet;
        dist += tmet*v1;
        nxt += v1 * tmet;
        ld tmet2 = (nxt - dist)/(v2 - v1);

        t += tmet2;
        dist += tmet2 * v1;
        nxt += tmet2 * v1;
        aut = nxt;
    }

    return aut;
}

void solve() {
    cin >> n >> l >> v1 >> v2 >> k;
    // ld L = 0;
    // ld R = 1e10;
    // ld M;
    // int cnt = 300;
    // while(cnt-- > 0) {
    //     M = (L+R)/2;
    //     if(get(M) < l + eps) {
    //         L = M;
    //     } else {
    //         R = M;
    //     }
    // }

    cout<<fixed;
    cout.precision(10);
    // cout << t << endl;
    // cout << L << endl;

    ld d = ((n-1)/k)+1;
    ld agg = d + (d-1)*(v2-v1)/(v2+v1);
    cout << agg * l / (v1 * agg + (v2-v1)) << endl;
}

int main () {
    ios::sync_with_stdio(false);
    // freopen("input.txt", "r", stdin);
 //    freopen("output.txt", "w", stdout);
    solve();
    return 0;
}


#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
#include <map>
#include <set>
#define MOD 1e9 + 7
#define eps 1e-12
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sz(a) a.size()
#define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define vii vector<int>
#define vll vector<long long>
typedef long long ll;
typedef long double ld;

using namespace std;

/*@Sergey_Miller*/

ll n,k;
ld l,v1,v2;
ld t;

ld get(ld time_ft) {
    ll cur = k;
    t = time_ft;
    ld dist = time_ft * v1;
    ld aut = time_ft * v2;
    ld nxt = aut;
    while(1) {
        if(cur >= n) {
            t += (l - aut)/v1;
            break;
        }
        cur+=k;
        ld tmet = (aut - dist)/(v1 + v2);
        t += tmet;
        dist += tmet*v1;
        nxt += v1 * tmet;
        ld tmet2 = (nxt - dist)/(v2 - v1);

        t += tmet2;
        dist += tmet2 * v1;
        nxt += tmet2 * v1;
        aut = nxt;
    }

    return aut;
}

void solve() {
    cin >> n >> l >> v1 >> v2 >> k;
    ld L = 0;
    ld R = 1e10;
    ld M;
    int cnt = 300;
    while(cnt-- > 0) {
        M = (L+R)/2;
        if(get(M) < l + eps) {
            L = M;
        } else {
            R = M;
        }
    }

    cout<<fixed;
    cout.precision(10);
    cout << t << endl;
    // cout << L << endl;

    // ld d = ((n-1)/k)+1;
    // ld agg = d + (d-1)*(v2-v1)/(v2+v1);
    // cout << agg * l / (v1 * agg + (v2-v1)) << endl;
}

int main () {
    ios::sync_with_stdio(false);
    // freopen("input.txt", "r", stdin);
 //    freopen("output.txt", "w", stdout);
    solve();
    return 0;
}


#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
#include <map>
#include <set>
#define MOD 1e9 + 7
#define eps 1e-9
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sz(a) a.size()
#define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define vii vector<int>
#define vll vector<long long>
typedef long long ll;
typedef long double ld;

using namespace std;

/*@Sergey_Miller*/

ll n,k;
ld l,v1,v2;
ld t;

ld get(ld time_ft) {
    ll cur = k;
    t = time_ft;
    ld dist = time_ft * v1;
    ld aut = time_ft * v2;
    ld nxt = aut;
    while(1) {
        if(cur >= n) {
            t += (l - aut)/v1;
            break;
        }
        cur+=k;
        ld tmet = (aut - dist)/(v1 + v2);
        t += tmet;
        dist += tmet*v1;
        nxt += v1 * tmet;
        ld tmet2 = (nxt - dist)/(v2 - v1);

        t += tmet2;
        dist += tmet2 * v1;
        nxt += tmet2 * v1;
        aut = nxt;
    }

    return aut;
}

void solve() {
    cin >> n >> l >> v1 >> v2 >> k;
    ld L = 0;
    ld R = 1e10;
    ld M;

    while(abs(R - L) > eps) {
        M = (L+R)/2;
        if(get(M) < l + eps) {
            L = M;
        } else {
            R = M;
        }
    }

    cout<<fixed;
    cout.precision(10);
    cout << t << endl;
    // cout << L << endl;

    // ld d = ((n-1)/k)+1;
    // ld agg = d + (d-1)*(v2-v1)/(v2+v1);
    // cout << agg * l / (v1 * agg + (v2-v1)) << endl;
}

int main () {
    ios::sync_with_stdio(false);
    // freopen("input.txt", "r", stdin);
 //    freopen("output.txt", "w", stdout);
    solve();
    return 0;
}


#include <iostream>
#include <vector>
#include <string>
#include <climits>
#include <algorithm>
#include <set>
#include <assert.h>
#include <utility>
#include <iomanip>
using namespace std;
long long n, l, v1, v2, k;
const long double eps = 1e-8;
bool ok(long double total_time) {
	long double min_bus_time = max((long double)0, 1.*(l - v1*total_time) / (v2 - v1));
	if (min_bus_time > total_time) return false;
	if (fabs(min_bus_time - 0) < eps) {
		return true;
	}
	long double bus_pos = min_bus_time*v2, walk_pos = v1*min_bus_time, elapsed_time = min_bus_time;
	for (int i = 1; i < n/k + bool(n%k); ++i) {
		long double tret = (bus_pos - walk_pos) / (v1 + v2);
		walk_pos += tret*v1;
		bus_pos = walk_pos + v2*min_bus_time;
		if (bus_pos > l) {
			return false;
		}
		walk_pos += min_bus_time*v1;
		if (walk_pos > l) {
			return false;
		}
	}
	return true;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> l >> v1 >> v2 >> k;
	long double lo = 0, hi = 1.*l / min(v1, v2);
	while (hi - lo > eps) {
		long double mid = (lo + hi) / 2;
		if (ok(mid)) {
			hi = mid;
		}
		else {
			lo = mid;
		}
	}
	cout << fixed << setprecision(20) << lo << "\n";
	//system("pause");
}


#include <iostream>
#include <vector>
#include <string>
#include <climits>
#include <algorithm>
#include <set>
#include <assert.h>
#include <utility>
#include <iomanip>
using namespace std;
long double l, v1, v2;
int n, k;
const long double eps = 1e-15;
bool ok(long double total_time) {
	long double min_bus_time = max((long double)0,(long double)1*(l - v1*total_time) / (v2 - v1));
	if (min_bus_time > total_time) return false;
	if (fabs(min_bus_time - 0) < eps) {
		return true;
	}
	long double bus_pos = min_bus_time*v2, walk_pos = v1*min_bus_time, elapsed_time = min_bus_time;
	for (int i = 1; i < n/k + bool(n%k); ++i) {
		long double tret = (bus_pos - walk_pos) / (v1 + v2);
		walk_pos += tret*v1;
		bus_pos = walk_pos + v2*min_bus_time;
		if (bus_pos > l && fabs(bus_pos-l)>eps) {
			return false;
		}
		walk_pos += min_bus_time*v1;
		if (walk_pos > l && fabs(walk_pos-l)>eps) {
			return false;
		}
	}
	return true;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> l >> v1 >> v2 >> k;
	long double lo = 0, hi = (long double)1*l / min(v1, v2);
	int iterations = 100;
	while (iterations--) {
		long double mid = (lo + hi) / 2;
		if (ok(mid)) {
			hi = mid;
		}
		else {
			lo = mid;
		}
	}
	cout << fixed << setprecision(20) << lo << "\n";
	//system("pause");
}


#include <iostream>
#include <vector>
#include <string>
#include <climits>
#include <algorithm>
#include <set>
#include <assert.h>
#include <utility>
#include <iomanip>
using namespace std;
long double l, v1, v2;
int n, k;
const long double eps = 1e-15;
bool ok(long double total_time) {
	long double min_bus_time = max((long double)0,(long double)1*(l - v1*total_time) / (v2 - v1));
	if (min_bus_time > total_time) return false;
	if (fabs(min_bus_time - 0) < eps) {
		return true;
	}
	long double bus_pos = min_bus_time*v2, walk_pos = v1*min_bus_time, elapsed_time = min_bus_time;
	for (int i = 1; i < n/k + bool(n%k); ++i) {
		long double tret = (bus_pos - walk_pos) / (v1 + v2);
		walk_pos += tret*v1;
		bus_pos = walk_pos + v2*min_bus_time;
		if (bus_pos > l && fabs(bus_pos-l)>eps) {
			return false;
		}
		walk_pos += min_bus_time*v1;
		if (walk_pos > l && fabs(walk_pos-l)>eps) {
			return false;
		}
	}
	return true;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> l >> v1 >> v2 >> k;
	long double lo = 0, hi = (long double)1*l / min(v1, v2);
	while (hi - lo > eps) {
		long double mid = (lo + hi) / 2;
		if (ok(mid)) {
			hi = mid;
		}
		else {
			lo = mid;
		}
	}
	cout << fixed << setprecision(20) << lo << "\n";
	//system("pause");
}


#include <iostream>
#include <vector>
#include <string>
#include <climits>
#include <algorithm>
#include <set>
#include <assert.h>
#include <utility>
#include <iomanip>
using namespace std;
long long n, l, v1, v2, k;
const long double eps = 1e-8;
bool ok(long double total_time) {
	long double min_bus_time = max((long double)0, 1.*(l - v1*total_time) / (v2 - v1));
	if (min_bus_time > total_time) return false;
	if (fabs(min_bus_time - 0) < eps) {
		return true;
	}
	long double bus_pos = min_bus_time*v2, walk_pos = v1*min_bus_time, elapsed_time = min_bus_time;
	for (int i = 1; i < n/k + bool(n%k); ++i) {
		long double tret = (bus_pos - walk_pos) / (v1 + v2);
		walk_pos += tret*v1;
		bus_pos = walk_pos + v2*min_bus_time;
		if (bus_pos > l) {
			return false;
		}
		walk_pos += min_bus_time*v1;
		if (walk_pos > l) {
			return false;
		}
	}
	return true;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> l >> v1 >> v2 >> k;
	long double lo = 0, hi = 1.*l / min(v1, v2);
	while (hi - lo > eps) {
		long double mid = (lo + hi) / 2;
		if (ok(mid)) {
			hi = mid;
		}
		else {
			lo = mid;
		}
	}
	cout << fixed << setprecision(20) << lo << "\n";
	system("pause");
}


#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=int(l);i<int(r);i++)
#define put(x) if(debug)cout<<#x<<" = "<<x<<endl;
#define X first
#define Y second
#define pb push_back
#define pp pop_back
using namespace std;
typedef long long num;
typedef long double lod;
typedef pair<int,int> point;
const int maxn=10005;
const lod eps=1e-6;
int n,l,v1,v2,k,steps;

bool check(lod x){
    int n=::n;
    lod sec=0,add=(2*x*v2)/(v1+v2);
    while(n>0){
	int sp=min(n,k);
	n-=sp;
	lod bg=sec*v1;
	if(bg+x*v2-l>eps){
	    return 0;
	}
	sec+=add;
    }
    return 1;
}

lod BS(lod l,lod r,int cnt=0){
    if(cnt==100) return l;
    lod mid=(l+r)/2;
    if(check(mid)){
	return BS(mid,r,cnt+1);
    }else{
	return BS(l,mid,cnt+1);
    }
}

int32_t main(){
    cin>>n>>l>>v1>>v2>>k;
    lod sec=BS(0,l);
    check(sec);
    cout<<setprecision(15)<<fixed;
    cout<<sec+(l-sec*v2)/v1<<endl;
}


#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=int(l);i<int(r);i++)
#define put(x) if(debug)cout<<#x<<" = "<<x<<endl;
#define X first
#define Y second
#define pb push_back
#define pp pop_back
using namespace std;
typedef long long num;
typedef long double lod;
typedef pair<int,int> point;
const int maxn=10005;
const lod eps=1e-6;
int n,l,v1,v2,k,debug=0;

bool check(lod x){
    int n=::n,l=::l;
    lod sec=0,add=(2*x*v2)/(v1+v2);
    while(n>0){
	int sp=min(n,k);
	n-=sp;
	lod bg=sec*v1;
	if(bg+x*v2-l>eps){
	    return 0;
	}
	sec+=add;
    }
    return 1;
}

lod BS(lod l,lod r,int cnt=0){
    if(cnt==30) return l;
    lod mid=(l+r)/2;
    if(check(mid)){
	return BS(mid,r,cnt+1);
    }else{
	return BS(l,mid,cnt+1);
    }
}

int32_t main(){
    cin>>n>>l>>v1>>v2>>k;
    lod sec=BS(0,l);
    check(sec);
    cout<<setprecision(15)<<fixed;
    cout<<sec+(l-sec*v2)/v1<<endl;
}


#include <cstring>
#include <iostream>
#include <bitset>
#include <cstdlib>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <utility>
#include <algorithm>
#include <iomanip>
using namespace std;
#define sc(a) scanf("%d", &a)
#define sc2(a, b) scanf("%d%d", &a, &b)
#define sc3(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define scs(s) scanf("%s", s)
#define pri(x) printf("%d\n", x)
#define mp make_pair
#define pb push_back
#define BUFF ios::sync_with_stdio(false);
#define imprime(v)                                        \
  for (int X = 0; X < v.size(); X++) cout << v[X] << " "; \
  cout << endl;
#define grid(v)                                                   \
  for (int X = 0; X < v.size(); X++) {                            \
    for (int Y = 0; Y < v[X].size(); Y++) cout << v[X][Y] << " "; \
    cout << endl;                                                 \
  }
#define endl "\n"
const int INF = 0x3f3f3f3f;
const long double pi = acos(-1);
typedef long long int ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vector<int> > vvi;
typedef vector<vector<ii> > vvii;
const int MOD = 1e9 + 7;
int n, l, v1, v2, k;
double eps = 1e-9;
bool simula(double T)
{
  double fim = l;
  int p = n;
  double delt = v2 - v1;
  double sum = v2 + v1;
  while (p > 0) {
    p -= k;
    double num = fim - 1.0 * T * v1;
    double t0 = num / delt;
    T -= t0;
    fim -= t0 * v1;
    if (p > 0) {
      double te = ((v2 * t0) - v1 * t0) / sum;
      double x = 1.0 * v1 * te;
      T -= te;
      fim -= x;
    }
  }
  return (T > 0);
}
double bb(double b, double e)
{
  double m = (b + e) / 2.0;
  if(max(e,b)-min(e,b)<eps) return b;
  if (simula(m)) return bb(b, m);
  return bb(m, e);
}
int main()
{
  cin >> n >> l >> v1 >> v2 >> k;
  cout << fixed << setprecision(10) << bb(0, 1000000000) << endl;
//  simula(4.7142857143);
    return 0;
}


#include <cstring>
#include <iostream>
#include <bitset>
#include <cstdlib>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <utility>
#include <algorithm>
#include <iomanip>
using namespace std;
#define sc(a) scanf("%d", &a)
#define sc2(a, b) scanf("%d%d", &a, &b)
#define sc3(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define scs(s) scanf("%s", s)
#define pri(x) printf("%d\n", x)
#define mp make_pair
#define pb push_back
#define BUFF ios::sync_with_stdio(false);
#define imprime(v)                                        \
  for (int X = 0; X < v.size(); X++) cout << v[X] << " "; \
  cout << endl;
#define grid(v)                                                   \
  for (int X = 0; X < v.size(); X++) {                            \
    for (int Y = 0; Y < v[X].size(); Y++) cout << v[X][Y] << " "; \
    cout << endl;                                                 \
  }
#define endl "\n"
const int INF = 0x3f3f3f3f;
const long double pi = acos(-1);
typedef long long int ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vector<int> > vvi;
typedef vector<vector<ii> > vvii;
const int MOD = 1e9 + 7;
int n, l, v1, v2, k;
double eps = 1e-9;
bool simula(double T)
{
  double fim = l;
  int p = n;
  double delt = v2 - v1;
  double sum = v2 + v1;
  while (p > 0) {
    p -= k;
    double num = fim - 1.0 * T * v1;
    double t0 = num / delt;
    T -= t0;
    fim -= t0 * v1;
    if (p > 0){
      double te = ((v2*t0)-v1*t0)/sum;
      double x=1.0*v1*te;
      T-=te;
      fim-=x;
    }
  }
  return (T > 0);
}
double bb(double b, double e)
{
  double m = (b + e) / 2.0;
  if (e - b < eps) return b;
  if (simula(m)) return bb(b, m);
  return bb(m, e);
}
int main()
{
  cin >> n >> l >> v1 >> v2 >> k;
  cout << fixed << setprecision(10) << bb(0, 1000000000) << endl;
//  simula(4.7142857143);
  return 0;
}


#include <cstring>
#include <iostream>
#include <bitset>
#include <cstdlib>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <utility>
#include <algorithm>
#include <iomanip>
using namespace std;
#define sc(a) scanf("%d", &a)
#define sc2(a, b) scanf("%d%d", &a, &b)
#define sc3(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define scs(s) scanf("%s", s)
#define pri(x) printf("%d\n", x)
#define mp make_pair
#define pb push_back
#define BUFF ios::sync_with_stdio(false);
#define imprime(v)                                        \
  for (int X = 0; X < v.size(); X++) cout << v[X] << " "; \
  cout << endl;
#define grid(v)                                                   \
  for (int X = 0; X < v.size(); X++) {                            \
    for (int Y = 0; Y < v[X].size(); Y++) cout << v[X][Y] << " "; \
    cout << endl;                                                 \
  }
#define endl "\n"
const int INF = 0x3f3f3f3f;
const long double pi = acos(-1);
typedef long long int ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vector<int> > vvi;
typedef vector<vector<ii> > vvii;
const int MOD = 1e9 + 7;
int n, l, v1, v2, k;
double eps = 1e-9;
bool simula(ld T)
{
  ld fim = l;
  ld p = n;
  ld delt = v2 - v1;
  ld sum = v2 + v1;
  while (p > 0) {
    p -= k;
    ld num = fim - 1.0 * T * v1;
    ld t0 = num / delt;
    T -= t0;
    fim -= t0 * v1;
    if (p > 0){
      ld te = ((v2*t0)-v1*t0)/sum;
      ld x=1.0*v1*te;
      T-=te;
      fim-=x;
    }
  }
  return (T > 0);
}
ld bb(ld b, ld e)
{
  ld m = (b + e) / 2.0;
  if (e - b < eps) return b;
  if (simula(m)) return bb(b, m);
  return bb(m, e);
}
int main()
{
  cin >> n >> l >> v1 >> v2 >> k;
  cout << fixed << setprecision(10) << bb(0, 1000000000) << endl;
//  simula(4.7142857143);
  return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,k;
    double l,v1,v2;
    cin>>n>>l>>v1>>v2>>k;
    //int a = n/k + ((n%k)?1:0);
    //int a = int(n*1.0/k + 0.5);
    int a = floor(n*1.0000/k);
    double x = v2 + (a-1)*2*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,k;
    double l,v1,v2;
    cin>>n>>l>>v1>>v2>>k;
    int a = n/k + ((n%k)?1:0);
    double x = v2 + (a-1)*2*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,l,v1,v2,k;
    cin>>n>>l>>v1>>v2>>k;
    int a = n/k + ((n%k)?1:0);
    double x = v2 + (a-1)*2.0*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l*1.0/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,k;
    double l,v1,v2;
    cin>>n>>l>>v1>>v2>>k;
    //int a = n/k + ((n%k)?1:0);
    //int a = int(n*1.0/k + 0.5);
    //int a = floor(n*1.0000/k);
    int a = (n-1)/k + 1;
    double x = v2 + (a-1)*2*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,k;
    double l,v1,v2
    cin>>n>>l>>v1>>v2>>k;
    int a = n/k + ((n%k)?1:0);
    double x = v2 + (a-1)*2*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,l,v1,v2,k;
    cin>>n>>l>>v1>>v2>>k;
    int a = int(n*1.0/k+0.5);
    double x = v2 + (a-1)*2.0*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l*1.0/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int n,k;
    double l,v1,v2;
    cin>>n>>l>>v1>>v2>>k;
    //int a = n/k + ((n%k)?1:0);
    int a = int(n*1.0/k + 0.5);
    double x = v2 + (a-1)*2*v1*v2/(v1+v2);
    double ans = l/x + (l-v2*l/x)/v1;
    printf("%.8lf\n",ans);
    return 0;
}


#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
    int n,l,v1,v2,k;
    scanf("%d%d%d%d%d",&n,&l,&v1,&v2,&k);
    int cnt=n/k;
    if(n%k) cnt++;
    double fenzi= (double)l*(v1+v2);
    double fenmu = (double)(2*v1*(cnt-1)+v1+v2);
    double l1=fenzi/fenmu;
    double ans=(l1/v2)+(double(l-l1)/v1);
    printf("%.12lf\n",ans);
    return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n,l,v1,v2,k;
    while(scanf("%d%d%d%d%d",&n,&l,&v1,&v2,&k)!=EOF)
    {
        int cnt=n/k;
        if(n%k) cnt++;
        double zi=(double)l*(v1+v2));
        double mu=double(2*(cnt-1)*v1+(v1+v2));
        double ll=zi/mu;
        double ans=double(ll/v2)+(double(l-ll)/v1);
        printf("%.12lf\n",ans);
    }
    return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n,l,v1,v2,k;
    while(scanf("%d%d%d%d%d",&n,&l,&v1,&v2,&k)!=EOF)
    {
        int cnt=n/k;
        if(n%k) cnt++;
        double zi=double(l)*(v1+v2));
        double mu=double(2*(cnt-1)*v1+(v1+v2));
        double ll=zi/mu;
        double ans=double(ll/v2)+(double(l-ll)/v1);
        printf("%.12lf\n",ans);
    }
    return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n,l,v1,v2,k;
    while(scanf("%d%d%d%d%d",&n,&l,&v1,&v2,&k)!=EOF)
    {
        int cnt=n/k;
        if(n%k) cnt++;
        double zi=double(l*(v1+v2));
        double mu=double(2*(cnt-1)*v1+(v1+v2));
        double ll=zi/mu;
        double ans=(ll/v2)+(double(l-ll)/v1);
        printf("%.12lf\n",ans);
    }
    return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n,l,v1,v2,k;
    while(scanf("%d%d%d%d%d",&n,&l,&v1,&v2,&k)!=EOF)
    {
        int cnt=n/k;
        if(n%k) cnt++;
        double zi=(double)l*(v1+v2);
        double mu=double(2*(cnt-1)*v1+(v1+v2));
        double ll=zi/mu;
        double ans=double(ll/v2)+(double(l-ll)/v1);
        printf("%.12lf\n",ans);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main()
{
    double n, k, l, v1, v2, x;
    cin >> n >> l >> v1 >> v2 >> k;
    n = ceil(n / k);
    x = n / (v2 - v1) + (n - 1) / (v2 + v1);
    printf("%.12lf", l/(v1 + 1/x));
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;

#define FOR(i,a,b) for (int i = (a); i < (b); i++)

int n, k;
ld l, v1, v2;

bool ok (ld T, int g)
{
    ld tb = (l - v1 * T) / (v2 - v1);
    ld tp = (tb * (v2 - v1)) / (v2 + v1);
    if (tb + (tb + tp) * (g - 1) <= T) return 1;
    return 0;
}

int main()
{
    cin >> n >> l >> v1 >> v2 >> k;

    n = (n + k - 1) / k;

    ld hi = 1e10, lo = 0;

    FOR(i,0,100)
    {
        ld mid = (hi + lo) / 2.0;
        if (ok(mid, n)) hi = mid;
        else lo = mid;
    }

    printf("%.12lf", hi);

    return 0;
}


#include <bits/stdc++.h>

using namespace std;

typedef long double ld;

#define FOR(i,a,b) for (int i = (a); i < (b); i++)

int n, k;
ld l, v1, v2;

bool ok (ld T, int g)
{
    ld tb = (l - v1 * T) / (v2 - v1);
    ld tp = (tb * (v2 - v1)) / (v2 + v1);
    if (tb + (tb + tp) * (g - 1) <= T) return 1;
    return 0;
}

int main()
{
    cin >> n >> l >> v1 >> v2 >> k;

    n = (n + k - 1) / k;

    ld hi = 1e10, lo = 0;

    FOR(i,0,100)
    {
        ld mid = (hi + lo) / 2.0;
        if (ok(mid, n)) hi = mid;
        else lo = mid;
    }

    printf("%.12lf", (double)hi);

    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main()
{
    double n, k, l, v1, v2, x;
    cin >> n >> l >> v1 >> v2 >> k;
    n = ceil(n / k);
    x = n / (v2 - v1) + (n - 1) / (v2 + v1);
    printf("%lf", l/(v1 + 1/x));
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

typedef long double ld;

#define FOR(i,a,b) for (int i = (a); i < (b); i++)

int n, k;
ld l, v1, v2;

bool ok (ld T, int g)
{
    ld tb = (l - v1 * T) / (v2 - v1);
    ld tp = (tb * (v2 - v1)) / (v2 + v1);
    if (tb + (tb + tp) * (g - 1) <= T) return 1;
    return 0;
}

int main()
{
    cin >> n >> l >> v1 >> v2 >> k;

    n = (n + k - 1) / k;

    ld hi = 1e10, lo = 0;

    FOR(i,0,100)
    {
        ld mid = (hi + lo) / 2.0;
        if (ok(mid, n)) hi = mid;
        else lo = mid;
    }

    printf("%.12lf", hi);

    return 0;
}


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
using namespace std;

int main(int argc, char const *argv[]) {
  long long n,k;
  double l, v1, v2;
  cin>>n>>l>>v1>>v2>>k;
  long long a = (n-1)/k+1;
  double t = 1.0 + (v2-v1)/(v1+v2);
  double le=(a-1)*t*v1 + v2;
  t*=a-1;
  t+=1.0;
  cout<<t*l/le<<endl;
  return 0;
}


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <map>
using namespace std;

int main(int argc, char const *argv[]) {
  long long n,k;
  double l, v1, v2;
  cin>>n>>l>>v1>>v2>>k;
  long long d=0,u=1ll<<30;
  while(u-d>1){
    long long m=(d+u)/2;
    if(m*k<=n)d=m;
    else u=m;
  }
  long long a=d;
  double t = 1.0 + (v2-v1)/(v1+v2);
  double le=(a-1)*t*v1 + v2;
  t*=a-1;
  t+=1.0;
  cout<< setprecision(10) <<t*l/le<<endl;
  return 0;
}


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
using namespace std;

int main(int argc, char const *argv[]) {
  long long n,k;
  double l, v1, v2;
  cin>>n>>l>>v1>>v2>>k;
  if(v1>=v2){
    cout<<l/v1<<endl;
    return 0;
  }
  if(n<=k){
    cout<<l/v2<<endl;
    return 0;
  }
  long long a = (n-1)/k+1;
  double t = 1.0 + (v2-v1)/(v1+v2);
  double le=(a-1)*t*v1 + v2;
  t*=a-1;
  t+=1.0;
  cout<<t*l/le<<endl;
  return 0;
}


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <map>
using namespace std;

int main(int argc, char const *argv[]) {
  long long n,k;
  double l, v1, v2;
  cin>>n>>l>>v1>>v2>>k;
  long long a=(n-1)/k+1;
  double t = 1.0 + (v2-v1)/(v1+v2);
  double le=(a-1)*t*v1 + v2;
  t*=a-1;
  t+=1.0;
  cout<< setprecision(10) <<t*l/le<<endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define sqr(x) (x) * (x)

const int INF = 1e8;

int n, num;
vector <int> res, res1;

int main()
{
    cin >> n;
    res.pb(0);
    res.pb(INF);
    res.pb(INF);

    for (int i = 0; i < n; i++)
    {
        cin >> num;

        res1.clear();
        res1.pb(INF);
        res1.pb(INF);
        res1.pb(INF);

        res1[0] = min(res[2], min(res[0], res[1])) + 1;
        if (num == 1 || num == 3)
            res1[1] = min(res[0], res[2]);
        if (num == 2 || num == 3)
            res1[2] = min(res[0], res[1]);

        res = res1;
    }

    cout << min(min(res[0], res[1]), res[2]);

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define sqr(x) (x) * (x)

int n, k;
double l, v1, v2, lef, rig, mid;

bool check(double t)
{
    int cnt = n;
    double x = 0;

    while (cnt > 0)
    {
        if (x + t * v2 > l)
            return 0;

        x = x + v1 * t + t * (v2 - v1) / (v2 + v1);
        cnt -= min(k, n);
    }

    return 1;
}

int main()
{
    cin >> n >> l >> v1 >> v2 >> k;

    lef = 0;
    rig = l / v2;
    for (int i = 0; i < 150; i++)
    {
        mid = (lef + rig) / 2;
        if (check(mid))
            lef = mid;
        else
            rig = mid;
    }

    cout << std::setprecision(10) << fixed;

    cout << lef + (l - lef * v2) / v1;

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define sqr(x) (x) * (x)

int n, k;
double l, v1, v2, lef, rig, mid;

bool check(double t)
{
    int cnt = n;
    double x = 0;

    while (cnt > 0)
    {
        if (x + t * v2 > l)
            return 0;

        x = x + v1 * t + v1 * t * (v2 - v1) / (v2 + v1);
        cnt -= min(k, n);
    }

    return 1;
}

int main()
{
    cin >> n >> l >> v1 >> v2 >> k;

    lef = 0;
    rig = l / v2;
    for (int i = 0; i < 150; i++)
    {
        mid = (lef + rig) / 2;
        if (check(mid))
            lef = mid;
        else
            rig = mid;
    }

    cout << std::setprecision(10) << fixed;

    cout << lef + (l - lef * v2) / v1;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

#define mp(x, y) make_pair((x),(y))
#define ff first
#define ss second

const int INF = int(1e9);
const double EPS = 1e-8;

#ifdef DEBUG
#define debug(args...)            {dbg,args; cerr<<endl;}
#else
#define debug(args...)
#endif

struct debugger
{
    template<typename T> debugger& operator , (const T& v)
	{
	    cerr<<v<<" ";
	    return *this;
	}
} dbg;

int main(){
    std::ios_base::sync_with_stdio(false);
    int N, K;
    double L, v1, v2;
    cin >> N >> L >> v1 >> v2 >> K;
    double r = (1.0 / v2) - (1.0 / v1);
    double lo = (double)L / v2, hi = (double)L / v1;
    for (int it = 0; it < 300; it++){
        double mid = (lo + hi) / 2.0;
        bool poss = true;
        double pos = 0.0;
        double elapsed = 0.0;
        for (int i = 0; i < N; i += K){
            double ppos = elapsed * v1;
            double tm = (pos - ppos) / (v1 + v2);
            elapsed += tm;
            if (elapsed > mid) {
                poss = false;
                break;
            }
            ppos = elapsed * v1;
            if ((L - ppos) / v2 + elapsed > mid) {
                poss = false;
                break;
            }
            double x = (mid - elapsed) + (ppos / v2) - (L / v1);
            x /= r;
            pos = x;
            elapsed += (x - ppos) / v2;
        }
        if (poss) hi = mid;
        else lo = mid;
    }
    cout << fixed << setprecision(10) << lo << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

#define mp(x, y) make_pair((x),(y))
#define ff first
#define ss second

const int INF = int(1e9);
const double EPS = 1e-8;

#ifdef DEBUG
#define debug(args...)            {dbg,args; cerr<<endl;}
#else
#define debug(args...)
#endif

struct debugger
{
    template<typename T> debugger& operator , (const T& v)
	{
	    cerr<<v<<" ";
	    return *this;
	}
} dbg;

int main(){
    std::ios_base::sync_with_stdio(false);
    int N, L, v1, v2, K;
    cin >> N >> L >> v1 >> v2 >> K;
    double r = (1.0 / v2) - (1.0 / v1);
    double lo = (double)L / v2, hi = (double)L / v1;
    for (int it = 0; it < 300; it++){
        double mid = (lo + hi) / 2.0;
        bool poss = true;
        double pos = 0.0;
        double elapsed = 0.0;
        for (int i = 0; i < N; i += K){
            double ppos = elapsed * v1;
            if (ppos > pos) {
                poss = false;
                break;
            }
            double tm = (pos - ppos) / (v1 + v2);
            elapsed += tm;
            ppos = elapsed * v1;
            if ((L - ppos) / v2 + elapsed > mid) {
                poss = false;
                break;
            }
            double x = (mid - elapsed) + (ppos / v2) - (L / v1);
            x /= r;
            pos = x;
            elapsed += (x - ppos) / v2;
            if (elapsed > mid) {
                poss = false;
                break;
            }
        }
        if (poss) hi = mid;
        else lo = mid;
    }
    cout << fixed << setprecision(10) << lo << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

#define mp(x, y) make_pair((x),(y))
#define ff first
#define ss second

const int INF = int(1e9);
const double EPS = 1e-8;

#ifdef DEBUG
#define debug(args...)            {dbg,args; cerr<<endl;}
#else
#define debug(args...)
#endif

struct debugger
{
    template<typename T> debugger& operator , (const T& v)
	{
	    cerr<<v<<" ";
	    return *this;
	}
} dbg;

int main(){
    std::ios_base::sync_with_stdio(false);
    int N, L, v1, v2, K;
    cin >> N >> L >> v1 >> v2 >> K;
    double r = (1.0 / v2) - (1.0 / v1);
    double lo = (double)L / v2, hi = (double)L / v1;
    for (int it = 0; it < 300; it++){
        double mid = (lo + hi) / 2.0;
        bool poss = true;
        double pos = 0.0;
        double elapsed = 0.0;
        for (int i = 0; i < N; i += K){
            double ppos = elapsed * v1;
            if (ppos >= L || ppos > pos) {
                break;
            }
            double tm = (pos - ppos) / (v1 + v2);
            elapsed += tm;
            ppos = elapsed * v1;
            if ((L - ppos) / v2 + elapsed > mid) {
                poss = false;
                break;
            }
            double x = (mid - elapsed) + (ppos / v2) - (L / v1);
            x /= r;
            //cerr << r << ' ' << x << endl;
            pos = x;
            elapsed += (x - ppos) / v2;
        }
        if (poss) hi = mid;
        else lo = mid;
    }
    cout << fixed << setprecision(10) << lo << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

#define mp(x, y) make_pair((x),(y))
#define ff first
#define ss second

const int INF = int(1e9);
const double EPS = 1e-8;

#ifdef DEBUG
#define debug(args...)            {dbg,args; cerr<<endl;}
#else
#define debug(args...)
#endif

struct debugger
{
    template<typename T> debugger& operator , (const T& v)
	{
	    cerr<<v<<" ";
	    return *this;
	}
} dbg;

int main(){
    std::ios_base::sync_with_stdio(false);
    int N, L, v1, v2, K;
    cin >> N >> L >> v1 >> v2 >> K;
    double r = (1.0 / v2) - (1.0 / v1);
    double lo = (double)L / v2, hi = (double)L / v1;
    for (int it = 0; it < 300; it++){
        double mid = (lo + hi) / 2.0;
        bool poss = true;
        double pos = 0.0;
        double elapsed = 0.0;
        for (int i = 0; i < N; i += K){
            double ppos = elapsed * v1;
            double tm = (pos - ppos) / (v1 + v2);
            elapsed += tm;
            ppos = elapsed * v1;
            if ((L - ppos) / v2 + elapsed > mid) {
                poss = false;
                break;
            }
            double x = (mid - elapsed) + (ppos / v2) - (L / v1);
            x /= r;
            pos = x;
            elapsed += (x - ppos) / v2;
        }
        if (poss) hi = mid;
        else lo = mid;
    }
    cout << fixed << setprecision(10) << lo << endl;

    return 0;
}


#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;
//memset
#define MEMSET_INF 127 // about 2B
#define set0(a) memset(a,0,sizeof(a));
#define setminus1(a) memset(a,-1,sizeof(a));
#define setinf(a) memset(a,MEMSET_INF,sizeof(a));

//stl
#define mp make_pair
#define pb push_back
//#define pc(x) putchar_unlocked(x)
//#define gc() getchar_unlocked()

//Loops
#define REP(i,n) for(int i = 0;i < (int)(n); i++)
#define REP1(i,a,b) for(int i = (int)(a);i <= (int)(b); i++)
#define REPMAP(i,mm) for(auto i = mm.begin();i !=mm.end(); i++)

//Sort
#define sortvec(vec) sort(vec.begin(), sort.end())

//Misc
#define LSOne(i) (i & (-i))	// the first Least Significant One-bit in i

//modulo
#define mod %
#define NUM 1000000007

#define LONG_LONG_MAX	9223372036854775807LL
#define LONG_LONG_MIN	(-LONG_LONG_MAX-1)

#define LMAX LONG_LONG_MAX
#define LMIN LONG_LONG_MIN
#define IMAX INT_MAX
#define IMIN INT_MIN
#define PI M_PI
#define EPS 1e-12
#define INF 1e9
#define M_PI		3.14159265358979323846
#define cin(x) scanf("%d",&x)
#define cout(x) printf("$d",x)
#define endl '\n'
#define s(n) scanf("%d",&n)
#define sll(n) scanf("%I64d",&n)
#define p(n) printf("%d",n)
#define pll(n) printf("%I64d",n)
#define all(v) (v).begin(),(v).end()

//typedef
typedef long long ll;
typedef long double lb;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef set<int> si;
typedef map<string, int> msi;
typedef map<int, int> mii;
typedef tuple<int,int,int> iii;

#define MAX_N 100005

lb l,v1,v2,k;
int n;
//void movebytime(double x){
//    cout<<x<<endl;
//    TIME += x;
//    cur += x*v1;
//}

bool ok(lb t){

//    printf("%.10lf\n",t);
    lb timewalk = l / v1;
    if(timewalk<=t)
        return true;

    int here = n;
    lb TIME = 0;
    lb cur = 0;
    while(1){
        here -=k;

        lb moretime = (l - cur)/v2;
        if(moretime + TIME > t)
            return false;
        lb temp = ((l-cur) - v1*(t-TIME))/(v2-v1);
        lb bc = cur + temp * v2;
        cur += temp * v1;
        TIME += temp;

//        cout<<bc<<endl;
//        printf("%.10lf\n",bc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;
        if(here <= 0 || cur >= l)
            return true;

        lb mc = (bc - cur)/(v1 + v2);

//        cout<<mc<<endl;
        cur += mc*v1;
        TIME += mc;
//        printf("%.10lf\n",mc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;

        if(TIME > t)
            return false;

    }

}

void solve(){

    cin>>n>>l>>v1>>v2>>k;

    if(v1 >= v2){
        double ans = l;
        ans /= v1;
        printf("%.10lf",ans);
        return;
    }
    if(k >= n){
        double ans = l;
        ans /= v2;
        printf("%.10lf",ans);
        return;

    }

    lb LOW = 0.0;

    lb HIGH = 1e9 + 5;
//    cout<<ok(3);
//    cout<<"-----";
//    cout<<ok(4.5);
//    return;

    while(HIGH - LOW >= EPS){
        lb mid = (HIGH + LOW)/2;
        if(ok(mid)){
            HIGH = mid;
        }else{
            LOW = mid;
        }
    }
    printf("%.10lf",(double)HIGH);

}

int main(){

    cin.tie(0);
    cout.tie(0);
    cin.sync_with_stdio(0);
    cout.sync_with_stdio(0);

        solve();

    return 0;
}


#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;
//memset
#define MEMSET_INF 127 // about 2B
#define set0(a) memset(a,0,sizeof(a));
#define setminus1(a) memset(a,-1,sizeof(a));
#define setinf(a) memset(a,MEMSET_INF,sizeof(a));

//stl
#define mp make_pair
#define pb push_back
//#define pc(x) putchar_unlocked(x)
//#define gc() getchar_unlocked()

//Loops
#define REP(i,n) for(int i = 0;i < (int)(n); i++)
#define REP1(i,a,b) for(int i = (int)(a);i <= (int)(b); i++)
#define REPMAP(i,mm) for(auto i = mm.begin();i !=mm.end(); i++)

//Sort
#define sortvec(vec) sort(vec.begin(), sort.end())

//Misc
#define LSOne(i) (i & (-i))	// the first Least Significant One-bit in i

//modulo
#define mod %
#define NUM 1000000007

#define LONG_LONG_MAX	9223372036854775807LL
#define LONG_LONG_MIN	(-LONG_LONG_MAX-1)

#define LMAX LONG_LONG_MAX
#define LMIN LONG_LONG_MIN
#define IMAX INT_MAX
#define IMIN INT_MIN
#define PI M_PI
#define EPS 1e-9
#define INF 1e9
#define M_PI		3.14159265358979323846
#define cin(x) scanf("%d",&x)
#define cout(x) printf("$d",x)
#define endl '\n'
#define s(n) scanf("%d",&n)
#define sll(n) scanf("%I64d",&n)
#define p(n) printf("%d",n)
#define pll(n) printf("%I64d",n)
#define all(v) (v).begin(),(v).end()

//typedef
typedef long long ll;
typedef long double lb;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef set<int> si;
typedef map<string, int> msi;
typedef map<int, int> mii;
typedef tuple<int,int,int> iii;

#define MAX_N 100005

lb l,v1,v2,k;
int n;
//void movebytime(double x){
//    cout<<x<<endl;
//    TIME += x;
//    cur += x*v1;
//}

bool ok(lb t){

//    printf("%.10lf\n",t);
    lb timewalk = l / v1;
    if(timewalk<=t)
        return true;

    int here = n;
    lb TIME = 0;
    lb cur = 0;
    while(1){
        here -=k;

        lb moretime = (l - cur)/v2;
        if(moretime + TIME > t)
            return false;
        lb temp = ((l-cur) - v1*(t-TIME))/(v2-v1);
        lb bc = cur + temp * v2;
        cur += temp * v1;
        TIME += temp;

//        cout<<bc<<endl;
//        printf("%.10lf\n",bc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;
        if(here <= 0 || cur >= l)
            return true;

        lb mc = (bc - cur)/(v1 + v2);

//        cout<<mc<<endl;
        cur += mc*v1;
        TIME += mc;
//        printf("%.10lf\n",mc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;

        if(TIME > t)
            return false;

    }

}

void solve(){

    cin>>n>>l>>v1>>v2>>k;

    if(v1 >= v2){
        double ans = l;
        ans /= v1;
        printf("%.10lf",ans);
        return;
    }
    if(k >= n){
        double ans = l;
        ans /= v2;
        printf("%.10lf",ans);
        return;

    }

    lb LOW = 0.0;

    lb HIGH = 1e9 + 5;
//    cout<<ok(3);
//    cout<<"-----";
//    cout<<ok(4.5);
//    return;

    while(HIGH - LOW >= EPS){
        cnt ++;
        lb mid = (HIGH + LOW)/2;
        if(ok(mid)){
            HIGH = mid;
        }else{
            LOW = mid;
        }
    }
    printf("%.10lf",(double)HIGH);

}

int main(){

//    cin.tie(0);
//    cout.tie(0);
//    cin.sync_with_stdio(0);
//    cout.sync_with_stdio(0);

    //	freopen("input.in","r",stdin);
    //	freopen("output.out","w",stdout);

    int TC = 1;
    //	cin>>TC;
    for(int ZZ=1;ZZ<=TC;ZZ++){
        //		cout<<"Case #"<<ZZ<<": ";
        clock_t start = clock();
        //		double ans;
        //		cout.precision(10);
        //		cout<<fixed<<ans<<endl;
        solve();
        clock_t end = clock();
        //		cout<<endl;
        cerr <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
    }
    return 0;
}


#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;
//memset
#define MEMSET_INF 127 // about 2B
#define set0(a) memset(a,0,sizeof(a));
#define setminus1(a) memset(a,-1,sizeof(a));
#define setinf(a) memset(a,MEMSET_INF,sizeof(a));

//stl
#define mp make_pair
#define pb push_back
//#define pc(x) putchar_unlocked(x)
//#define gc() getchar_unlocked()

//Loops
#define REP(i,n) for(int i = 0;i < (int)(n); i++)
#define REP1(i,a,b) for(int i = (int)(a);i <= (int)(b); i++)
#define REPMAP(i,mm) for(auto i = mm.begin();i !=mm.end(); i++)

//Sort
#define sortvec(vec) sort(vec.begin(), sort.end())

//Misc
#define LSOne(i) (i & (-i))	// the first Least Significant One-bit in i

//modulo
#define mod %
#define NUM 1000000007

#define LONG_LONG_MAX	9223372036854775807LL
#define LONG_LONG_MIN	(-LONG_LONG_MAX-1)

#define LMAX LONG_LONG_MAX
#define LMIN LONG_LONG_MIN
#define IMAX INT_MAX
#define IMIN INT_MIN
#define PI M_PI
#define EPS 1e-9
#define INF 1e9
#define M_PI		3.14159265358979323846
#define cin(x) scanf("%d",&x)
#define cout(x) printf("$d",x)
#define endl '\n'
#define s(n) scanf("%d",&n)
#define sll(n) scanf("%I64d",&n)
#define p(n) printf("%d",n)
#define pll(n) printf("%I64d",n)
#define all(v) (v).begin(),(v).end()

//typedef
typedef long long ll;
typedef long double lb;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef set<int> si;
typedef map<string, int> msi;
typedef map<int, int> mii;
typedef tuple<int,int,int> iii;

#define MAX_N 100005

lb l,v1,v2,k;
int n;
//void movebytime(double x){
//    cout<<x<<endl;
//    TIME += x;
//    cur += x*v1;
//}

bool ok(lb t){

//    printf("%.10lf\n",t);
    lb timewalk = l / v1;
    if(timewalk<=t)
        return true;

    int here = n;
    lb TIME = 0;
    lb cur = 0;
    while(1){
        here -=k;

        lb moretime = (l - cur)/v2;
        if(moretime + TIME > t)
            return false;
        lb temp = ((l-cur) - v1*(t-TIME))/(v2-v1);
        lb bc = cur + temp * v2;
        cur += temp * v1;
        TIME += temp;

//        cout<<bc<<endl;
//        printf("%.10lf\n",bc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;
        if(here <= 0 || cur >= l)
            return true;

        lb mc = (bc - cur)/(v1 + v2);

//        cout<<mc<<endl;
        cur += mc*v1;
        TIME += mc;
//        printf("%.10lf\n",mc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;

        if(TIME > t)
            return false;

    }

}

void solve(){

    cin>>n>>l>>v1>>v2>>k;

    if(v1 >= v2){
        double ans = l;
        ans /= v1;
        printf("%.10lf",ans);
        return;
    }
    if(k >= n){
        double ans = l;
        ans /= v2;
        printf("%.10lf",ans);
        return;

    }

    lb LOW = 0.0;

    lb HIGH = 1e9 + 5;
//    cout<<ok(3);
//    cout<<"-----";
//    cout<<ok(4.5);
//    return;

    while(HIGH - LOW >= EPS){
        lb mid = (HIGH + LOW)/2;
        if(ok(mid)){
            HIGH = mid;
        }else{
            LOW = mid;
        }
    }
    printf("%.10lf",(double)HIGH);

}

int main(){

    cin.tie(0);
    cout.tie(0);
    cin.sync_with_stdio(0);
    cout.sync_with_stdio(0);

        solve();
    return 0;
}


#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;
//memset
#define MEMSET_INF 127 // about 2B
#define set0(a) memset(a,0,sizeof(a));
#define setminus1(a) memset(a,-1,sizeof(a));
#define setinf(a) memset(a,MEMSET_INF,sizeof(a));

//stl
#define mp make_pair
#define pb push_back
//#define pc(x) putchar_unlocked(x)
//#define gc() getchar_unlocked()

//Loops
#define REP(i,n) for(int i = 0;i < (int)(n); i++)
#define REP1(i,a,b) for(int i = (int)(a);i <= (int)(b); i++)
#define REPMAP(i,mm) for(auto i = mm.begin();i !=mm.end(); i++)

//Sort
#define sortvec(vec) sort(vec.begin(), sort.end())

//Misc
#define LSOne(i) (i & (-i))	// the first Least Significant One-bit in i

//modulo
#define mod %
#define NUM 1000000007

#define LONG_LONG_MAX	9223372036854775807LL
#define LONG_LONG_MIN	(-LONG_LONG_MAX-1)

#define LMAX LONG_LONG_MAX
#define LMIN LONG_LONG_MIN
#define IMAX INT_MAX
#define IMIN INT_MIN
#define PI M_PI
#define EPS 1e-9
#define INF 1e9
#define M_PI		3.14159265358979323846
#define cin(x) scanf("%d",&x)
#define cout(x) printf("$d",x)
#define endl '\n'
#define s(n) scanf("%d",&n)
#define sll(n) scanf("%I64d",&n)
#define p(n) printf("%d",n)
#define pll(n) printf("%I64d",n)
#define all(v) (v).begin(),(v).end()

//typedef
typedef long long ll;
typedef long double lb;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef set<int> si;
typedef map<string, int> msi;
typedef map<int, int> mii;
typedef tuple<int,int,int> iii;

#define MAX_N 100005

lb l,v1,v2,k;
int n;
//void movebytime(double x){
//    cout<<x<<endl;
//    TIME += x;
//    cur += x*v1;
//}

bool ok(lb t){

//    printf("%.10lf\n",t);
    lb timewalk = l / v1;
    if(timewalk<=t)
        return true;

    int here = n;
    lb TIME = 0;
    lb cur = 0;
    while(1){
        here -=k;

        lb moretime = (l - cur)/v2;
        if(moretime + TIME > t)
            return false;
        lb temp = ((l-cur) - v1*(t-TIME))/(v2-v1);
        lb bc = cur + temp * v2;
        cur += temp * v1;
        TIME += temp;

//        cout<<bc<<endl;
//        printf("%.10lf\n",bc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;
        if(here <= 0 || cur >= l)
            return true;

        lb mc = (bc - cur)/(v1 + v2);

//        cout<<mc<<endl;
        cur += mc*v1;
        TIME += mc;
//        printf("%.10lf\n",mc);
//        printf("%.10lf\n",cur);
//        printf("%.10lf\n",TIME);
//        cout<<cur<<" "<<TIME<<endl;

        if(TIME > t)
            return false;

    }

}

void solve(){

    cin>>n>>l>>v1>>v2>>k;

    if(v1 >= v2){
        double ans = l;
        ans /= v1;
        printf("%.10lf",ans);
        return;
    }
    if(k >= n){
        double ans = l;
        ans /= v2;
        printf("%.10lf",ans);
        return;

    }

    lb LOW = 0.0;

    lb HIGH = 1e9 + 5;
//    cout<<ok(3);
//    cout<<"-----";
//    cout<<ok(4.5);
//    return;

    while(HIGH - LOW >= EPS){
        lb mid = (HIGH + LOW)/2;
        if(ok(mid)){
            HIGH = mid;
        }else{
            LOW = mid;
        }
    }
    printf("%.10lf",(double)HIGH);

}

int main(){

//    cin.tie(0);
//    cout.tie(0);
//    cin.sync_with_stdio(0);
//    cout.sync_with_stdio(0);

    //	freopen("input.in","r",stdin);
    //	freopen("output.out","w",stdout);

    int TC = 1;
    //	cin>>TC;
    for(int ZZ=1;ZZ<=TC;ZZ++){
        //		cout<<"Case #"<<ZZ<<": ";
        clock_t start = clock();
        //		double ans;
        //		cout.precision(10);
        //		cout<<fixed<<ans<<endl;
        solve();
        clock_t end = clock();
        //		cout<<endl;
        cerr <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
    }
    return 0;
}


#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n, k;
double L, v1, v2;
int main() {
	scanf("%d%lf%lf%lf%d", &n, &L, &v1, &v2, &k);
	double lo = 0, hi = L / v2, md;
	for (int j = 1; j <= 500; j++) {
		md = (lo + hi) / 2.0;
		bool ok = 1;
		int m = (n - 1) / k + 1;
		double now = 0, nxt = 0, T = 0;
		for (int i = 1; i <= m; i++) {
			T += md;
			nxt = now + md*v2;
			now += md*v1;
			double add = (nxt - now) / (v1 + v2);
			now += add*v1;
			if (nxt > L || now > L) {
				ok = 0;
				break;
			}
		}
		if (ok) lo = md;
		else hi = md;
	}
	printf("%.10lf", (L - v2 * lo) / v1 + lo);
}


#include<stdio.h>
#include<algorithm>

using namespace::std;

int n;
double l, v1, v2;
int k;

bool possible(double now) {
	double people = 0.0, bus = 0.0, t = 0.0;
	int en = 0;
	while (en<n) {
		double t1 = (bus - people) / (v1 + v2);
		double pos = people + t1*v1;
		if (pos >= l) {
			t += (l - people) / v1;
			break;
		}
		else {
			en += k;
			double x = (l - now*v1) / (v2 - v1);
			bus = pos + x*v2;
			if (bus >= l) {
				t += t1 + (l - pos) / v2;
				break;
			}
			people = pos + x*v1;
			t += t1 + x;
		}
	}
	return t<now;
}

int main() {
	scanf("%d %lf %lf %lf %d", &n, &l, &v1, &v2, &k);
	double m1 = 0.0;
	double m2 = 1000000000.0;
	if (v1 >= v2) {
		m1 = l / v1;
	}
	else {
		while (m2-m1 > 0.000001) {
			double mi = (m1 + m2) / 2;
			if (possible(mi)) m2 = mi;
			else m1 = mi;
		}
	}
	printf("%.9lf", m1);
	return 0;
}


#include<stdio.h>
#include<algorithm>

using namespace::std;

int n;
double l, v1, v2;
int k;

bool possible(double now) {
	double people = 0.0, bus = 0.0, t = 0.0;
	int en = 0;
	while (en<n) {
		double t1 = (bus - people) / (v1 + v2);
		double pos = people + t1*v1;
		if (pos >= l) {
			t += (l - people) / v1;
			break;
		}
		else {
			en += k;
			double x = (l - now*v1) / (v2 - v1);
			bus = pos + x*v2;
			if (bus >= l) {
				t += t1 + (l - pos) / v2;
				break;
			}
			people = pos + x*v1;
			t += t1 + x;
		}
	}
	return t<now;
}

int main() {
	scanf("%d %lf %lf %lf %d", &n, &l, &v1, &v2, &k);
	double m1 = 0.0;
	double m2 = 1000000000.0;
	if (v1 >= v2) {
		m1 = l / v1;
	}
	else {
		for (int k = 1; k <= 500; k++) {
			double mi = (m1 + m2) / 2;
			if (possible(mi)) m2 = mi;
			else m1 = mi;
		}
	}
	printf("%.9lf", m1);
	return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <string>
#include <stack>
#include <queue>

using namespace std;
double eps=1e-10;
double l,v1,v2;
int n,k;
double fun(double x)
{
    int tang=n/k;
    if (n%k!=0) tang++;//去终点的次数
    double t1=(l-v1*x)/(v2-v1);//乘车的最少时间
    if ((tang-1)*(t1*v2-t1*v1)/(v1+v2)+tang*t1<=x) return true;//在乘车最少的时候能满足
    return false;
}
int main()
{
    scanf ("%d%lf%lf%lf%d",&n,&l,&v1,&v2,&k);
    double L=l/v2,R=l/v1;
    while (R-L>eps)
    {
        double mid=(L+R)/2;
        if (fun(mid)) R=mid;
        else L=mid;
    }
    printf ("%.10f\n",L);
    return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <string>
#include <stack>
#include <queue>

using namespace std;
double eps=1e-7;
double l,v1,v2;
int n,k;
double fun(double x)
{
    int tang=n/k;
    if (n%k!=0) tang++;//去终点的次数
    double t1=(l-v1*x)/(v2-v1);//乘车的最少时间
    if ((tang-1)*(t1*v2-t1*v1)/(v1+v2)+tang*t1<=x) return true;//在乘车最少的时候能满足
    return false;
}
int main()
{
    scanf ("%d%lf%lf%lf%d",&n,&l,&v1,&v2,&k);
    double L=l/v2,R=l/v1;
    while (R-L>eps)
    {
        double mid=(L+R)/2;
        if (fun(mid)) R=mid;
        else L=mid;
    }
    printf ("%.10f\n",L);
    return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <string>
#include <stack>
#include <queue>

using namespace std;
double eps=1e-6;
double l,v1,v2;
int n,k;
double fun(double x)
{
    int tang=n/k;
    if (n%k!=0) tang++;//去终点的次数
    double t1=(l-v1*x)/(v2-v1);//乘车的最少时间
    if ((tang-1)*(t1*v2-t1*v1)/(v1+v2)+tang*t1<=x) return true;//在乘车最少的时候能满足
    return false;
}
int main()
{
    scanf ("%d%lf%lf%lf%d",&n,&l,&v1,&v2,&k);
    double L=l/v2,R=l/v1;
    while (R-L>eps)
    {
        double mid=(L+R)/2;
        if (fun(mid)) R=mid;
        else L=mid;
    }
    printf ("%.10f\n",L);
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define lld long long int
#define pb push_back
#define pii pair<int, int>
#define vi vector<int>
#define vpii vector<pair<int, int> >
#define large 1000000001

int main(){
  lld n, l, v1, v2, k, i, j;
  cin >> n >> l >> v1 >> v2 >> k;
  double hi=(double)large, low = 1.0, mid;
  while((hi-low) > 0.0001){
    mid = (low+hi)/2.0;
    i = n;
    double dis = (double)l;
    double x, y, remTime=mid;
    while(i>0 && remTime > 0.0 && dis > 0.0){
      x = (((double)v1*(double)v2)*remTime-(dis*(double)v1))/((double)v2 - (double)v1);
      y = dis-x;

      if(x < 0.0){
	break;
      }

      double temp = (double)v1+(double)v2;

      remTime = remTime - (2.0*y)/temp;
      dis = dis - (2.0*y*(double)v1)/temp;

      i -= k;
    }

    if(i>0){
      low = mid;
    }else
      hi = mid;
  }
  printf("%0.9f\n", hi);
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define lld long long int
#define pb push_back
#define pii pair<int, int>
#define vi vector<int>
#define vpii vector<pair<int, int> >
#define large 1000000001

int main(){
  lld n, l, v1, v2, k, i, j;
  cin >> n >> l >> v1 >> v2 >> k;
  double hi=(double)large, low = 1.0, mid;
  while((hi-low) > 0.000001){
    mid = (low+hi)/2.0;
    i = n;
    //cout << mid << " me " << low << " " << hi << " " << (hi-low) << endl;
    double dis = (double)l;
    double x, y, remTime=mid;
    while(i>0 && remTime > 0.0 && dis > 0.0){
      x = (((double)v1*(double)v2)*remTime-(dis*(double)v1))/((double)v2 - (double)v1);
      y = dis-x;

      if(x < 0.0){
	break;
      }

      double temp = (double)v1+(double)v2;

      remTime = remTime - (2.0*y)/temp;
      dis = dis - (2.0*y*(double)v1)/temp;

      i -= k;
    }

    if(i>0){
      low = mid+0.0000001;
    }else
      hi = mid;
  }
  printf("%0.9f\n", hi);
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define lld long long int
#define pb push_back
#define pii pair<int, int>
#define vi vector<int>
#define vpii vector<pair<int, int> >
#define large 1000000001

int main(){
  lld n, l, v1, v2, k, i, j;
  cin >> n >> l >> v1 >> v2 >> k;
  double hi=(double)large, low = 0.0, mid;
  while((hi-low) > 0.000001){
    mid = (low+hi)/2.0;
    i = n;
    //cout << mid << " me " << low << " " << hi << " " << (hi-low) << endl;
    double dis = (double)l;
    double x, y, remTime=mid;
    while(i>0 && remTime > 0.0 && dis > 0.0){
      x = (((double)v1*(double)v2)*remTime-(dis*(double)v1))/((double)v2 - (double)v1);
      y = dis-x;

      if(x < 0.0){
	break;
      }

      double temp = (double)v1+(double)v2;

      remTime = remTime - (2.0*y)/temp;
      dis = dis - (2.0*y*(double)v1)/temp;

      i -= k;
    }

    if(i>0){
      low = mid+0.0000001;
    }else
      hi = mid;
  }
  printf("%0.9f\n", hi);
  return 0;
}


#include <cstdio>
#include <cstring>
#include <map>
#include <string>
#include <vector>
using namespace std;
#define two(i) (1<<(i))

char *atom[101] =
{
    "","H","He",
    "Li","Be","B","C","N","O","F","Ne",
    "Na","Mg","Al","Si","P","S","Cl","Ar",
    "K","Ca","Sc","Ti","V","Cr",
    "Mn","Fe","Co","Ni","Cu","Zn",
    "Ga","Ge","As","Se","Br","Kr",
    "Rb","Sr","Y","Zr","Nb","Mo",
    "Tc","Ru","Rh","Pd","Ag","Cd",
    "In","Sn","Sb","Te","I","Xe",
    "Cs","Ba","La","Ce","Pr","Nd",
    "Pm","Sm","Eu","Gd","Tb","Dy",
    "Ho","Er","Tm","Yb","Lu","Hf","Ta","W",
    "Re","Os","Ir","Pt","Au","Hg",
    "Tl","Pb","Bi","Po","At","Rn",
    "Fr","Ra","Ac","Th","Pa","U",
    "Np","Pu","Am","Cm","Bk","Cf","Es","Fm"
};

int n,K;
map<string, int>mp;
void init()
{
    for(int i = 1; i <= 100; i++)
        mp[atom[i]] = i;
}
int A[20], B[20], C[1<<17];
int use[20];
int ans[20];
bool vst[20][1<<17];

bool dfs(int dep, int st)
{
    if(dep == K && !st)return 1;
    if(vst[dep][st])return 0;
    vst[dep][st] = 1;
    for(int i = st; i > 0; i=(i-1)&st)
        if(B[dep] == C[i])
        {
            ans[dep] = i;
            if(dfs(dep+1, st^i))return 1;
        }

    return 0;
}

int main()
{
//   freopen("in.txt","r",stdin);
    init();
    scanf("%d%d",&n,&K);
    int suma = 0, sumb = 0;
    for(int i = 0; i < n; i++)
    {
        char ss[20];
        scanf("%s",ss);
        A[i] = mp[ss];
        suma += A[i];
    }
    for(int i = 0; i < K; i++)
    {
        char ss[20];
        scanf("%s",ss);
        B[i] = mp[ss];
        sumb += B[i];
 //       printf("%d:\n",i);
    }
    C[0] = 0;
    for(int i = 1; i < two(n); i++)
    {
        int ct = 0;
        while(!(two(ct)&i))ct++;
        C[i] = C[i-two(ct)] + A[ct];
    }

    bool ok;
    if(suma != sumb) ok = 0;
    else
    {
        memset(vst,0,sizeof(vst));
        ok = dfs(0, two(n)-1);
    }
    if(ok)
    {
        puts("YES");
        for(int i = 0 ; i < K; i++)
        {
            bool first = 1;
            for(int j = 0; j < n; j++)
                if(ans[i] & (1<<j))
                {
                    if(first)printf("%s",atom[A[j]]);
                    else printf("+%s",atom[A[j]]);
                    first = 0;
                }
            printf("->%s\n",atom[B[i]]);
        }
    }
    else puts("NO");
    return 0;
}


#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define two(i) (1<<(i))

char a[101][5] =
{
    "H","He",
    "Li","Be","B","C","N","O","F","Ne",
    "Na","Mg","Al","Si","P","S","Cl","Ar",
    "K","Ca","Sc","Ti","V","Cr",
    "Mn","Fe","Co","Ni","Cu","Zn",
    "Ga","Ge","As","Se","Br","Kr",
    "Rb","Sr","Y","Zr","Nb","Mo",
    "Tc","Ru","Rh","Pd","Ag","Cd",
    "In","Sn","Sb","Te","I","Xe",
    "Cs","Ba","La","Ce","Pr","Nd",
    "Pm","Sm","Eu","Gd","Tb","Dy",
    "Ho","Er","Tm","Yb","Lu","Hf","Ta","W",
    "Re","Os","Ir","Pt","Au","Hg",
    "Tl","Pb","Bi","Po","At","Rn",
    "Fr","Ra","Ac","Th","Pa","U",
    "Np","Pu","Am","Cm","Bk","Cf","Es","Fm"
};

int n,K;
int find(char *s)
{
    for(int i = 0; i < 100; i++)
        if(strcmp(s, a[i])==0)return i+1;
    return 0;
}
int A[20], B[20];
int use[20];
vector<int>g[20];
int ans[20];
bool dfs(int dep)
{
    if(dep == K)
    {
        return 1;
    }
    int sz = g[dep].size();
    bool ret = 0;
    for(int i = 0; i < sz; i++)
    {
        int tt = g[dep][i];
        bool ok = 1;
        for(int j = 0; j < n; j++)if(two(j)&tt)
                if(use[j])ok = 0;
        if(!ok)continue;
        for(int j = 0; j < n; j++)if(two(j)&tt)
                use[j] = 1;
        ans[dep] = tt;
        ret |= dfs(dep+1);
        if(ret)return 1;
        for(int j = 0; j < n; j++)if(two(j)&tt)
                use[j] = 0;
    }
    return 0;
}

int main()
{
    scanf("%d%d",&n,&K);
    for(int i = 0; i < n; i++)
    {
        char ss[20];
        scanf("%s",ss);
        A[i] = find(ss);
    }
    for(int i = 0; i < K; i++)
    {
        char ss[20];
        scanf("%s",ss);
        B[i] = find(ss);
        g[i].clear();
 //       printf("%d:\n",i);
        for(int j = 0; j < (1<<n); j++)
        {
            int sum = 0;
            for(int k = 0; k < n; k++)if(j&(1<<k))sum+=A[k];
            if(sum == B[i])
            {
                g[i].push_back(j);
 //               for(int k = 0; k < n; k++)if(j&(1<<k))printf("%s ",a[A[k]-1]);
 //               puts("");
            }
        }
    }

    bool ok = dfs(0);
    if(ok)
    {
        puts("YES");
        for(int i = 0 ; i < K; i++)
        {
            bool first = 1;
            for(int j = 0; j < n; j++)
                if(ans[i] & (1<<j))
                {
                    if(first)printf("%s",a[A[j]-1]);
                    else printf("+%s",a[A[j]-1]);
                    first = 0;
                }
            printf("->%s\n",a[B[i]-1]);
        }
    }
    else puts("NO");
    return 0;
}


#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define two(i) (1<<(i))

char a[101][5] =
{
    "H","He",
    "Li","Be","B","C","N","O","F","Ne",
    "Na","Mg","Al","Si","P","S","Cl","Ar",
    "K","Ca","Sc","Ti","V","Cr",
    "Mn","Fe","Co","Ni","Cu","Zn",
    "Ga","Ge","As","Se","Br","Kr",
    "Rb","Sr","Y","Zr","Nb","Mo",
    "Tc","Ru","Rh","Pd","Ag","Cd",
    "In","Sn","Sb","Te","I","Xe",
    "Cs","Ba","La","Ce","Pr","Nd",
    "Pm","Sm","Eu","Gd","Tb","Dy",
    "Ho","Er","Tm","Yb","Lu","Hf","Ta","W",
    "Re","Os","Ir","Pt","Au","Hg",
    "Tl","Pb","Bi","Po","At","Rn",
    "Fr","Ra","Ac","Th","Pa","U",
    "Np","Pu","Am","Cm","Bk","Cf","Es","Fm"
};

int n,K;
int find(char *s)
{
    for(int i = 0; i < 100; i++)
        if(strcmp(s, a[i])==0)return i+1;
    return 0;
}
int A[20], B[20];
int use[20];
vector<int>g[20];
int ans[20];
bool vst[20][1<<17];

bool dfs(int dep, int st)
{
    if(dep == K)return 1;
    if(vst[dep][st])return 0;
    vst[dep][st] = 1;
    int sz = g[dep].size();
    for(int i = 0; i < sz; i++)
    {
        int tt = g[dep][i];
        bool ok = 1;
        for(int j = 0; j < n; j++)if(tt&two(j))
            if(st & two(j)){ok = 0;break;}
        if(!ok)continue;
        int nst = st;
        for(int j = 0; j < n; j++)if(tt&two(j))nst |= two(j);
        ans[dep] = tt;
        if(dfs(dep+1, nst))return 1;
    }

    return 0;
}

int main()
{

    scanf("%d%d",&n,&K);
    int suma = 0, sumb = 0;
    for(int i = 0; i < n; i++)
    {
        char ss[20];
        scanf("%s",ss);
        A[i] = find(ss);
        suma += A[i];
    }
    for(int i = 0; i < K; i++)
    {
        char ss[20];
        scanf("%s",ss);
        B[i] = find(ss);
        sumb += B[i];
        g[i].clear();
 //       printf("%d:\n",i);
        for(int j = 0; j < (1<<n); j++)
        {
            int sum = 0;
            for(int k = 0; k < n; k++)if(j&(1<<k))sum+=A[k];
            if(sum == B[i])
                g[i].push_back(j);
        }
    }

    bool ok;
    if(suma != sumb) ok = 0;
    else
    {
        memset(vst,0,sizeof(vst));
        ok = dfs(0, 0);
    }
    if(ok)
    {
        puts("YES");
        for(int i = 0 ; i < K; i++)
        {
            bool first = 1;
            for(int j = 0; j < n; j++)
                if(ans[i] & (1<<j))
                {
                    if(first)printf("%s",a[A[j]-1]);
                    else printf("+%s",a[A[j]-1]);
                    first = 0;
                }
            printf("->%s\n",a[B[i]-1]);
        }
    }
    else puts("NO");
    return 0;
}


#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define two(i) (1<<(i))

char a[101][5] =
{
    "H","He",
    "Li","Be","B","C","N","O","F","Ne",
    "Na","Mg","Al","Si","P","S","Cl","Ar",
    "K","Ca","Sc","Ti","V","Cr",
    "Mn","Fe","Co","Ni","Cu","Zn",
    "Ga","Ge","As","Se","Br","Kr",
    "Rb","Sr","Y","Zr","Nb","Mo",
    "Tc","Ru","Rh","Pd","Ag","Cd",
    "In","Sn","Sb","Te","I","Xe",
    "Cs","Ba","La","Ce","Pr","Nd",
    "Pm","Sm","Eu","Gd","Tb","Dy",
    "Ho","Er","Tm","Yb","Lu","Hf","Ta","W",
    "Re","Os","Ir","Pt","Au","Hg",
    "Tl","Pb","Bi","Po","At","Rn",
    "Fr","Ra","Ac","Th","Pa","U",
    "Np","Pu","Am","Cm","Bk","Cf","Es","Fm"
};

int n,K;
int find(char *s)
{
    for(int i = 0; i < 100; i++)
        if(strcmp(s, a[i])==0)return i+1;
    return 0;
}
int A[20], B[20], C[1<<17];
int use[20];
int ans[20];
bool vst[20][1<<17];

bool dfs(int dep, int st)
{
    if(dep == K && !st)return 1;
    if(vst[dep][st])return 0;
    vst[dep][st] = 1;
    for(int i = st; i > 0; i=(i-1)&st)
        if(B[dep] == C[i])
        {
            ans[dep] = i;
            if(dfs(dep+1, st^i))return 1;
        }

    return 0;
}

int main()
{
    scanf("%d%d",&n,&K);
    int suma = 0, sumb = 0;
    for(int i = 0; i < n; i++)
    {
        char ss[20];
        scanf("%s",ss);
        A[i] = find(ss);
        suma += A[i];
    }
    for(int i = 0; i < K; i++)
    {
        char ss[20];
        scanf("%s",ss);
        B[i] = find(ss);
        sumb += B[i];
 //       printf("%d:\n",i);
    }
    C[0] = 0;
    for(int i = 1; i < two(n); i++)
    {
        int ct = 0;
        while(!(two(ct)&i))ct++;
        C[i] = C[i-two(ct)] + A[ct];
    }

    bool ok;
    if(suma != sumb) ok = 0;
    else
    {
        memset(vst,0,sizeof(vst));
        ok = dfs(0, two(n)-1);
    }
    if(ok)
    {
        puts("YES");
        for(int i = 0 ; i < K; i++)
        {
            bool first = 1;
            for(int j = 0; j < n; j++)
                if(ans[i] & (1<<j))
                {
                    if(first)printf("%s",a[A[j]-1]);
                    else printf("+%s",a[A[j]-1]);
                    first = 0;
                }
            printf("->%s\n",a[B[i]-1]);
        }
    }
    else puts("NO");
    return 0;
}