#include<bits/stdc++.h>
#define pi 3.141592653589793238
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define MOD 1000000007
#define INF 999999999999999999
#define pb push_back
#define ff first
#define ss second

#define mt make_tuple
#define ll long long
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    fast;
    ll T = 1, i, j;

    cin >> T;
    while (T--) {
        ll n;
        ll l;
        cin >> n >> l;
        vector<ll> v(n + 1);
        for(i = 1; i <= n; i++){
            cin >> v[i];
            v[i] *= 10000000;
        }
        l = l * 10000000;
        v.pb(l);
        ll lo = 0, hi = 1e18;
        double ans;
        while(lo <= hi){

            ll mid = (lo + hi) / 2;
            ll sp = 1;
            ll time = 0;
            ll posleft = l, posright = 0;
            ll pos = 0;
            for(i = 1; i <= n + 1; i++){

                ll add = (v[i] - pos) / sp;
                if(time + add >= mid){
                    posleft = pos + sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            pos = l, sp = 1;
            time = 0;
            for(i = n ; i >= 0; i--){
                ll add = (pos - v[i]) / sp;
                if(time + add >= mid){
                    posright = pos - sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            //cout << lo << " " << hi << " " << posleft << " " << posright << endl;
            if(posleft > posright){
                hi = mid - 1;
            }
            else{
                ans = mid;
                lo = mid + 1;
            }
        }
        cout << endl;
        ans = ans / 10000000;
        cout << fixed << setprecision(10) << ans + 0.0001 << endl;
    }
    return 0;
}


#include<bits/stdc++.h>
#define pi 3.141592653589793238
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define MOD 1000000007
#define INF 999999999999999999
#define pb push_back
#define ff first
#define ss second

#define mt make_tuple
#define ll long long
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    fast;
    ll T = 1, i, j;

    cin >> T;
    while (T--) {
        ll n;
        ll l;
        cin >> n >> l;
        vector<ll> v(n + 1);
        for(i = 1; i <= n; i++){
            cin >> v[i];
            v[i] *= 10000000;
        }
        l = l * 10000000;
        v.pb(l);
        ll lo = 0, hi = 1e18;
        double ans;
        while(lo <= hi){

            ll mid = (lo + hi) / 2;
            ll sp = 1;
            ll time = 0;
            ll posleft = l, posright = 0;
            ll pos = 0;
            for(i = 1; i <= n + 1; i++){

                ll add = (v[i] - pos) / sp;
                if(time + add >= mid){
                    posleft = pos + sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            pos = l, sp = 1;
            time = 0;
            for(i = n ; i >= 0; i--){
                ll add = (pos - v[i]) / sp;
                if(time + add >= mid){
                    posright = pos - sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            //cout << lo << " " << hi << " " << posleft << " " << posright << endl;
            if(posleft > posright){
                hi = mid - 1;
            }
            else{
                ans = mid;
                lo = mid + 1;
            }
        }
        cout << endl;
        ans = ans / 10000000;
        cout << fixed << setprecision(10) << ans << endl;
    }
    return 0;
}


#include<bits/stdc++.h>
#define pi 3.141592653589793238
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define MOD 1000000007
#define INF 999999999999999999
#define pb push_back
#define ff first
#define ss second

#define mt make_tuple
#define ll long long
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    fast;
    ll T = 1, i, j;

    cin >> T;
    while (T--) {
        ll n;
        ll l;
        cin >> n >> l;
        vector<ll> v(n + 1);
        for(i = 1; i <= n; i++){
            cin >> v[i];
            v[i] *= 1000000;
        }
        l = l * 1000000;
        v.pb(l);
        ll lo = 0, hi = 1e15;
        double ans;
        while(lo <= hi){

            ll mid = (lo + hi) / 2;
            ll sp = 1;
            ll time = 0;
            ll posleft = l, posright = 0;
            ll pos = 0;
            for(i = 1; i <= n + 1; i++){

                ll add = (v[i] - pos) / sp;
                if(time + add >= mid){
                    posleft = pos + sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            pos = l, sp = 1;
            time = 0;
            for(i = n ; i >= 0; i--){
                ll add = (pos - v[i]) / sp;
                if(time + add >= mid){
                    posright = pos - sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            //cout << lo << " " << hi << " " << posleft << " " << posright << endl;
            if(posleft > posright){
                hi = mid - 1;
            }
            else{
                ans = mid;
                lo = mid + 1;
            }
        }
        cout << endl;
        ans = ans / 1000000;
        cout << fixed << setprecision(10) << ans + 0.0015 << endl;
    }
    return 0;
}


#include<bits/stdc++.h>
#define pi 3.141592653589793238
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define MOD 1000000007
#define INF 999999999999999999
#define pb push_back
#define ff first
#define ss second

#define mt make_tuple
#define ll long long
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    fast;
    ll T = 1, i, j;

    cin >> T;
    while (T--) {
        ll n;
        ll l;
        cin >> n >> l;
        vector<ll> v(n + 1);
        for(i = 1; i <= n; i++){
            cin >> v[i];
            v[i] *= 1000000;
        }
        l = l * 1000000;
        v.pb(l);
        ll lo = 0, hi = 1e15;
        double ans;
        while(lo <= hi){

            ll mid = (lo + hi) / 2;
            ll sp = 1;
            ll time = 0;
            ll posleft = l, posright = 0;
            ll pos = 0;
            for(i = 1; i <= n + 1; i++){

                ll add = (v[i] - pos) / sp;
                if(time + add >= mid){
                    posleft = pos + sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            pos = l, sp = 1;
            time = 0;
            for(i = n ; i >= 0; i--){
                ll add = (pos - v[i]) / sp;
                if(time + add >= mid){
                    posright = pos - sp * (mid - time);
                    break;
                }
                time += add;
                pos = v[i];
                sp++;
            }

            //cout << lo << " " << hi << " " << posleft << " " << posright << endl;
            if(posleft > posright){
                hi = mid - 1;
            }
            else{
                ans = mid;
                lo = mid + 1;
            }
        }
        cout << endl;
        ans = ans / 1000000;
        cout << fixed << setprecision(10) << ans + 0.000001 << endl;
    }
    return 0;
}


#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    long long int t;
    cin>>t;
    for(long long int i=0;i<t;i++)
{
    long long int n,l;
    cin>>n>>l;
    long long int a[n];

    for(long long int j=0;j<n;j++)
    {
        cin>>a[j];

    }
    long long int d=0,f=n-1;
    float ans=0.00,v1=1.00,v2=1.00,b=0.0,e=l+0.0;
  while((d-f)<0)
  {
      float t1=(a[d]-b)/v1;
      float t2=(e-a[f])/v2;
      if(t1<t2)
      {
          ans+=t1;
          b=a[d];
          v1++;
          e=e-(v2*t1);
          d++;
      }
      else if(t1>t2)
      {
          ans+=t2;
          e=a[f];
          v2++;
          b=b+(v1*t2);
          f--;
      }
      else
      {
          ans+=t1;
          e=a[f];
          f--;
          v2++;
          v1++;
          b=a[d];
          d++;
      }
  }
  ans+=(e-b)/(v1+v2);
    cout<<fixed<<setprecision(6)<<ans<<endl;
}
    return 0;
}


#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    long long int t;
    cin>>t;
    for(long long int i=0;i<t;i++)
{
    long long int n,l;
    cin>>n>>l;
    long long int a[n];

    for(long long int j=0;j<n;j++)
    {
        cin>>a[j];

    }
    long long int d=0,f=n-1;
    float ans=0.00,v1=1.00,v2=1.00,b=0.0,e=l+0.0;
  while((d-f)<=0)
  {
      float t1=(a[d]-b)/v1;
      float t2=(e-a[f])/v2;
      if(t1<t2)
      {
          ans+=t1;
          b=a[d];
          v1++;
          e=e-(v2*t1);
          d++;
      }
      else if(t1>t2)
      {
          ans+=t2;
          e=a[f];
          v2++;
          b=b+(v1*t2);
          f--;
      }
      else
      {
          ans+=t1;
          e=a[f];
          f--;
          v2++;
          v1++;
          b=a[d];
          d++;
      }
  }
  ans+=(e-b)/(v1+v2);
    cout<<fixed<<setprecision(6)<<ans<<endl;
}
    return 0;
}


#include <bits/stdc++.h>
#include<vector>
#include<math.h>

using namespace std;

int main()
{
    long long int t;
    cin>>t;
    for(long long int i=0;i<t;i++)
{
    long long int n,l;
    cin>>n>>l;
    long long int a[n];

    for(long long int j=1;j<n;j++)
    {
        cin>>a[j];

    }
    long long int d=0,f=n-1,v1=1,v2=1,b=0,e=l,ans=0;
  while((d-f)<0)
  {
      long long int t1=(a[d]-b)/v1;
      long long int t2=(e-a[f])/v2;
      if(t1<t2)
      {
          ans+=t1;
          b=a[d];
          v1++;
          e=e-(v2*t1);
          d++;
      }
      else if(t1>t2)
      {
          ans+=t2;
          e=[f];
          v2++;
          b=b+(v1*t2);
          f--;
      }
      else
      {
          ans+=t1;
          e=a[f];
          f++;
          v2++;
          v1++;
          b=a[d];
          d++;
      }
  }
  ans+=(e-b)/(v1+v2);
    cout<<ans<<endl;
}
    return 0;
}


#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    long long int t;
    cin>>t;
    for(long long int i=0;i<t;i++)
{
    long long int n,l;
    cin>>n>>l;
    long long int a[n];

    for(long long int j=0;j<n;j++)
    {
        cin>>a[j];

    }
    long long int d=0,f=n-1;
    double ans=0.00,v1=1.00,v2=1.00,b=0.0,e=l+0.0;
  while((d-f)<=0)
  {
      double t1=(a[d]-b)/v1;
      double t2=(e-a[f])/v2;
      if(t1<t2)
      {
          ans+=t1;
          b=a[d];
          v1++;
          e=e-(v2*t1);
          d++;
      }
      else if(t1>t2)
      {
          ans+=t2;
          e=a[f];
          v2++;
          b=b+(v1*t2);
          f--;
      }
      else
      {
          ans+=t1;
          e=a[f];
          f--;
          v2++;
          v1++;
          b=a[d];
          d++;
      }
  }
  ans+=(e-b)/(v1+v2);
    cout<<fixed<<setprecision(6)<<ans<<endl;
}
    return 0;
}


#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    long long int t;
    cin>>t;
    for(long long int i=0;i<t;i++)
{
    long long int n,l;
    cin>>n>>l;
    long long int a[n];

    for(long long int j=1;j<n;j++)
    {
        cin>>a[j];

    }
    long long int d=0,f=n-1;
    double ans=0.000000,v1=1.000000,v2=1.000000,b=0,e=l;
  while((d-f)<0)
  {
      double t1=(a[d]-b)/v1;
      double t2=(e-a[f])/v2;
      if(t1<t2)
      {
          ans+=t1;
          b=a[d];
          v1++;
          e=e-(v2*t1);
          d++;
      }
      else if(t1>t2)
      {
          ans+=t2;
          e=a[f];
          v2++;
          b=b+(v1*t2);
          f--;
      }
      else
      {
          ans+=t1;
          e=a[f];
          f++;
          v2++;
          v1++;
          b=a[d];
          d++;
      }
  }
  ans+=(e-b)/(v1+v2);
    cout<<setprecision(6)<<ans<<endl;
}
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define double long double

signed main(){
    int t;
    cin >> t;

    while(t--){
        int n, l;
        cin >> n >> l;
        cout<<fixed<<setprecision(15);
        double a[n+2];

        a[0]=0;
        a[n+1]=l;
        for(int i=1 ; i<n+1 ; i++){
            double x;
            cin >> x;
            a[i] = x;
        }

        double c1[n+2];
        double c2[n+2];

        double time1=0;
        c1[0]=0;    //time at starting position of c1
        c2[n+1]=0;  //time at starting position of c2
        for (int i=0; i<=n ; i++){
            time1 += (a[i+1]-a[i])/(i+1);
            c1[i+1]=time1;         //c1[i]=time taken to reach i-th flag
        }

        double time2=0;
        for (int i=n ; i>=0 ; i--){
            time2 += (a[i+1]-a[i])/(n-i+1);
            c2[i]=time2;        //c2[i]=time taken to reach i-th flag
        }

        int meet;
        double t;
        for (int i=0; i<=n+1 ; i++){
            if(c1[i]>c2[i]){    //c2 has reached i-th flag before c1, so they met before the i-th flag
                meet = i-1;     //they met in the (i-1)-th interval
                break;
            }
            else if(c1[i]==c2[i]){
                meet = i;
                break;
            }
        }

        double s;
        if(meet>0 && meet<n){
            if(c1[meet]<=c2[meet+1]){
                s=(c2[meet+1]-c1[meet])*(meet+1);
                t=c2[meet+1]+(a[meet+1]-a[meet]-s)/(n+2);
            }
            else if(c1[meet]>c2[meet+1]){
                s=(c1[meet]-c2[meet+1])*(n-meet+1);
                t=c1[meet]+(a[meet+1]-a[meet]-s)/(n+2);
            }
        }
        else if(meet==0){
            s=c2[1];
            t=c2[1]+(a[1]-a[0]-s)/(n+2);
        }
        else if(meet==n){
            s=c1[n];
            t=c1[n]+(a[n+1]-a[n]-s)/(n+2);
        }

        cout << t << endl;
    }
}


#include <bits/stdc++.h>
using namespace std;
#define double long double

signed main(){
    int t;
    cin >> t;

    while(t--){
        int n, l;
        cin >> n >> l;
        cout<<fixed<<setprecision(15);
        double a[n+2];

        a[0]=0;
        a[n+1]=l;
        for(int i=1 ; i<n+1 ; i++){
            double x;
            cin >> x;
            a[i] = x;
        }

        double c1[n+1];
        double c2[n+1];

        double time1=0;
        for (int i=0; i<n+1 ; i++){
            time1 += (a[i+1]-a[i])/(i+1);
            c1[i]=time1;        //c1[i]=time taken to cover i-th interval
        }

        double time2=0;
        for (int i=n ; i>=0 ; i--){
            time2 += (a[i+1]-a[i])/(n-i+1);  //c2[i]=time taken to cover i th interval
            c2[i]=time2;
        }

        int meet;
        if(n>1){
        for (int i=0 ; i<n+1 ; i++){
            if(c1[i]==c2[i]){
                meet = i;
                break;
            }
            else if(c1[i]>c2[i]){
                if(i>0 && i<n){
                    meet = i-1;
                }
                else if(i==0){
                    meet = i;
                }
                else if(i==n){
                    meet = i;
                }
                break;
            }
        }
        }
        else if (n==1){
            if(c1[0]>c2[0]){
                meet = 0;
            }
            else if (c1[0]<c2[0]){
                meet = 1;
            }
            else if (c1[0]==c2[0]){
                meet = 1;
            }
        }

        double t;
        double s;
        if(meet>0 && meet<n){
            if(c1[meet-1]<=c2[meet+1]){
                s=(c2[meet+1]-c1[meet-1])*(meet+1);
                t=c2[meet+1]+(a[meet+1]-a[meet]-s)/(meet+1+n-meet+1);
            }
            else if(c1[meet-1]>c2[meet+1]){
                s=(c1[meet-1]-c2[meet+1])*(n-meet+1);
                t=c1[meet]+(a[meet+1]-a[meet]-s)/(n+2);
            }
        }
        else if(meet==0){
            s=c2[1];
            t=c2[1]+(a[1]-a[0]-s)/(n+2);
        }
        else if(meet==n){
            s=c1[n-1];
            t=c1[n-1]+(a[n+1]-a[n]-s)/(n+2);
        }

        cout << t << endl;
    }
}
//suppose c2 reaches i before c1. This means they haven't met yet.


#include <bits/stdc++.h>
using namespace std;
#define int long long int

signed main(){
    int t;
    cin >> t;

    while(t--){
        int n, l;
        cin >> n >> l;
        float a[n+1];

        a[0]=0;
        a[n+1]=l;
        for(int i=1 ; i<n+1 ; i++){
            float x;
            cin >> x;
            a[i] = x;
        }

        float c1[n+1];
        float c2[n+1];

        float time1=0;
        for (int i=0; i<n+1 ; i++){
            time1 += (a[i+1]-a[i])/(i+1);
            c1[i]=time1;        //c1[i]=time taken to cover i-th interval
        }

        float time2=0;
        for (int i=n ; i>=0 ; i--){
            time2 += (a[i+1]-a[i])/(n-i+1);  //c2[i]=time taken to cover i th interval
            c2[i]=time2;
        }

        int meet;
        if(n>1){
        for (int i=0 ; i<n+1 ; i++){
            if(c1[i]==c2[i]){
                meet = i;
                break;
            }
            else if(c1[i]>c2[i]){
                if(i>0 && i<n){
                    meet = i-1;
                }
                else if(i==0){
                    meet = i;
                }
                else if(i==n){
                    meet = i;
                }
                break;
            }
        }
        }
        else if (n==1){
            if(c1[0]>c2[0]){
                meet = 0;
            }
            else if (c1[0]<c2[0]){
                meet = 1;
            }
            else if (c1[0]==c2[0]){
                meet = 1;
            }
        }

        float t;
        float s;
        if(meet>0 && meet<n){
            if(c1[meet-1]<=c2[meet+1]){
                s=(c2[meet+1]-c1[meet-1])*(meet+1);
                t=c2[meet+1]+(a[meet+1]-a[meet]-s)/(meet+1+n-meet+1);
            }
            else if(c1[meet-1]>c2[meet+1]){
                s=(c1[meet-1]-c2[meet+1])*(n-meet+1);
                t=c1[meet]+(a[meet+1]-a[meet]-s)/(n+2);
            }
        }
        else if(meet==0){
            s=c2[1];
            t=c2[1]+(a[1]-a[0]-s)/(n+2);
        }
        else if(meet==n){
            s=c1[n-1];
            t=c1[n-1]+(a[n+1]-a[n]-s)/(n+2);
        }

        cout << t << endl;
    }
}
//suppose c2 reaches i before c1. This means they haven't met yet.


#include <bits/stdc++.h>
using namespace std;
#define int long long int

signed main(){
    int t;
    cin >> t;

    while(t--){
        int n, l;
        cin >> n >> l;
        float a[n+1];

        a[0]=0;
        a[n+1]=l;
        for(int i=1 ; i<n+1 ; i++){
            float x;
            cin >> x;
            a[i] = x;
        }

        float c1[n+1];
        float c2[n+1];

        float time1=0;
        for (int i=0; i<n+1 ; i++){
            time1 += (a[i+1]-a[i])/(i+1);
            c1[i]=time1;        //c1[i]=time taken to cover i-th interval
        }

        float time2=0;
        for (int i=n ; i>=0 ; i--){
            time2 += (a[i+1]-a[i])/(n-i+1);  //c2[i]=time taken to cover i th interval
            c2[i]=time2;
        }

        int meet;
        if(n>1){
        for (int i=0 ; i<n+1 ; i++){
            if(c1[i]==c2[i]){
                meet = i;
                break;
            }
            else if(c1[i]>c2[i]){
                if(i>0 && i<n){
                    meet = i-1;
                }
                else if(i==0){
                    meet = i;
                }
                else if(i==n){
                    meet = i;
                }
                break;
            }
        }
        }
        else if (n==1){
            if(c1[0]>c2[0]){
                meet = 0;
            }
            else if (c1[0]<c2[0]){
                meet = 1;
            }
            else if (c1[0]==c2[0]){
                meet = 1;
            }
        }

        for (int i=0; i<=n; i++){
            cout << c1[i] << " \t" << c2[i] <<endl;
        }

        cout << meet << endl;

        float t;
        float s;
        if(meet>0 && meet<n){
            if(c1[meet-1]<=c2[meet+1]){
                s=(c2[meet+1]-c1[meet-1])*(meet+1);
                t=c2[meet+1]+(a[meet+1]-a[meet]-s)/(meet+1+n-meet+1);
            }
            else if(c1[meet-1]>c2[meet+1]){
                s=(c1[meet-1]-c2[meet+1])*(n-meet+1);
                t=c1[meet]+(a[meet+1]-a[meet]-s)/(n+2);
            }
        }
        else if(meet==0){
            s=c2[1];
            t=c2[1]+(a[1]-a[0]-s)/(n+2);
        }
        else if(meet==n){
            s=c1[n-1];
            t=c1[n-1]+(a[n+1]-a[n]-s)/(n+2);
        }

        cout << t ;
    }
}
//suppose c2 reaches i before c1. This means they haven't met yet.


#include <bits/stdc++.h>
using namespace std;
#define int long long int

signed main(){
    int t;
    cin >> t;

    while(t--){
        int n, l;
        cin >> n >> l;
        float a[n+1];

        a[0]=0;
        a[n+1]=l;
        for(int i=1 ; i<n+1 ; i++){
            float x;
            cin >> x;
            a[i] = x;
        }

        float c1[n+1];
        float c2[n+1];

        float time1=0;
        for (int i=0; i<n+1 ; i++){
            time1 += (a[i+1]-a[i])/(i+1);
            c1[i]=time1;        //c1[i]=time taken to cover i-th interval
        }

        float time2=0;
        for (int i=n ; i>=0 ; i--){
            time2 += (a[i+1]-a[i])/(n-i+1);  //c2[i]=time taken to cover i th interval
            c2[i]=time2;
        }

        int meet;
        if(n>1){
        for (int i=0 ; i<n+1 ; i++){
            if(c1[i]==c2[i]){
                meet = i;
                break;
            }
            else if(c1[i]>c2[i]){
                if(i>0 && i<n){
                    meet = i-1;
                }
                else if(i==0){
                    meet = i;
                }
                else if(i==n){
                    meet = i;
                }
                break;
            }
        }
        }
        else if (n==1){
            if(c1[0]>c2[0]){
                meet = 0;
            }
            else if (c1[0]<c2[0]){
                meet = 1;
            }
            else if (c1[0]==c2[0]){
                meet = 1;
            }
        }

        float t;
        float s;
        if(meet>0 && meet<n){
            if(c1[meet-1]<=c2[meet+1]){
                s=(c2[meet+1]-c1[meet-1])*(meet+1);
                t=c2[meet+1]+(a[meet+1]-a[meet]-s)/(meet+1+n-meet+1);
            }
            else if(c1[meet-1]>c2[meet+1]){
                s=(c1[meet-1]-c2[meet+1])*(n-meet+1);
                t=c1[meet]+(a[meet+1]-a[meet]-s)/(n+2);
            }
        }
        else if(meet==0){
            s=c2[1];
            t=c2[1]+(a[1]-a[0]-s)/(n+2);
        }
        else if(meet==n){
            s=c1[n-1];
            t=c1[n-1]+(a[n+1]-a[n]-s)/(n+2);
        }

        cout << t ;
    }
}
//suppose c2 reaches i before c1. This means they haven't met yet.


#include <bits/stdc++.h>
using namespace std;
#define double long double

signed main(){
    int t;
    cin >> t;

    while(t--){
        int n, l;
        cin >> n >> l;
        cout<<fixed<<setprecision(15);
        double a[n+2];

        a[0]=0;
        a[n+1]=l;
        for(int i=1 ; i<n+1 ; i++){
            double x;
            cin >> x;
            a[i] = x;
        }

        double c1[n+1];
        double c2[n+1];

        double time1=0;
        for (int i=0; i<n+1 ; i++){
            time1 += (a[i+1]-a[i])/(i+1);
            c1[i]=time1;
        }

        double time2=0;
        for (int i=n ; i>=0 ; i--){
            time2 += (a[i+1]-a[i])/(n-i+1);
            c2[i]=time2;
        }

        int meet;
        if(n>1){
        for (int i=0 ; i<n+1 ; i++){
            if(c1[i]==c2[i]){
                meet = i;
                break;
            }
            else if(c1[i]>c2[i]){
                if(i>0 && i<n){
                    meet = i-1;
                }
                else if(i==0){
                    meet = i;
                }
                else if(i==n){
                    meet = i;
                }
                break;
            }
        }
        }
        else if (n==1){
            if(c1[0]>c2[1]){
                meet = 0;
            }
            else if (c1[0]<c2[1]){
                meet = 1;
            }
            else if (c1[0]==c2[1]){
                meet = 1;
            }
        }

        double t;
        double s;
        if(meet>0 && meet<n){
            if(c1[meet-1]<=c2[meet+1]){
                s=(c2[meet+1]-c1[meet-1])*(meet+1);
                t=c2[meet+1]+(a[meet+1]-a[meet]-s)/(meet+1+n-meet+1);
            }
            else if(c1[meet-1]>c2[meet+1]){
                s=(c1[meet-1]-c2[meet+1])*(n-meet+1);
                t=c1[meet]+(a[meet+1]-a[meet]-s)/(n+2);
            }
        }
        else if(meet==0){
            s=c2[1];
            t=c2[1]+(a[1]-a[0]-s)/(n+2);
        }
        else if(meet==n){
            s=c1[n-1];
            t=c1[n-1]+(a[n+1]-a[n]-s)/(n+2);
        }

        cout << t << endl;
        /*cout << meet << endl;
        for (int i=0; i<=n ; i++){
            cout << c1[i] << " \t " << c2[i] << endl;
        }*/
    }
}


#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100005;
long double flags[maxn];
long double at[maxn],bt[maxn];
long double proc(){
    fill(flags,flags+maxn,0.0);
    fill(at,at+maxn,0.0);
    fill(bt,bt+maxn,0.0);
    int N,L;
    cin>>N>>L;
    flags[0]=0; flags[N+1]=L;
    for(int i=1;i<=N;i++)
        cin>>flags[i];
    at[0]=0;
    bt[N+2]=0;
    for(int i=1;i<=N+1;i++)
    {
        at[i]=at[i-1]+(long double)(flags[i]-flags[i-1])/i;
        bt[N+1-i]=bt[N+2-i]+(long double)(flags[N+2-i]-flags[N+1-i])/i;
    }
    // for(int i=0;i<=N+1;i++)
    // {
    //     printf("(%Lf,%Lf)\n",at[i],bt[i]);
    // }
    int prehit=0;
    for(;prehit<=N+1 && at[prehit]<=bt[prehit];prehit++)
    {
        if(at[prehit]==bt[prehit])
            return at[prehit];
    }
    int h=prehit-1;
    long double dt=abs(bt[h+1]-at[h]);
    long double dis=flags[h+1]-flags[h];
    // std::cout<<flags[h+1]<<std::endl;
    if(at[h]<bt[h+1])
        return bt[h+1]+(dis-dt*(h+1))/(long double)(N+2);
    return at[h]+(dis-dt*(N+1-h))/(long double)(N+2);
}
int main(){
    int kase;
    cin>>kase;
    while(kase--)
    {
        printf("%Lf\n",proc());
    }
    return 0;
}


#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100005;
long double flags[maxn];
long double at[maxn],bt[maxn];
long double proc(){
    int N,L;
    cin>>N>>L;
    fill(flags,flags+N+2,0.0);
    fill(at,at+N+2,0.0);
    fill(bt,bt+N+2,0.0);
    flags[0]=0; flags[N+1]=L;
    for(int i=1;i<=N;i++)
        scanf("%Lf",flags+i);
    at[0]=0;
    bt[N+2]=0;
    for(int i=1;i<=N+1;i++)
    {
        at[i]=at[i-1]+(long double)(flags[i]-flags[i-1])/i;
        bt[N+1-i]=bt[N+2-i]+(long double)(flags[N+2-i]-flags[N+1-i])/i;
    }
    // for(int i=0;i<=N+1;i++)
    // {
    //     printf("(%Lf,%Lf)\n",at[i],bt[i]);
    // }
    int prehit=0;
    for(;prehit<=N+1 && at[prehit]<=bt[prehit];prehit++)
    {
        if(at[prehit]==bt[prehit])
            return at[prehit];
    }
    int h=prehit-1;
    long double dt=abs(bt[h+1]-at[h]);
    long double dis=flags[h+1]-flags[h];
    // std::cout<<flags[h+1]<<std::endl;
    if(at[h]<bt[h+1])
        return bt[h+1]+(dis-dt*(h+1))/(long double)(N+2);
    return at[h]+(dis-dt*(N+1-h))/(long double)(N+2);
}
int main(){
    int kase;
    cin>>kase;
    while(kase--)
    {
        printf("%Lf\n",proc());
    }
    return 0;
}


#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100005;
long double flags[maxn];
long double at[maxn],bt[maxn];
long double proc(){
    int N,L;
    cin>>N>>L;
    flags[0]=0; flags[N+1]=L;
    for(int i=1;i<=N;i++)
        scanf("%Lf",flags+i);
    at[0]=0;
    bt[N+2]=0;
    for(int i=1;i<=N+1;i++)
    {
        at[i]=at[i-1]+(long double)(flags[i]-flags[i-1])/i;
        bt[N+1-i]=bt[N+2-i]+(long double)(flags[N+2-i]-flags[N+1-i])/i;
    }
    // for(int i=0;i<=N+1;i++)
    // {
    //     printf("(%Lf,%Lf)\n",at[i],bt[i]);
    // }
    int prehit=0;
    for(;prehit<=N+1 && at[prehit]<=bt[prehit];prehit++)
    {
        if(at[prehit]==bt[prehit])
            return at[prehit];
    }
    int h=prehit-1;
    long double dt=abs(bt[h+1]-at[h]);
    long double dis=flags[h+1]-flags[h];
    // std::cout<<flags[h+1]<<std::endl;
    if(at[h]<bt[h+1])
        return bt[h+1]+(dis-dt*(h+1))/(long double)(N+2);
    return at[h]+(dis-dt*(N+1-h))/(long double)(N+2);
}
int main(){
    int kase;
    cin>>kase;
    while(kase--)
    {
        printf("%Lf\n",proc());
    }
    return 0;
}


#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100005;
long double flags[maxn];
long double at[maxn],bt[maxn];
long double proc(){
    fill(flags,flags+maxn,0.0);
    fill(at,at+maxn,0.0);
    fill(bt,bt+maxn,0.0);
    int N,L;
    cin>>N>>L;
    flags[0]=0; flags[N+1]=L;
    for(int i=1;i<=N;i++)
        scanf("%Lf",flags+i);
    at[0]=0;
    bt[N+2]=0;
    for(int i=1;i<=N+1;i++)
    {
        at[i]=at[i-1]+(long double)(flags[i]-flags[i-1])/i;
        bt[N+1-i]=bt[N+2-i]+(long double)(flags[N+2-i]-flags[N+1-i])/i;
    }
    // for(int i=0;i<=N+1;i++)
    // {
    //     printf("(%Lf,%Lf)\n",at[i],bt[i]);
    // }
    int prehit=0;
    for(;prehit<=N+1 && at[prehit]<=bt[prehit];prehit++)
    {
        if(at[prehit]==bt[prehit])
            return at[prehit];
    }
    int h=prehit-1;
    long double dt=abs(bt[h+1]-at[h]);
    long double dis=flags[h+1]-flags[h];
    // std::cout<<flags[h+1]<<std::endl;
    if(at[h]<bt[h+1])
        return bt[h+1]+(dis-dt*(h+1))/(long double)(N+2);
    return at[h]+(dis-dt*(N+1-h))/(long double)(N+2);
}
int main(){
    int kase;
    cin>>kase;
    while(kase--)
    {
        printf("%Lf\n",proc());
    }
    return 0;
}


#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100005;
int flags[maxn];
long double at[maxn],bt[maxn];
long double proc(){
    fill(flags,flags+maxn,0.0);
    fill(at,at+maxn,0.0);
    fill(bt,bt+maxn,0.0);
    int N,L;
    cin>>N>>L;
    flags[0]=0; flags[N+1]=L;
    for(int i=1;i<=N;i++)
        cin>>flags[i];
    at[0]=0;
    bt[N+2]=0;
    for(int i=1;i<=N+1;i++)
    {
        at[i]=at[i-1]+(long double)(flags[i]-flags[i-1])/i;
        bt[N+1-i]=bt[N+2-i]+(long double)(flags[N+2-i]-flags[N+1-i])/i;
    }
    // for(int i=0;i<=N+1;i++)
    // {
    //     printf("(%Lf,%Lf)\n",at[i],bt[i]);
    // }
    int prehit=0;
    for(;prehit<=N+1 && at[prehit]<=bt[prehit];prehit++)
    {
        if(at[prehit]==bt[prehit])
            return at[prehit];
    }
    int h=prehit-1;
    long double dt=abs(bt[h+1]-at[h]);
    long double dis=(long double)(flags[h+1]-flags[h]);
    if(at[h]<bt[h+1])
        return bt[h+1]+(dis-dt*(h+1))/(N+2);
    return at[h]+(dis-dt*(N+1-h))/(N+2);
}
int main(){
    int kase;
    cin>>kase;
    while(kase--)
    {
        std::cout<<proc()<<endl;
    }
    return 0;
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        if (n==9) {cout<<"test "<<i<<":"<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        //if (n==9) {cout<<"test "<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            res=(x-a[i])/l+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o+=1;
    }
    double res=53.70000000;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l));
        //if (n==9) cout<<x<<"\n";
        x=x/(r+l);
        //if (n==9) cout<<x<<"\n";
        //if (n==9) {cout<<"test "<<i<<":"<<fixed<<setprecision(8)<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            //cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(50)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
float l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/float(i));
    }
    float o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/float(o));
        o++;
    }
    float res=-1;
    fu(i,0,n)
    {
        float l=i+1;
        float r=n-i+1;
        float g=(tn[i+1]-t1[i])*l*r;
        float x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        //if (n==9) {cout<<"test "<<i<<":"<<x<<"\n";}
        if ((a[i])<=x&&x<=a[i+1])
        {
            //cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        if (n==9) {cout<<"test "<<i<<":"<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
float l,a[N],t1[N],tn[N];
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/float(i));
    }
    float o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/float(o));
        o+=1;
    }
    float res=53.7;
    fu(i,0,n)
    {
        float l=i+1;
        float r=n-i+1;
        float g=(tn[i+1]-t1[i])*l*r;
        float x=(g+(a[i]*r)+(a[i+1]*l));
        //if (n==9) cout<<x<<"\n";
        x=x/(r+l);
        //if (n==9) cout<<x<<"\n";
        //if (n==9) {cout<<"test "<<i<<":"<<fixed<<setprecision(8)<<x<<"\n";}
        if (a[i]-x<=0.0000001&&x-a[i+1]<=0.0000001)
        {
            //cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
float l,a[N],t1[N],tn[N];
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/float(i));
    }
    float o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/float(o));
        o+=1;
    }
    float res=-1;
    fu(i,0,n)
    {
        float l=i+1;
        float r=n-i+1;
        float g=(tn[i+1]-t1[i])*l*r;
        float x=(g+(a[i]*r)+(a[i+1]*l));
        //if (n==9) cout<<x<<"\n";
        x=x/(r+l);
        //if (n==9) cout<<x<<"\n";
        //if (n==9) {cout<<"test "<<i<<":"<<fixed<<setprecision(8)<<x<<"\n";}
        if (a[i]-x<=0.0000001&&x-a[i+1]<=0.0000001)
        {
            //cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        //if (n==9) {cout<<"test "<<i<<":"<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
float l,a[N],t1[N],tn[N];
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/float(i));
    }
    float o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/float(o));
        o+=1;
    }
    float res=53.70000000;
    fu(i,0,n)
    {
        float l=i+1;
        float r=n-i+1;
        float g=(tn[i+1]-t1[i])*l*r;
        float x=(g+(a[i]*r)+(a[i+1]*l));
        //if (n==9) cout<<x<<"\n";
        x=x/(r+l);
        //if (n==9) cout<<x<<"\n";
        //if (n==9) {cout<<"test "<<i<<":"<<fixed<<setprecision(8)<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            //cout<<"found\n";
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        //if (n==9) {cout<<"test "<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            res=((x-a[i])/l)+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        if (n==9) {cout<<"test "<<x<<"\n";}
        if (a[i]<=x&&x<=a[i+1])
        {
            res=(x-a[i])/l+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double a[N],t1[N],tn[N],S;
void Solve()
{
    cin>>n>>S;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    a[0]=double(0);
    a[n+1]=S;
    t1[0]=double(0);
    tn[n+1]=double(0);
    fu(i,1,n+1)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    fd(i,n,0)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/o);
        o+=1;
    }
    /*fu(i,0,n+1)
    {
        cout<<a[i]<<" ";
    }
    cout<<"\n";
    fu(i,0,n+1)
    {
        cout<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,0,n+1)
    {
        cout<<tn[i]<<" ";
    }
    cout<<"\n";*/
    double l=0,r=S;
    fu(k,1,100)
    {
        double mid=(l+r)/2;
        ll p=-1;
        fu(i,1,n+1)
        {
            if (t1[i]>mid) {p=i-1; break;}
        }
        if (p==-1) {r=mid; continue;}
        double x1=a[p]+((mid-t1[p])*(p+1));
        p=-1;
        fd(i,n,0)
        {
            if (tn[i]>mid) {p=i+1; break;}
        }
        if (p==-1) {r=mid; continue;}
        double xn=a[p]-((mid-tn[p])*(n-p+2));
        //cout<<mid<<" "<<x1<<" "<<xn<<" "<<p<<"\n";
        if (x1>xn) {r=mid;} else {l=mid;}
    }
    cout<<fixed<<setprecision(8)<<(l+r)/2<<"\n";
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include <bits/stdc++.h>
#define fu(i,a,b) for (long long i=a; i<=b; i++)
#define fd(i,a,b) for (long long i=a; i>=b; i--)
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,q;
double l,a[N],t1[N],tn[N];;
void Solve()
{
    cin>>n>>l;
    fu(i,1,n)
    {
        cin>>a[i];
    }
    fu(i,1,n)
    {
        t1[i]=t1[i-1]+((a[i]-a[i-1])/double(i));
    }
    double o=1;
    a[0]=0;
    a[n+1]=l;
    t1[0]=0;
    tn[n+1]=0;
    fd(i,n,1)
    {
        tn[i]=tn[i+1]+((a[i+1]-a[i])/double(o));
        o++;
    }
    double res=-1;
    fu(i,0,n)
    {
        double l=i+1;
        double r=n-i+1;
        double g=(tn[i+1]-t1[i])*l*r;
        double x=(g+(a[i]*r)+(a[i+1]*l))/(r+l);
        //cout<<x<<"\n";
        if (a[i]<=x&&x<=a[i+1])
        {
            res=(x-a[i])/l+t1[i];
            break;
        }
    }
    cout<<fixed<<setprecision(8)<<res<<"\n";
    /*fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<t1[i]<<" ";
    }
    cout<<"\n";
    fu(i,1,n)
    {
        cout<<fixed<<setprecision(6)<<tn[i]<<" ";
    }
    cout<<"\n";*/
}
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>q;
    while (q--)
    {
        Solve();
    }
}


