#include <bits/stdc++.h>
using namespace std;
struct ww {
  long double x, y;
} a[100010];
int i, j, k, n, m, xx, yy;
long double LU[100010], RU[100010], LD[100010], RD[100010];
inline bool judge(long double len) {
  int i, j;
  j = 0;
  for (i = 1; i <= n; i++) {
    for (; a[j + 1].x + len < a[i].x; j++)
      ;
    if (max(LU[j], RU[i + 1]) - min(LD[j], RD[i + 1]) <= len) return 1;
  }
  return 0;
}
inline bool cc1(const ww &a, const ww &b) { return a.x < b.x; }
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &xx, &yy);
    a[i].x = yy - xx, a[i].y = xx + yy;
  }
  sort(a + 1, a + n + 1, cc1);
  LD[0] = RD[n + 1] = 1e10;
  LU[0] = RU[n + 1] = -1e10;
  for (i = 1; i <= n; i++)
    LD[i] = min(LD[i - 1], a[i].y), LU[i] = max(LU[i - 1], a[i].y);
  for (i = n; i; i--)
    RD[i] = min(RD[i + 1], a[i].y), RU[i] = max(RU[i + 1], a[i].y);
  long double l = 0, r = 1e10, mid;
  for (; l + 1e-7 < r;) {
    mid = (l + r) / 2;
    if (judge(mid))
      r = mid;
    else
      l = mid;
  }
  double an = r;
  printf("%.10lf\n", an / 2);
  return 0;
}
