# 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);
}
IyBpbmNsdWRlIDxpb3N0cmVhbT4KIyBpbmNsdWRlIDxzdGRpby5oPgojIGluY2x1ZGUgPG1hdGguaD4KIyBpbmNsdWRlIDxsaXN0PgojIGluY2x1ZGUgPGFsZ29yaXRobT4KIyBpbmNsdWRlIDxsaW1pdHM+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxjdHlwZS5oPiAvLyBmb3IgaXN1cHBlciBmdW5jdGlvbgojaW5jbHVkZSA8c3RyaW5nPiAgICAgIAojaW5jbHVkZSA8c3N0cmVhbT4gCi8vICNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBzeih2KSBpbnQoKHYpLnNpemUoKSkKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksICh2KS5lbmQoKQoKdHlwZWRlZiAgbG9uZyBsb25nIExMOwoKdHlwZWRlZiAgbG9uZyBkb3VibGUgTEQ7CnN0cmluZyBOdW1iZXJUb1N0cmluZyAoIExMIE51bWJlciApCnsKCXN0cmluZ3N0cmVhbSBzczsKCXNzIDw8IE51bWJlcjsKCXJldHVybiBzcy5zdHIoKTsKfQoKCkxMIFN0cmluZ1RvTnVtYmVyICggY29uc3Qgc3RyaW5nICZUZXh0ICkvL1RleHQgbm90IGJ5IGNvbnN0IHJlZmVyZW5jZSBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aXRoIGEgCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGFyYWN0ZXIgYXJyYXkgYXMgYXJndW1lbnQKCXN0cmluZ3N0cmVhbSBzcyhUZXh0KTsKCUxMIHJlc3VsdDsKCXJldHVybiBzcyA+PiByZXN1bHQgPyByZXN1bHQgOiAwOwp9CgppbnQgbWFpbigpewoJLy9zdGQ6Omlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgIAoJLy8gdW5jb21tZW50IGl0IG9yIHVzZSBzY2FuZiBhbmQgcHJpbnRmCgkvL2NvdXQgPDwgIk1pbmltdW0gdmFsdWUgZm9yIGxvbmcgbG9uZyBpbnQob3Igb3RoZXIgZGF0YXR5cGUpOiAiIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nIGludD46Om1pbigpIDw8ICdcbic7CgkvLyBpbnN0ZWFkIG9mIG1pbigpIHVzZSBtYXgoKSB0byBnZXQgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIHByZXZpb3VzIGNhc2UKCS8vc2NhbmYgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN1Y2Nlc2Z1bGx5IGNvbnZlcnRlZCAgb3IgRU9GIG9uIGVycm9yCglMTCBuLCBsOwoJY2luPj5uPj5sOwoJTEQgYXJyW25dOwoJZm9yKExMIGk9MDsgaTxuOyBpKyspewoJCWNpbj4+YXJyW2ldOwoJfQoJc29ydChhcnIsIGFycituKTsKCQoJTEQgZGlmZiA9IGFyclsxXS1hcnJbMF07CglpZihuPT0xKXsKCQlkaWZmPWFyclswXTsKCX0KCWZvcihMTCBpPTE7IGk8PW4tMjsgaSsrKXsKCQlpZigoYXJyW2krMV0tYXJyW2ldKT5kaWZmKXsKCQkJZGlmZj1hcnJbaSsxXS1hcnJbaV07CgkJfQoJfQoJTEQgYSA9ICgoTEQpZGlmZikvMjsKCUxEIGIgPSBhcnJbMF0+KGwtIGFycltuLTFdKT9hcnJbMF06KGwtIGFycltuLTFdKTsKCQoJTEQgYW5zID0gYj5hP2I6YTsKCXByaW50ZigiJS4xMExmIFxuIiwgYW5zKTsKCn0=