#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7, inf = 2e9 + 7;
int n;
long long lma[N], lmi[N], rma[N], rmi[N];
struct Node {
  long long x, y;
} p[N];
inline bool cmp(Node u, Node v) { return u.x < v.x; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    long long x, y;
    scanf("%lld%lld", &x, &y);
    p[i] = (Node){x - y, x + y};
  }
  sort(p + 1, p + 1 + n, cmp);
  lma[0] = -inf, lmi[0] = inf;
  rma[n + 1] = -inf, rmi[n + 1] = inf;
  for (int i = 1; i <= n; i++) {
    lma[i] = (p[i].y > lma[i - 1] ? p[i].y : lma[i - 1]);
    lmi[i] = (p[i].y < lmi[i - 1] ? p[i].y : lmi[i - 1]);
  }
  for (int i = n; i >= 1; i--) {
    rma[i] = (p[i].y > rma[i + 1] ? p[i].y : rma[i + 1]);
    rmi[i] = (p[i].y < rmi[i + 1] ? p[i].y : rmi[i + 1]);
  }
  double l = 0, r = 1e9 + 2;
  while (fabs(r - l) > 0.00000001) {
    double mid = (l + r) / 2;
    bool flag = false;
    for (int i = 1, j = 1; i <= n && (!flag); i++) {
      while (p[j].x - p[i].x <= 2 * mid && j <= n) j++;
      j--;
      int k1 = i - 1, k2 = j + 1;
      long long mac;
      if (k1 == 0 && k2 == n + 1) {
        flag = true;
        continue;
      }
      if (k1 == 0)
        mac = rma[k2] - rmi[k2];
      else if (k2 == n + 1)
        mac = lma[k1] - lmi[k1];
      else
        mac = (lma[k1] > rma[k2] ? lma[k1] : rma[k2]) -
              (lmi[k1] < rmi[k2] ? lmi[k1] : rmi[k2]);
      if (mac <= 2 * mid) flag = true;
    }
    if (flag)
      r = mid;
    else
      l = mid;
  }
  printf("%.7lf\n", l);
  return 0;
}
