#include <bits/stdc++.h>
using namespace std;
template <class T>
void debug(T a, T b) {
  ;
}
template <class T>
void chmin(T& a, const T& b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T& a, const T& b) {
  if (a < b) a = b;
}
namespace std {
template <class S, class T>
ostream& operator<<(ostream& out, const pair<S, T>& a) {
  out << '(' << a.first << ',' << a.second << ')';
  return out;
}
}  // namespace std
long long int readL() {
  long long int res;
  scanf("%I64d", &res);
  return res;
}
void printL(long long int res) { printf("%I64d", res); }
int n;
int ar[300005];
set<int> exi;
pair<int, int> ar2[300005];
const int C = 60;
double get(const vector<int>& a) {
  double res = 0, div = 1;
  ;
  for (int i = 0; i < (a.size() - 1); ++i) {
    res += (a[i + 1] - a[i]) / div;
    div *= 2;
  }
  return res;
}
vector<int> refl(vector<int>& a) {
  for (int i = 0; i < (a.size()); ++i) a[i] *= -1;
  return a;
}
double getval(int p) {
  auto it = exi.find(p);
  vector<int> R, L;
  R.push_back(*it);
  ++it;
  while (it != exi.end()) {
    if (R.size() > C) break;
    R.push_back(*it);
    ++it;
  }
  R.push_back(n);
  it = exi.find(p);
  L.push_back(*it);
  while (it != exi.begin()) {
    if (L.size() > C) break;
    --it;
    L.push_back(*it);
  }
  L.push_back(-1);
  double sum1 = get(R), sum2 = get(refl(L));
  exi.erase(p);
  return sum1 * sum2 / 2;
}
int main() {
  cin >> n;
  for (int i = 0; i < (n); ++i) {
    scanf("%d", &ar[i]);
    ar2[i] = make_pair(ar[i], i);
  }
  for (int i = 0; i < (n); ++i) exi.insert(i);
  ;
  ;
  sort(ar2, ar2 + n);
  double res = 0;
  for (int i = 0; i < (n); ++i) {
    int p = ar2[i].second;
    double t = getval(p);
    res += t * ar2[i].first;
  }
  res /= n * (long long int)n;
  printf("%.10f\n", res);
  return 0;
}