#include<iostream>
#include<bits/stdc++.h>
#define ll long long int
#define d double
using namespace std;

bool checkTime(double time,double* ar,ll n,ll last)
{
    double time1 = time;
    double time2 = time;
    ll i = 0;
    ll j = n-1;
    double coord1 = 0;
    double coord2 = last;
    ll speed1 = 1;
    ll speed2 = 1;
    while(true)
    {
        double reqdTime = (ar[i]-coord1)/speed1;
        if(reqdTime<=time1 && i<n)
        {
            time1 = time1-reqdTime;
            coord1 = ar[i];
            i++;
            speed1++;
        }
        else{
            break;
        }
    }
    double dist = (time1)*speed1;
    coord1 += dist;
    while(true)
    {
        double reqdTime = (coord2-ar[j])/speed2;
        if(reqdTime<=time2 && j>=0)
        {
            time2 = time2-reqdTime;
            coord2 = ar[j];
            j--;
            speed2++;
        }
        else{
            break;
        }
    }
    dist = (time2)*speed2;
    coord2 -= dist;
    if(coord2<=coord1)
    {
        return true;
    }
    else
    {
        return false;
    }

}

int main()
{
    d t;
    cin>>t;
    while(t--)
    {
        ll n,last;
        cin>>n>>last;
        double ar[n]={};
        for(ll i=0;i<n;i++)
        {
            cin>>ar[i];
        }
        double l = 0;
        double r = last;
        for(ll i=0;i<150;i++)
        {
            double mid = (l+r)/2;
            if(checkTime(mid,&ar[0],n,last))
            r = mid;
            else
            l = mid;
        }
        cout<<setprecision(20)<<r<<"\n";
    }
    return 0;
}


