#include <bits/stdc++.h>
using namespace std;
pair<long long, long long> v[200010];
long long n;
pair<long double, long double> preff[200010], suff[200010];
pair<long double, long double> intersect(pair<long double, long double> a,
                                         pair<long double, long double> b) {
  return make_pair(max(a.first, b.first), min(a.second, b.second));
}
bool empty(pair<long double, long double> x) { return x.first > x.second; }
bool check(long double d) {
  pair<long double, long double> segm = make_pair(-1e+9, 1e+9);
  for (long long i = 0; i < n; i++) {
    preff[i] = segm;
    segm = intersect(make_pair(v[i].second - d, v[i].second + d), segm);
  }
  segm = make_pair(-1e+9, 1e+9);
  suff[n] = segm;
  for (long long i = n - 1; i >= 0; i--) {
    segm = intersect(make_pair(v[i].second - d, v[i].second + d), segm);
    suff[i] = segm;
  }
  long long jj = 0;
  for (long long ii = 0; ii < n; ii++) {
    while (jj < n && v[ii].first + 2 * d >= v[jj].first) jj++;
    if (!empty(intersect(preff[ii], suff[jj]))) return true;
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (long long i = 0; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    v[i] = make_pair(x + y, x - y);
  }
  sort(v, v + n);
  long double l = 0, r = 1e+9;
  for (long long i = 0; i < 200; i++) {
    long double m = (l + r) / 2;
    if (check(m))
      r = m;
    else
      l = m;
  }
  cout.precision(100);
  cout << (l + r) / 2;
}
