//by yjz
#include<bits/stdc++.h>
using namespace std;
#define FF first
#define SS second
#define PB push_back
#define MP make_pair
#ifndef LOCAL
#define cerr if(0)cout
#endif
typedef long long ll;
//My i/o stream
struct fastio
{
	char s[100000];
	int it, len;
	fastio() {it=len=0;}
	inline char get()
	{
		if (it<len) return s[it++]; it=0;
		len=fread(s, 1, 100000, stdin);
		if (len==0) return EOF; else return s[it++];
	}
	bool notend()
	{
		char c=get();
		while (c==' '||c=='\n') c=get();
		if (it>0) it--;
		return c!=EOF;
	}
}_buff;
#define geti(x) x=getnum()
#define getii(x,y) geti(x),geti(y)
#define getiii(x,y,z) getii(x,y),geti(z)
#define puti(x) putnum(x),putchar(' ')
#define putii(x,y) puti(x),puti(y)
#define putiii(x,y,z) putii(x,y),puti(z)
#define putsi(x) putnum(x),putchar('\n')
#define putsii(x,y) puti(x),putsi(y)
#define putsiii(x,y,z) putii(x,y),putsi(z)
inline ll getnum()
{
	ll r=0; bool ng=0; char c; c=_buff.get();
	while (c!='-'&&(c<'0'||c>'9')) c=_buff.get();
	if (c=='-') ng=1, c=_buff.get();
	while (c>='0'&&c<='9') r=r*10+c-'0', c=_buff.get();
	return ng?-r:r;
}
template <class T> inline void putnum(T x)
{
	if (x<0) putchar('-'), x=-x;
	register short a[20]={}, sz=0;
	while (x) a[sz++]=x%10, x/=10;
	if(sz==0) putchar('0');
	for (int i=sz-1; i>=0; i--) putchar('0'+a[i]);
}
inline char getreal() {char c=_buff.get(); while (c<=32) c=_buff.get(); return c;}
typedef long double ld;
const int mod = 1e9+7;
ll qpow(ll x, ll k) {return k==0? 1: 1ll*qpow(1ll*x*x%mod,k>>1)*(k&1?x:1)%mod;}
const int maxn = 200111;
ld a[maxn], c[maxn];
ll A[maxn], b[maxn];
/*
f'[x] = f[x]+c[x]
f[x] = (f[x-1]+f[x+1])/2-b[x]
f'[x] = (f'[x-1]+f'[x+1])/2
f[x]+c[x] = (f[x-1]+f[x+1]+c[x-1]+c[x+1])/2
c[x] = (c[x-1]+c[x+1])/2+b[x]
c[x+1] = 2c[x]-2b[x]-c[x-1]

f'[x] = A[x]+c[x]
*/
int n;
void rotate(ll a[], int k)
{
	vector<ll> v;
	for (int i=k; i<=n; i++) v.PB(a[i]);
	for (int i=1; i<k; i++) v.PB(a[i]);
	for (int i=1; i<=n; i++) a[i] = v[i-1];
}
void solve_c()
{
	ld ck[maxn], cb[maxn];
	ck[2] = 1;
	cb[2] = 0;
	for (int i=2; i<=n; i++)
	{
		ck[i+1] = 2*ck[i]-ck[i-1];
		cb[i+1] = 2*cb[i]-2*b[i]-cb[i-1];
	}
	ld x = -cb[n+1];
	x /= ck[n+1];
	for (int i=2; i<=n; i++) c[i] = ck[i]*x+cb[i];

//	for (int i=1; i<=n; i++) cerr<<c[i]<<" "; cerr<<endl;
//	for (int i=2; i<=n; i++) cerr<<(c[i-1]+c[i+1])/2+b[i]-c[i]<<" "; cerr<<endl;
	
}
ld det(ld a, ld b, ld c, ld d) {return a*d-b*c;}
vector<int> ch;
ld chk(ld a, ld b, ld c, ld d, ld e, ld f)
{
	return det(c-a, d-b, e-a, f-b)>=0;
}
int main()
{
	geti(n);
	for (int i=1; i<=n; i++) geti(A[i]);
	for (int i=1; i<=n; i++) geti(b[i]);
	int mxi = 1;
	for (int i=2; i<=n; i++) if (A[i]>A[mxi]) mxi = i;
	rotate(A, mxi);
	rotate(b, mxi);
	A[n+1] = A[1];
	solve_c();
	ch.PB(1);
	a[1] = a[n+1] = A[1];
	for (int i=2; i<=n; i++) a[i] = A[i]+c[i];
	for (int i=2; i<=n+1; i++)
	{
		while (ch.size()>=2)
		{
			auto p = ch[ch.size()-2];
			auto q = ch[ch.size()-1];
			if (chk(p, a[p], q, a[q], i, a[i]))
			{
				ch.pop_back();
			}
			else break;
		}
		ch.PB(i);
	}
//	for (auto x : ch) cerr<<x<<","; cerr<<endl;
	ld ans = 0;
	for (int i=0; i+1<ch.size(); i++)
	{
		int l = ch[i], r = ch[i+1];
		for (int j=0; j<r-l; j++)
		{
			ans += (a[l]*(r-l-j)+a[r]*j)/(r-l)-c[l+j];
		}
	}
	printf("%.15lf\n", (double)ans/n);
	return 0;
}

Measured memory_bytes: 21056