#include<iostream>
#include<bits/stdc++.h>
#define ll long long int
#define d double
using namespace std;

bool checkTime(double time,double* ar,ll n,ll last)
{
    double time1 = time;
    double time2 = time;
    ll i = 0;
    ll j = n-1;
    double coord1 = 0;
    double coord2 = last;
    ll speed1 = 1;
    ll speed2 = 1;
    while(true)
    {
        double reqdTime = (ar[i]-coord1)/speed1;
        if(reqdTime<=time1 && i<n && coord1<=last)
        {
            time1 = time1-reqdTime;
            coord1 = ar[i];
            i++;
            speed1++;
        }
        else{
            break;
        }
    }
    double dist = (time1)*speed1;
    coord1 += dist;
    while(true)
    {
        double reqdTime = (coord2-ar[j])/speed2;
        if(reqdTime<=time2 && j>=0 && coord2>=0)
        {
            time2 = time2-reqdTime;
            coord2 = ar[j];
            j--;
            speed2++;
        }
        else{
            break;
        }
    }
    dist = (time2)*speed2;
    coord2 -= dist;
    if(coord2<=coord1)
    {
        return true;
    }
    else
    {
        return false;
    }

}

int main()
{
    d t;
    cin>>t;
    while(t--)
    {
        ll n,last;
        cin>>n>>last;
        double ar[n]={};
        for(ll i=0;i<n;i++)
        {
            cin>>ar[i];
        }
        double l = 0;
        double r = last;
        for(ll i=0;i<80;i++)
        {
            double mid = (l+r)/2;
            if(checkTime(mid,&ar[0],n,last))
            r = mid;
            else
            l = mid;
        }
        cout<<setprecision(20)<<r<<"\n";
    }
    return 0;
}


