#include <bits/stdc++.h>
using namespace std;
bool cmp_double(double a, double b) {
  if (abs(a - b) < 1e-10)
    return true;
  else
    return false;
}
int gcd(long long a, long long b) {
  if (a % b == 0) return b;
  return gcd(b, a % b);
}
int lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
bool cmp_sec(const pair<int, int> &a, const pair<int, int> &b) {
  return (a.second < b.second);
}
long long extended_gcd(long long a, long long b, long long *x, long long *y) {
  if (a == 0) {
    *x = 0;
    *y = 1;
    return b;
  }
  long long x1, y1;
  long long d = extended_gcd(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return d;
}
long long lcm_n(long long arr[], long long n) {
  long long ans = arr[0];
  for (int i = 1; i < n; i++) ans = (((arr[i] * ans)) / (gcd(arr[i], ans)));
  return ans;
}
long long big_mod(long long a, long long pow, long long m) {
  long long ans = 1;
  while (pow > 0) {
    if (pow % 2 != 0) ans = ((ans % m) * (a % m)) % m;
    a = ((a % m) * (a % m)) % m;
    pow /= 2;
  }
  return ans;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, l;
  cin >> n >> l;
  int arr[n + 10];
  memset(arr, 0, sizeof(arr));
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  double r = 0;
  double a = 0;
  double b = 0;
  sort(arr, arr + n);
  if (arr[0] != 0) a = arr[0];
  if (arr[n - 1] != l) b = (l - arr[n - 1]);
  r = max(a, b);
  for (int i = 0; i < n; i++) {
    double c = 0;
    double d = 0;
    if (i > 0) c = (arr[i] - arr[i - 1]) / 2.00;
    d = (arr[i + 1] - arr[i]) / 2.00;
    if (cmp_double(c, d))
      r = max(r, c);
    else {
      c = max(c, d);
      r = max(r, c);
    }
  }
  cout << fixed << setprecision(9) << r << endl;
}
