#include <bits/stdc++.h>
using namespace std;
struct par {
  int x, y;
} v[100100];
bool cmp(par a, par b) { return a.x < b.x; }
int topr[100100], botr[100100];
int main() {
  int n;
  while (scanf("%d", &n) == 1) {
    for (int i = 0; i < n; i++) {
      int a, b;
      scanf("%d%d", &a, &b);
      v[i].x = a + b;
      v[i].y = a - b;
    }
    sort(v, v + n, cmp);
    double es = 0, di = 1e10;
    for (int z = 0; z < 100; z++) {
      double me = (es + di) / 2;
      topr[n] = -0x3f3f3f3f;
      botr[n] = 0x3f3f3f3f;
      for (int i = n - 1; i >= 0; i--) {
        topr[i] = max(topr[i + 1], v[i].y);
        botr[i] = min(botr[i + 1], v[i].y);
      }
      int tr = -0x3f3f3f3f, br = 0x3f3f3f3f;
      int k = 0, ok = 0;
      for (int i = 0; i < n; i++) {
        while (k < n && v[k].x - v[i].x <= me) k++;
        if (max(tr, topr[k]) - min(br, botr[k]) <= me) ok = 1;
        tr = max(tr, v[i].y);
        br = min(br, v[i].y);
      }
      if (ok)
        di = me;
      else
        es = me;
    }
    printf("%.10lf\n", 0.25 * (es + di));
  }
  return 0;
}