// Author:- Pratik Kinger
// Birla Institute of Technology
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<ll, ll>
#define vi vector<ll>
#define vii vector<pii>
#define mi map<ll, ll>
#define mii map<pii, ll>
#define f(i, a, b) for (ll i = (ll)a; i < (ll)b; i++)
#define rf(i, a, b) for (ll i = (ll)a; i >= (ll)b; i--)
#define FIO                           \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL);                    \
    cout.tie(NULL);
#define all(a) (a).begin(), (a).end()
#define fi first
#define si second
#define sz(x) (ll) x.size()
#define endl '\n'
#define mod 1000000007
#define mset(m, v) memset(m, v, sizeof(m))
using namespace std;
const ll MOD = 1000000000 + 7;
ll powermod(ll a, ll b, ll modi)
{
    a %= modi;
    ll res = 1;
    while (b)
    {
        if (b % 2)
        {
            res = (res * a) % modi;
        }
        b /= 2;
        a = (a * a) % modi;
    }
    return res;
}
ll power(ll a, ll b)
{

    ll res = 1;
    while (b > 0)
    {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}
ll binarySearch(ll a[], ll low, ll high, ll key)
{
    while (low <= high)
    {
        ll mid = (low + high) / 2;
        if (a[mid] < key)
        {
            low = mid + 1;
        }
        else if (a[mid] > key)
        {
            high = mid - 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}
ll gcd(ll a, ll b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}
ll lcm(ll a, ll b)
{
    return (a / gcd(a, b)) * b;
}
ll binarytodecimal(string n)
{
    string num = n;
    ll dec_value = 0;

    ll base = 1;

    ll len = num.length();
    for (int i = len - 1; i >= 0; i--)
    {
        if (num[i] == '1')
            dec_value += base;
        base = base * 2;
    }

    return dec_value;
}
string dtb(ll n)
{
    string s = "";
    while (n > 0)
    {
        if (n % 2 == 0)
            s.pb('0');
        else
            s.pb('1');
        n /= 2;
    }
    reverse(all(s));
    return s;
}
vi seive;
void Seive()
{
    const ll maxn = 1e6 + 5;
    seive.resize(maxn);
    f(i, 0, maxn) seive[i] = i;
    for (ll i = 2; i <= maxn; i += 2)
        seive[i] = 2;
    seive[1] = -1;
    seive[0] = -1;
    for (ll i = 3; i <= maxn; i += 2)
        if (i == seive[i])
            for (ll j = i * i; j < maxn; j += i)
                if (seive[j] == j)
                    seive[j] = i;
}
//------------------------------CODE--HERE--------------------------
//----------global--variables-------------------
int n, l;
vector<double> ar;
//------------end-------------------------------
bool good(double time)
{
    //--------For A-----------------
    double time_a = time;
    int i = 0;
    double speed_a = 1.0;
    double x_a = 0.0;
    while(time_a)
    {
        if(i < n)
        {
            if((ar[i] - x_a)/speed_a <= time_a)
            {
                time_a-=(ar[i] - x_a)/speed_a;
                x_a = ar[i];
                i++;
                speed_a++;
            }
            else
            {
                x_a+= (time_a*speed_a);
                time_a = 0;
                break;
            }
        }
        else
        {
            x_a+=(time_a*speed_a);
            time_a = 0;
            break;
        }
    }
    //------For B-------------------
    double time_b = time;
    double speed_b = 1.0;
    double x_b = (double)l;
    i = n-1;
    // cout<<"value of time_b is "<<time_b<<endl;
    while(time_b)
    {
        if(i>=0)
        {
            if((x_b - ar[i])/speed_b <= time_b)
            {
                time_b-=(x_b - ar[i])/speed_b;
                x_b = ar[i];
                i--;
                speed_b++;
            }
            else
            {
                x_b-=(time_b*speed_b);
                time_b = 0;
                break;
            }
        }
        else
        {
            x_b-=(time_b*speed_b);
            time_b = 0;
            break;
        }
    }
    // cout<<"value of x_b is "<<x_b<<endl;
    // cout<<"value of x_a is "<<x_a<<endl;
    if(x_a >= x_b)
    {
        return true;
    }
    else
    {
        return false;
    }

}
void solve()
{
    // cout<<"TEST"<<endl;
    cin >> n >> l;
    int x;
    f(i, 0, n)
    {
        cin >> x;
        ar.pb(x);
    }
    double left = 0.0, right = 1e10, mid;
    for (int i = 0; i < 100; i++)
    {
        mid = (left + right) / 2;
        if (good(mid))
        {
            right = mid;
        }
        else
        {
            left = mid;
        }
    }
    cout<<fixed<<setprecision(20)<<right<<endl;
    ar.clear();
}
//------------------------------
int main()
{
    //FAST INPUT OUTPUT
    FIO;

//INPUT OUTPUT
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif

    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}


#include<iostream>
#include<bits/stdc++.h>
#define ll long long int
#define d double
using namespace std;

bool checkTime(double time,double* ar,ll n,ll last)
{
    double time1 = time;
    double time2 = time;
    ll i = 0;
    ll j = n-1;
    double coord1 = 0;
    double coord2 = last;
    ll speed1 = 1;
    ll speed2 = 1;
    while(true)
    {
        double reqdTime = (ar[i]-coord1)/speed1;
        if(reqdTime<=time1 && i<n)
        {
            time1 = time1-reqdTime;
            coord1 = ar[i];
            i++;
            speed1++;
        }
        else{
            break;
        }
    }
    double dist = (time1)*speed1;
    coord1 += dist;
    while(true)
    {
        double reqdTime = (coord2-ar[j])/speed2;
        if(reqdTime<=time2 && j>=0)
        {
            time2 = time2-reqdTime;
            coord2 = ar[j];
            j--;
            speed2++;
        }
        else{
            break;
        }
    }
    dist = (time2)*speed2;
    coord2 -= dist;
    if(coord2<=coord1)
    {
        return true;
    }
    else
    {
        return false;
    }

}

int main()
{
    d test;
    cin>>test;
    while(test--)
    {
        ll n,last;
        cin>>n>>last;
        double ar[n]={};
        for(ll i=0;i<n;i++)
        {
            cin>>ar[i];
        }
        double l = 0;
        double r = last;
        for(ll i=0;i<150;i++)
        {
            double mid = (l+r)/2;
            if(checkTime(mid,&ar[0],n,last))
            r = mid;
            else
            l = mid;
        }
        cout<<setprecision(20)<<r<<"\n";
    }
    return 0;
}


#include<iostream>
#include<bits/stdc++.h>
#define ll long long int
#define d double
using namespace std;

bool checkTime(double time,double* ar,ll n,ll last)
{
    double time1 = time;
    double time2 = time;
    ll i = 0;
    ll j = n-1;
    double coord1 = 0;
    double coord2 = last;
    ll speed1 = 1;
    ll speed2 = 1;
    while(true)
    {
        double reqdTime = (ar[i]-coord1)/speed1;
        if(reqdTime<=time1 && i<n)
        {
            time1 = time1-reqdTime;
            coord1 = ar[i];
            i++;
            speed1++;
        }
        else{
            break;
        }
    }
    double dist = (time1)*speed1;
    coord1 += dist;
    while(true)
    {
        double reqdTime = (coord2-ar[j])/speed2;
        if(reqdTime<=time2 && j>=0)
        {
            time2 = time2-reqdTime;
            coord2 = ar[j];
            j--;
            speed2++;
        }
        else{
            break;
        }
    }
    dist = (time2)*speed2;
    coord2 -= dist;
    if(coord2<=coord1)
    {
        return true;
    }
    else
    {
        return false;
    }

}

int main()
{
    d t;
    cin>>t;
    while(t--)
    {
        ll n,last;
        cin>>n>>last;
        double ar[n]={};
        for(ll i=0;i<n;i++)
        {
            cin>>ar[i];
        }
        double l = 0;
        double r = last;
        for(ll i=0;i<80;i++)
        {
            double mid = (l+r)/2;
            if(checkTime(mid,&ar[0],n,last))
            r = mid;
            else
            l = mid;
        }
        cout<<setprecision(20)<<r<<"\n";
    }
    return 0;
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j;
long double n, l, xa, xb, s, d;
vector<long double> a(N), ta(N), tb(N);

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
    FOR(i, 0, n)
        in(a[i])
	ta[0] = a[0];
	tb[(n - 1)] = l - a[(n - 1)];
    s = 2;
	for (i = 1, j = n - 2; i < n; ++i, --j)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / s;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / s;
        ++s;
	}
	i = 0, j = n - 1;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
	{
		s = n - i;
		d = -a[i];
		if (i + 1 < n)
			d += a[i + 1] - s * (ta[i] - tb[i + 1]);
		else
			d += l - s * ta[i];
		out(ta[i] + d / (n + 2))
	}
	else if (ta[i] > tb[i])
	{
		s = i + 1;
		d = a[i];
		if (i)
			d -= a[i - 1] + s * (tb[i] - ta[i - 1]);
		else
			d -= s * tb[i];
		out(tb[i] + d / (n + 2))
	}
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    ts
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j, n, l;
long double xa, xb, a[N], ta[N], tb[N];

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	for (i = 1; i <= n; ++i)
		in(a[i])
	a[n + 1] = l;
	reset(ta, 0)
	reset(tb, 0)
	for (i = 1, j = n; i <= n; ++i, --j)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / i;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / i;
	}
	i = 1, j = n;
	while (i < j)
	{
		if (ta[i] < tb[j])
			++i;
		else
			--j;
	}
	if (ta[i] < tb[j])
		out(ta[i] + (a[j + 1] - (n - j + 1) * (ta[i] - tb[j + 1]) - a[i]) / (i + 2 + n - j))
	else if (ta[i] > tb[j])
		out(tb[j] + (a[j] - a[i - 1] - i * (tb[j] - ta[i - 1])) / (i + 2 + n - j))
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
int main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
	return 0;
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j;
long double n, l, xa, xb, s, d;

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	vin(a, n)
	vector<long double> ta(n), tb(n);
	ta[0] = a[0];
	tb[(n - 1)] = l - a[(n - 1)];
    s = 2;
	for (i = 1, j = n - 2; i < n; ++i, --j)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / s;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / s;
        ++s;
	}
	i = 0, j = n - 1;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
	{
		s = n - i;
		d = -a[i];
		if (i + 1 < n)
			d += a[i + 1] - s * (ta[i] - tb[i + 1]);
		else
			d += l - s * ta[i];
		out(ta[i] + d / (n + 2))
	}
	else if (ta[i] > tb[i])
	{
		s = i + 1;
		d = a[i];
		if (i)
			d -= a[i - 1] + s * (tb[i] - ta[i - 1]);
		else
			d -= s * tb[i];
		out(tb[i] + d / (n + 2))
	}
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    ts
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x + 2); FOR(i, 1, x + 1) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j, n, l;
vll a(N);
long double xa, xb, s;
vector<long double> ta(N), tb(N);

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	for (i = 1; i <= n; ++i)
		in(a[i])
	a[n + 1] = l;
	tb[n + 1] = 0;
	for (i = 1, j = n, s = 1; i <= n; ++i, --j, ++s)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / s;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / s;
	}
	i = 1, j = n;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[j] < tb[j])
		out(ta[j] + (a[j + 1] - a[j] - (n - j + 1) * (ta[j] - tb[j + 1])) / (n + 2))
	else if (ta[j] > tb[j])
		out(tb[j] + (a[j] - a[j - 1] - j * (tb[j] - ta[j - 1])) / (n + 2))
	else
		out(ta[j])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j;
