# include <iostream>
# include <stdio.h>
# include <math.h>
# include <list>
# include <algorithm>
# include <limits>
#include <vector>
#include <ctype.h> // for isupper function
#include <string>      
#include <sstream> 
// #include <bits/stdc++.h>
using namespace std;

#define sz(v) int((v).size())
#define all(v) (v).begin(), (v).end()

typedef  long long LL;

typedef  long double LD;
string NumberToString ( LL Number )
{
	stringstream ss;
	ss << Number;
	return ss.str();
}


LL StringToNumber ( const string &Text )//Text not by const reference so that the function can be used with a 
{                               //character array as argument
	stringstream ss(Text);
	LL result;
	return ss >> result ? result : 0;
}

int main(){
	//std::ios::sync_with_stdio(false);  
	// uncomment it or use scanf and printf
	//cout << "Minimum value for long long int(or other datatype): " << std::numeric_limits<long long int>::min() << '\n';
	// instead of min() use max() to get the maximum value in the previous case
	//scanf returns the number of items succesfully converted  or EOF on error
	LL n, l;
	cin>>n>>l;
	LD arr[n];
	for(LL i=0; i<n; i++){
		cin>>arr[i];
	}
	sort(arr, arr+n);
	
	LD diff = arr[1]-arr[0];
	if(n==1){
		diff=arr[0];
	}
	for(LL i=1; i<=n-2; i++){
		if((arr[i+1]-arr[i])>diff){
			diff=arr[i+1]-arr[i];
		}
	}
	LD a = ((LD)diff)/2;
	LD b = arr[0]>(l- arr[n-1])?arr[0]:(l- arr[n-1]);
	
	LD ans = b>a?b:a;
	printf("%.10Lf \n", ans);

}