#include <iostream>
#include <string>
#include <set>
#include <vector>
#include <cstdio>

using namespace std;

double minD(const set<pair<unsigned long, unsigned long > >& items, double p)
{
	double minPos = -1;
	double maxPos = 0;

	//cout << "PRUS " << *pi << endl;

	for (set<pair<unsigned long, unsigned long> >::iterator
		i = items.begin(); i != items.end(); ++i) {

		double pos = (p - i->first) * i->second;
		if ((minPos < 0) || pos < minPos) minPos = pos;
		if (pos > maxPos) maxPos = pos;

		//cout << "POS " << pos << " min " << minPos << " max " << maxPos <<endl; 
	}
	
	double dist = maxPos - minPos;
	return dist;
	//cout << "DIS " << dist << " min " << minDist <<endl; 
}

int main() {
	unsigned long num;

	while (cin >> num) {
		if (num == 0)
			break;
		set<pair<unsigned long, unsigned long> > items;
		for (unsigned long i = 0; i < num; ++i) {
			unsigned long t, v;
			cin >> t >> v;
			items.insert(make_pair(t,v));
		}
		unsigned long maxStart = items.rbegin()->first;

		//vector<double> prus;
	  	double minDist = minD(items, maxStart);	
		//prus.push_back(maxStart);
		//cout << "maxSt " << maxStart << endl;
		for (set<pair<unsigned long, unsigned long> >::iterator
			i = items.begin(); i != items.end(); ++i) {
			//cout << i->first << " " << i->second << endl;
			for (set<pair<unsigned long, unsigned long> >::iterator
	                        j = next(i); j != items.end(); ++j) {
				unsigned long dx = j->first * j->second - i->first * i->second;
				unsigned long dv = j->second - i->second;


				if(dv == 0) continue;
				double p = double(dx)/dv;
				//cout << "p " << p << " dx " << dx << " dv " << dv << endl;
				if(p<maxStart) continue;
				//cout << "p2 " << p << endl;
				//prus.push_back(p);
				double dist = minD(items, p);

				if (minDist < 0 || minDist > dist) minDist = dist;
			}
		}

#if 0
		for (vector<double>::iterator pi = prus.begin(); pi != prus.end(); ++pi) {
			double minPos = -1;
			double maxPos = 0;

			//cout << "PRUS " << *pi << endl;

			for (set<pair<unsigned long, unsigned long> >::iterator
				i = items.begin(); i != items.end(); ++i) {

				double pos = (*pi - i->first) * i->second;
				if ((minPos < 0) || pos < minPos) minPos = pos;
				if (pos > maxPos) maxPos = pos;

				//cout << "POS " << pos << " min " << minPos << " max " << maxPos <<endl; 
			}
			
			double dist = maxPos - minPos;
			//cout << "DIS " << dist << " min " << minDist <<endl; 
			if (minDist < 0 || minDist > dist) minDist = dist;
		}
#endif

		//cout << minDist << endl;
		printf("%.3f\n", minDist);
	}

	return 0;
}