using System;
using System.Collections;
using System.Collections.Generic;
public class Program {
    public static void Main() {
        //将路灯坐标排序,计算两两路灯之间的距离,找出最大的距离/2就是d
        string line;
        while ((line = System.Console.ReadLine ()) != null) { // 注意 while 处理多个 case
            string[] tokens = line.Split(' ');
            int n = int.Parse(tokens[0]);
            int l = int.Parse(tokens[1]);
            line = Console.ReadLine();
            tokens = line.Split(' ');
            int[] light = new int[n];
            for(int i = 0; i < n; i++) light[i] = int.Parse(tokens[i]);
            //冒泡排序
            for(int i = 0; i < n; i++){
                bool swap = false;
                for(int j = 0; j < n - i - 1; j++){
                    if(light[j] > light[j + 1]){
                        int temp = light[j];
                        light[j] = light[j + 1];
                        light[j + 1] = temp;
                        swap = true;
                    }
                }
                if(!swap) break;
            }
            int[] distance = new int[n + 1];//第n和第0的索引装的是两端的灯与起点和终点的距离
            for(int i = 0; i < n - 1; i++){
                distance[i + 1] = light[i + 1] - light[i];
            }
            distance[0] = light[0];
            distance[n] = l - light[n - 1];
            int maxdis = 0;
            for(int i = 1; i < n; i++){
                if(distance[i] > maxdis) maxdis = distance[i];
            }
            float result = (float)maxdis / 2;
            result = Math.Max(result, distance[0]);
            result = Math.Max(result, distance[n]);
            Console.WriteLine(result.ToString("f2"));
        }
    }
}

将路灯坐标排序,计算两两路灯之间的距离,找出最大的距离/2就是d,找到d后与两端路灯与起点和终点的距离s,e比较,输出d、s和e三者中的最大值