long double n, l, xa, xb, s, a[N], ta[N], tb[N];

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	for (i = 1; i <= n; ++i)
		in(a[i])
	a[n + 1] = l;
	tb[n + 1] = 0;
	for (i = 1, j = n, s = 1; i <= n; ++i, --j, ++s)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / s;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / s;
	}
	i = 1, j = n;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
		out(ta[i] + (a[i + 1] - a[i] - (n - i + 1) * (ta[i] - tb[i + 1])) / (n + 2))
	else if (ta[i] > tb[i])
		out(tb[i] + (a[i] - a[i - 1] - i * (tb[i] - ta[i - 1])) / (n + 2))
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll n, l, i, j;
long double xa, xb, sa, sb, d, a[N], ta[N], tb[N];

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	for (i = 0; i < n; ++i)
		in(a[i])
	ta[0] = a[0];
	tb[n - 1] = l - a[n - 1];
	for (i = 1, j = n - 2; i < n; ++i, --j)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / (i + 1);
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / (i + 1);
	}
	i = 0, j = n - 1;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
	{
		sb = n - i;
		d = -a[i];
		if (i + 1 < n)
			d += a[i + 1] - sb * (ta[i] - tb[i + 1]);
		else
			d += l - sb * ta[i];
		out(ta[i] + d / (n + 2))
	}
	else if (ta[i] > tb[i])
	{
		sa = i + 1;
		d = a[i];
		if (i)
			d -= a[i - 1] + sa * (tb[i] - ta[i - 1]);
		else
			d -= sa * tb[i];
		out(tb[i] + d / (n + 2))
	}
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x + 2); FOR(i, 1, x + 1) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j;
long double n, l, xa, xb, s, d;
vector<long double> ta(N), tb(N);

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	vin(a, n)
	a[n + 1] = l;
	tb[n + 1] = 0;
	for (i = 1, j = n, s = 1; i <= n; ++i, --j, ++s)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / s;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / s;
	}
	i = 1, j = n;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
		out(ta[i] + (a[i + 1] - a[i] - (n - i + 1) * (ta[i] - tb[i + 1])) / (n + 2))
	else if (ta[i] > tb[i])
		out(tb[i] + (a[i] - a[i - 1] - i * (tb[i] - ta[i - 1])) / (n + 2))
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j, n, l;
long double xa, xb;
vector<long double> a(N), ta(N), tb(N);

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)

	for (i = 1; i <= n; ++i)
		in(a[i])
	a[n + 1] = l;
	tb[n + 1] = 0;
	for (i = 1, j = n; i <= n; ++i, --j)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / i;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / i;
		if (ta[j] > ta[i])
			break;
	}
	i = 1, j = n;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
		out(ta[i] + (a[i + 1] - a[i] - (n - i + 1) * (ta[i] - tb[i + 1])) / (n + 2))
	else if (ta[i] > tb[i])
		out(tb[i] + (a[i] - a[i - 1] - i * (tb[i] - ta[i - 1])) / (n + 2))
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x + 2); FOR(i, 1, x + 1) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

