#include <bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i = 0; i < (n); ++i)
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
#define FORD(i,a,b) for(int i = (a); i >= (b); --i)

#define maxN 100005
#define INF 1.0e20
#define err 1e-6
#define err2 1e-3

long double my_inf = INF;

int N;

int t[maxN], v[maxN];

long double get_distance(long double left) {
//  printf("get distance for %d\n", left);
  long double min_t = 0;
  REP(i, N) {
    min_t = max(min_t, t[i] + (long double)left / v[i]);
  }
//  printf("min_t %Lf\n", min_t);
  long double right = left;
  REP(i, N) {
    right = max(right, ((long double)min_t - t[i]) * v[i]);
  }
//  printf("right %Lf, right - left %Lf\n", right, right - left);
  return right - left;
}

void testcase() {
  REP(i, N) {
    scanf("%d%d", t + i, v + i);
  }
  int best_i = 0;
  REP(i, N) {
    if (v[i] > v[best_i] || (v[i] == v[best_i] && t[i] > t[best_i])) best_i = i;
  }
  my_inf = 0;
  REP(i, N) {
    if (t[best_i] <= t[i]) continue;
//    printf("i %d\n", i);
    if (v[best_i] == v[i]) continue;
//    printf("i %d\n", i);
    my_inf = max(my_inf, abs(((long double)v[best_i] * t[best_i] - (long double)v[i] * t[i]) / (v[best_i] - v[i])));
  }
  long double dl, dr, dm1, dm2;
  dl = 0;
  dr = my_inf;
//  printf("%Lf\n", my_inf);
  while (true) {
    long double dist_m1, dist_m2;
//    long double dist_1 = get_distance(dl);
//    long double dist_2 = get_distance(dl + err);
//    printf("dl %Lf, dr %Lf\n", dl, dr);
//    printf("err %Lf\n", dr - dl);
    if (abs(dr - dl) < err) {
      break;
    }
    dm1 = (2.0 / 3) * dl + (1.0 / 3) * dr;
    dm2 = (1.0 / 3) * dl + (2.0 / 3) * dr;
//    printf("middle %Lf %Lf\n", dm1, dm2);
    dist_m1 = get_distance(dm1);
    dist_m2 = get_distance(dm2);
    if (dist_m1 < dist_m2) dr = dm2;
    else dl = dm1;
  }
//  printf("%Lf %Lf\n", dl, dr);
  printf("%.9Lf\n", get_distance(dl));
}

int main() {
  while (scanf("%d", &N) == 1 && N > 0) {
    testcase();
  }
  return 0;
}