#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1 << 17;
const int SIZE = MAXN << 1;
const int inf = (1 << 30 - 1) + (1 << 30);
const double eps = 1E-8;
struct node {
  int lo;
  int hi;
  node() {
    lo = inf;
    hi = -inf;
  }
  node(int a, int b) {
    lo = a;
    hi = b;
  }
};
node SEG[SIZE];
const node ZERO;
node operator+(node a, node b) {
  node c;
  c.hi = max(a.hi, b.hi);
  c.lo = min(a.lo, b.lo);
  return c;
}
void down(int cur) {
  int childl = cur * 2, childr = childl + 1;
  if (childr < SIZE) {
    SEG[cur] = SEG[childl] + SEG[childr];
  }
}
void put(int idx, int val, int cur = 1, int l = 0, int r = MAXN) {
  if (r - l == 1) {
    if (l == idx) {
      SEG[cur] = SEG[cur] + node(val, val);
    }
  } else {
    int childl = cur * 2, childr = childl + 1;
    int mid = (l + r) / 2;
    if (idx < mid)
      put(idx, val, childl, l, mid);
    else
      put(idx, val, childr, mid, r);
    down(cur);
  }
}
node query(int left, int right, int cur = 1, int l = 0, int r = MAXN) {
  int childl = cur * 2, childr = childl + 1;
  int mid = (l + r) / 2;
  if (left <= l && r <= right)
    return SEG[cur];
  else if (left >= r || l >= right)
    return ZERO;
  else {
    node ql = query(left, right, childl, l, mid);
    node qr = query(left, right, childr, mid, r);
    return ql + qr;
  }
}
int N;
pair<int, int> ar[MAXN];
pair<int, int> conv(int x, int y) { return pair<int, int>(x + y, x - y); }
bool works(double d) {
  int left = 0, right = 0;
  while (right < N) {
    if (ar[left].first + 2 * d >= ar[right].first) {
      if (right == N - 1 || ar[left].first + 2 * d < ar[right + 1].first) {
        node ql = query(0, left);
        node qr = query(right + 1, N);
        node n = ql + qr;
        if (n.hi <= n.lo + 2 * d) return true;
      }
      ++right;
    } else {
      ++left;
    }
  }
  return false;
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N; ++i) {
    int a, b;
    scanf("%d %d", &a, &b);
    ar[i] = conv(a, b);
  }
  sort(ar, ar + N);
  for (int i = 0; i < N; ++i) {
    put(i, ar[i].second);
  }
  double low = 0;
  double step = 1E9;
  while (step > eps) {
    double mid = low + step;
    if (!works(mid)) {
      low += step;
    }
    step /= 2;
  }
  printf("%.10f\n", low);
  return 0;
}