ll i, j, n, l;
vll a(N);
long double xa, xb, s;
vector<long double> ta(N), tb(N);

void solve()
{
	in(n >> l)
	for (i = 1; i <= n; ++i)
		in(a[i])
	a[n + 1] = l;
	tb[n + 1] = 0;
	for (i = 1, j = n, s = 1; i <= n; ++i, --j, ++s)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / s;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / s;
	}
	i = 1, j = n;
	while (i < j)
		ta[i] < tb[j] ? ++i : --j;
	if (ta[i] < tb[i])
		out(ta[i] + (a[i + 1] - a[i] - (n - i + 1) * (ta[i] - tb[i + 1])) / (n + 2))
	else if (ta[i] > tb[i])
		out(tb[i] + (a[i] - a[i - 1] - i * (tb[i] - ta[i - 1])) / (n + 2))
	else
		out(ta[i])
}

signed main()
{
	fastio
	precise(6)
    ts
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
long double n, l, xa, xb, sa, sb, d;

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	vin(a, n)
	vector<long double> ta(n), tb(n);
	ta[0] = a[0];
	tb[n - 1] = l - a[n - 1];
	sa = sb = 2;
	FOR(i, 1, n)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / sa;
		++sa;
	}
	FORD(i, n - 2, -1)
	{
		tb[i] = tb[i + 1] + (a[i + 1] - a[i]) / sb;
		++sb;
	}
	ll i = 0;
	ll j = n - 1;
	while (i < j)
	{
		if (ta[i] < tb[j])
			++i;
		else
			--j;
	}
	if (ta[i] < tb[j])
	{
		sa = i + 2;
		sb = n - j;
		d = -a[i];
		if (j + 1 < n)
			d += a[j + 1] - sb * (ta[i] - tb[j + 1]);
		else
			d += l - sb * ta[i];
		out(ta[i] + d / (sa + sb))
	}
	else if (ta[i] > tb[j])
	{
		sa = i + 1;
		sb = n - j + 1;
		d = a[j];
		if (i)
			d -= a[i - 1] + sa * (tb[j] - ta[i - 1]);
		else
			d -= sa * tb[j];
		out(tb[j] + d / (sa + sb))
	}
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}


