10
-405 -230 252 -393 -390 -259 97 163 81 -129
 3
10000 -10000 10000
 1
-10000
 20
-16 -23 29 44 -40 -50 -41 34 -38 30 -12 28 -44 -49 15 50 -28 38 -2 0

702.333333333333712
 10000.000000000016371
 0.000000000000000
 113.875000000000043

#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
const double inf = 1e30;
struct point {
  int x, y;
  point() : x(0), y(0) {}
  point(int x_, int y_) : x(x_), y(y_) {}
  double get_b(double k) { return y - k * x; }
} a[maxn], b[maxn];
double get_k(point a, point b) { return 1.0 * (b.y - a.y) / (b.x - a.x); }
long long det(point a, point b) { return 1LL * a.x * b.y - 1LL * a.y * b.x; }
point operator-(point a, point b) { return point(a.x - b.x, a.y - b.y); }
int n, an, bn;
int main() {
  scanf("%d", &n);
  an = bn = 0, a[1] = b[1] = point(0, 0);
  for (int i = 1, v, s = 0; i <= n; ++i)
    scanf("%d", &v), a[i + 1] = b[i + 1] = point(i, s += v);
  for (int i = 1; i <= n + 1; ++i) {
    while (an >= 2 && det(a[an] - a[an - 1], a[i] - a[an - 1]) <= 0) --an;
    while (bn >= 2 && det(b[bn] - b[bn - 1], b[i] - b[bn - 1]) >= 0) --bn;
    a[++an] = a[i], b[++bn] = b[i];
  }
  double ans = inf, k1, k2;
  for (int i = 1, j = bn; i < an || j > 1;) {
    if (i < an)
      k1 = get_k(a[i], a[i + 1]);
    else
      k1 = inf;
    if (j > 1)
      k2 = get_k(b[j], b[j - 1]);
    else
      k2 = inf;
    if (k1 < k2)
      ans = min(ans, b[j].get_b(k1) - a[i++].get_b(k1));
    else
      ans = min(ans, b[j--].get_b(k2) - a[i].get_b(k2));
  }
  printf("%.12f\n", ans);
  return 0;
}
