#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const int N = 100005;
int tr[N], ph[N], vt[N], premin[N], premax[N], sufmin[N], sufmax[N];
inline bool cmp(int i, int j) { return tr[i] < tr[j]; }
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    tr[i] = x - y;
    ph[i] = x + y;
    vt[i] = i;
  }
  sort(vt, vt + n, cmp);
  premin[0] = premax[0] = ph[vt[0]];
  for (int i = 1; i < n; i++) {
    premin[i] = min(premin[i - 1], ph[vt[i]]);
    premax[i] = max(premax[i - 1], ph[vt[i]]);
  }
  sufmin[n - 1] = sufmax[n - 1] = ph[vt[n - 1]];
  for (int i = n - 2; i >= 0; i--) {
    sufmin[i] = min(sufmin[i + 1], ph[vt[i]]);
    sufmax[i] = max(sufmax[i + 1], ph[vt[i]]);
  }
  double le = 0, ri = 2000000010;
  for (int ite = 0; ite < 100; ite++) {
    double mi = (le + ri) / 2;
    bool ok = false;
    for (int i = 0, j = 0; i < n;) {
      double val = tr[vt[i]] + mi * 2;
      if (j < i) j = i;
      while (j < n && (tr[vt[j]] < val || abs(tr[vt[j]] - val) <= eps)) j++;
      if (i == 0 && j >= n) {
        ok = true;
        break;
      }
      int mn, mx;
      if (i == 0) {
        mn = sufmin[j];
        mx = sufmax[j];
      } else if (j >= n) {
        mn = premin[i - 1];
        mx = premax[i - 1];
      } else {
        mn = min(premin[i - 1], sufmin[j]);
        mx = max(premax[i - 1], sufmax[j]);
      }
      if (mx - mn <= mi * 2) {
        ok = true;
        break;
      }
      int tmp = tr[vt[i]];
      while (i < n && tr[vt[i]] == tmp) i++;
    }
    if (ok)
      ri = mi;
    else
      le = mi;
  }
  printf("%.10f", le);
}