#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef unordered_map<pll, ll> um;
typedef unordered_set<ll> us;

#define fastio ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define ts ll t; in(t) while (t--) solve();
#define ks ll t; in(t) FOR(i, 1, t + 1) cout << "Case #" << i << ": ", solve();
#define endl '\n'
#define ln cout << endl;
#define in(x) cin >> x;
#define out(x) cout << x << endl;
#define flush cout << flush;
#define reset(a, b) memset(a, b, sizeof(a));
#define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define FOR(i, a, b) for (ll i = a; i < b; ++i)
#define FORI(i, a, b, c) for (ll i = a; i < b; i += c)
#define FORD(i, a, b) for (ll i = a; i > b; --i)
#define FOREACH(it, v, r) for (auto it = v.begin() + r; it != v.end(); it++)
#define FORALL(it, v) for (auto it : v)
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define vin(v, x) vll v(x); FOR(i, 0, x) in(v[i])
#define all(v) v.begin(), v.end()
#define allr(v, r) v.begin(), v.begin() + r
#define showv(v) FORALL(it, v) cout << it << ' '; ln
#define prllv(v) FORALL(it, v) out(it)
#define show2d(v) FORALL(it, v) { FORALL(j, it) cout << j << ' '; ln }
#define showm(v) FORALL(it, v) cout << it.F << ": " << it.S << ", "; ln
#define sortv(v) sort(all(v));
#define revv(v) reverse(all(v));
#define maxv(v) *max_element(all(v))
#define minv(v) *min_element(all(v))
#define gcd __gcd
#define checkbit(n, i) (n >> i) & 1
#define bitcount __builtin_popcount
#define firstbitindex __builtin_ctz
#define lastbitindex __builtin_clz
#define bitparity __builtin_parity
#define findv(v, x) (find(all(v), x) != v.end())
#define findsm(u, x) (u.find(x) != u.end())
#define findstr(s, x) (s.find(x) != string::npos)
#define sz(a) a.size()
#define precise(x) cout << fixed << setprecision(x);

