#include "assert.h"
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <time.h>
#include <vector>
using namespace std;
#if LOCAL
#define DO_NOT_SEND
#endif
typedef long long LL;
int IntMaxVal = ( int ) 1e20 ;
int IntMinVal = ( int ) - 1e20 ;
LL LongMaxVal = ( LL) 1e20 ;
LL LongMinVal = ( LL) - 1e20 ;
#define FOR(i, a, b) for(int i = a; i < b ; ++i)
#define FORD(i, a, b) for(int i = a; i >= b; --i)
template < typename T> inline void minimize( T & a, T b) { a = std:: min ( a, b) ; }
template < typename T> inline void maximize( T & a, T b) { a = std:: max ( a, b) ; }
template < typename T> inline void swap( pair< T, T> & p) { swap( p.first , p.second ) ; }
#define all(v) v.begin(),v.end()
#define endl '\n'
template < typename T> struct argument_type;
template < typename T, typename U> struct argument_type< T( U) > { typedef U type; } ;
#define next(t, i) argument_type<void(t)>::type i; cin >> i;
template < typename T1, typename T2> istream& operator >> ( istream& is, pair< T1, T2> & s) { is >> s.first >> s.second ; return is; }
template < typename T> ostream& operator << ( ostream& os, const vector< T> & v) { for ( int i = 0 ; i < v.size ( ) ; i++ ) { if ( i) os << ' ' ; os << v[ i] ; } os << endl; return os; }
template < typename T1, typename T2> ostream& operator << ( ostream& os, const vector< pair< T1, T2>> & v) { for ( int i = 0 ; i < v.size ( ) ; i++ ) { os << v[ i] << endl; } return os; }
template < typename T1, typename T2> ostream& operator << ( ostream& s, const pair< T1, T2> & t) { s << t.first << ' ' << t.second ; return s; }
template < typename T> vector< T> readVector( int n) { vector< T> res( n) ; for ( int i = 0 ; i < n ; i++ ) cin >> res[ i] ; return res; }
vector< int > get_min_bombing( vector< int > xs, bool reversed) {
sort( all( xs) ) ;
if ( reversed) {
for ( auto & x : xs) x = 1e9 - x;
reverse( all( xs) ) ;
}
vector< int > ans( xs.size ( ) ) ;
int ptr = 0 ;
FOR ( i, 1 , xs.size ( ) ) {
while ( ptr + 1 < i && max( ans[ ptr] + 1 , xs[ i] - xs[ ptr] ) > max( ans[ ptr + 1 ] + 1 , xs[ i] - xs[ ptr + 1 ] ) ) ptr++ ;
ans[ i] = max( ans[ ptr] + 1 , xs[ i] - xs[ ptr] ) ;
}
if ( reversed) {
reverse( all( ans) ) ;
}
return ans;
}
int main( ) {
#ifndef LOCAL
freopen ( "angry.in" , "rt" , stdin ) ;
freopen ( "angry.out" , "wt" , stdout ) ;
#endif
srand ( time ( NULL ) ) ;
ios_base:: sync_with_stdio ( false ) ; cin .tie ( NULL ) ;
fixed( cout ) ; cout << setprecision( 1 ) ;
next( int , n) ;
auto xs = readVector< int > ( n) ;
auto l = get_min_bombing( xs, false ) ;
auto r = get_min_bombing( xs, true ) ;
sort( all( xs) ) ;
double ans = r.front ( ) ;
FOR ( i, 0 , n) minimize( ans, ( double ) max( l[ i] , r[ i] ) ) ;
int left = 0 ;
int right = n - 1 ;
while ( left < right) {
minimize( ans, max( ( xs[ right] - xs[ left] ) / 2.0 , ( double ) ( 1 + max( l[ left] , r[ right] ) ) ) ) ;
if ( l[ left + 1 ] < r[ right - 1 ] ) left++ ;
else right-- ;
}
cout << ans;
}
I2luY2x1ZGUgImFzc2VydC5oIgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8Y2N0eXBlPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNpZiBMT0NBTAoJI2RlZmluZSBET19OT1RfU0VORAojZW5kaWYKCnR5cGVkZWYgbG9uZyBsb25nIExMOwoKaW50IEludE1heFZhbCA9IChpbnQpIDFlMjA7CmludCBJbnRNaW5WYWwgPSAoaW50KSAtMWUyMDsKTEwgTG9uZ01heFZhbCA9IChMTCkgMWUyMDsKTEwgTG9uZ01pblZhbCA9IChMTCkgLTFlMjA7CgojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDwgYiA7ICsraSkKI2RlZmluZSBGT1JEKGksIGEsIGIpIGZvcihpbnQgaSA9IGE7IGkgPj0gYjsgLS1pKQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgbWluaW1pemUoVCAmYSwgVCBiKSB7IGEgPSBzdGQ6Om1pbihhLCBiKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBtYXhpbWl6ZShUICZhLCBUIGIpIHsgYSA9IHN0ZDo6bWF4KGEsIGIpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBzd2FwKHBhaXI8VCwgVD4gJnApIHsgc3dhcChwLmZpcnN0ICwgcC5zZWNvbmQgKTsgfQoKI2RlZmluZSBhbGwodikgdi5iZWdpbigpLHYuZW5kKCkKCiNkZWZpbmUgZW5kbCAnXG4nCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBhcmd1bWVudF90eXBlOwp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgYXJndW1lbnRfdHlwZTxUKFUpPiB7IHR5cGVkZWYgVSB0eXBlOyB9OwojZGVmaW5lIG5leHQodCwgaSkgYXJndW1lbnRfdHlwZTx2b2lkKHQpPjo6dHlwZSBpOyBjaW4gPj4gaTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+IGlzdHJlYW0mIG9wZXJhdG9yID4+KGlzdHJlYW0mIGlzLCBwYWlyPFQxLCBUMj4mIHMpIHsgaXMgPj4gcy5maXJzdCA+PiBzLnNlY29uZDsgcmV0dXJuIGlzOyB9CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSYgb3MsIGNvbnN0IHZlY3RvcjxUPiAmdikgeyBmb3IgKGludCBpID0gMCA7IGkgPCB2LnNpemUoKSA7IGkrKykgeyBpZiAoaSkgb3MgPDwgJyAnOyBvcyA8PCB2W2ldOyB9IG9zIDw8IGVuZGw7IHJldHVybiBvczsgfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSYgb3MsIGNvbnN0IHZlY3RvcjxwYWlyPFQxLCBUMj4+ICZ2KSB7IGZvciAoaW50IGkgPSAwIDsgaSA8IHYuc2l6ZSgpIDsgaSsrKSB7IG9zIDw8IHZbaV0gPDwgZW5kbDsgfSByZXR1cm4gb3M7IH0KdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gb3N0cmVhbSYgb3BlcmF0b3IgPDwob3N0cmVhbSYgcywgY29uc3QgcGFpcjxUMSwgVDI+JiB0KSB7IHMgPDwgdC5maXJzdCA8PCAnICcgPDwgdC5zZWNvbmQ7IHJldHVybiBzOyB9CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2ZWN0b3I8VD4gcmVhZFZlY3RvcihpbnQgbikgeyB2ZWN0b3I8VD4gcmVzKG4pOyBmb3IgKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKSBjaW4gPj4gcmVzW2ldOyByZXR1cm4gcmVzOyB9Cgp2ZWN0b3I8aW50PiBnZXRfbWluX2JvbWJpbmcodmVjdG9yPGludD4geHMsIGJvb2wgcmV2ZXJzZWQpIHsKCXNvcnQoYWxsKHhzKSk7CglpZiAocmV2ZXJzZWQpIHsKCQlmb3IgKGF1dG8gJnggOiB4cykgeCA9IDFlOSAtIHg7CgkJcmV2ZXJzZShhbGwoeHMpKTsKCX0KCgl2ZWN0b3I8aW50PiBhbnMoeHMuc2l6ZSgpKTsKCglpbnQgcHRyID0gMDsKCglGT1IgKGksIDEsIHhzLnNpemUoKSkgewoJCXdoaWxlIChwdHIgKyAxIDwgaSAmJiBtYXgoYW5zW3B0cl0gKyAxLCB4c1tpXSAtIHhzW3B0cl0pID4gbWF4KGFuc1twdHIgKyAxXSArIDEsIHhzW2ldIC0geHNbcHRyICsgMV0pKSBwdHIrKzsKCQlhbnNbaV0gPSBtYXgoYW5zW3B0cl0gKyAxLCB4c1tpXSAtIHhzW3B0cl0pOwoJfQoKCWlmIChyZXZlcnNlZCkgewoJCXJldmVyc2UoYWxsKGFucykpOwoJfQoKCXJldHVybiBhbnM7Cn0KCmludCBtYWluKCkgewoJI2lmbmRlZiBMT0NBTAoJZnJlb3BlbigiYW5ncnkuaW4iLCAicnQiLCBzdGRpbik7CglmcmVvcGVuKCJhbmdyeS5vdXQiLCAid3QiLCBzdGRvdXQpOwoJI2VuZGlmCgoJc3JhbmQgKHRpbWUoTlVMTCkpOwoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCk7CglmaXhlZChjb3V0KTsgY291dCA8PCBzZXRwcmVjaXNpb24oMSk7CgkKCW5leHQoaW50LCBuKTsKCWF1dG8geHMgPSByZWFkVmVjdG9yPGludD4obik7CgoJYXV0byBsID0gZ2V0X21pbl9ib21iaW5nKHhzLCBmYWxzZSk7CglhdXRvIHIgPSBnZXRfbWluX2JvbWJpbmcoeHMsIHRydWUpOwoKCXNvcnQoYWxsKHhzKSk7CgoJZG91YmxlIGFucyA9IHIuZnJvbnQoKTsKCUZPUiAoaSwgMCwgbikgbWluaW1pemUoYW5zLCAoZG91YmxlKSBtYXgobFtpXSAsIHJbaV0pKTsKCglpbnQgbGVmdCA9IDA7CglpbnQgcmlnaHQgPSBuIC0gMTsKCgl3aGlsZSAobGVmdCA8IHJpZ2h0KSB7CgkJbWluaW1pemUoYW5zLCBtYXgoKHhzW3JpZ2h0XSAtIHhzW2xlZnRdKSAvIDIuMCAsIChkb3VibGUpKDEgKyBtYXgobFtsZWZ0XSAsIHJbcmlnaHRdKSkpKTsKCgkJaWYgKGxbbGVmdCArIDFdIDwgcltyaWdodCAtIDFdKSBsZWZ0Kys7CgkJZWxzZSByaWdodC0tOwoJfQoKCWNvdXQgPDwgYW5zOwp9