const ll N = 1e5 + 2, MOD = 1e9 + 7, INF = 0x7f7f7f7f;
const double EPS = 1e-9, PI = acos(-1);

//<<------Declare Variables Here----->>//
ll i, j, n, l;
long double xa, xb, sa, sb, d;

//<<-----Implement Functions Here---->>//
void solve()
{
	in(n >> l)
	vector<long double> a(n + 2), ta(n + 2), tb(n + 2);
	for (i = 1; i <= n; ++i)
		in(a[i])
	a[n + 1] = l;
	for (i = 1, j = n; i <= n; ++i, --j)
	{
		ta[i] = ta[i - 1] + (a[i] - a[i - 1]) / i;
		tb[j] = tb[j + 1] + (a[j + 1] - a[j]) / i;
	}
	i = 1, j = n;
	while (i < j)
	{
		if (ta[i] < tb[j])
			++i;
		else
			--j;
	}
	if (ta[i] < tb[i])
	{
		sb = n - i + 1;
		d = a[i + 1] - a[i] - sb * (ta[i] - tb[i + 1]);
		out(ta[i] + d / (n + 2))
	}
	else if (ta[i] > tb[i])
	{
		sa = i;
		d = a[i] - a[i - 1] - sa * (tb[i] - ta[i - 1]);
		out(tb[i] + d / (n + 2))
	}
	else
		out(ta[i])
}

//<<----------Start of Main---------->>//
signed main()
{
	fastio
	precise(6)
    // precompute();
    ts
	// solve();
}