//点iの領域は, 線分i-jの垂直2等分線(j≠i, 1≦j≦n)によって作られるが、全体を1としたときの面積は垂直2等分線同士の角度で求められる。
//変形すると、単に方向ベクトルi->j同士(i:固定, j:i以外)の角度で求められる。
//ある方向ベクトルi->j1を基準(Re=1, Im=0)に取り、反時計回りに進む方向を角度(0～2 * PI)正としたときの、方向ベクトルの最大角度
//をA(i, j1)とおくと、X = min(A(i, 1), …, A(i, n)) (2項目はi以外)がPI以上なら「i行目の答え = 0」、
//PI未満なら「i行目の答え = (PI - X) / (2 * PI)」になる。「基準i->j1以外の方向ベクトルの角度値を0超えにしたいこと・第3,4象限」を考慮すると、
//円環数列のテクの応用によって、O(N^2)に落とせる。
//注意点としては、円環数列を作る前に角度をソートする必要があること！！！

#include <iostream>
#include <complex>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef complex<double> P;

double PI = 3.14159265358979;
int n;
P p[100];

int main() {
	int i, j, k;
	cin >> n;
	for (i = 0; i < n; i++) {
		double x, y; cin >> x >> y;
		p[i] = P(x, y);
	}
	
	for (i = 0; i < n; i++) {
		double ang[198];
		int cnt = 0;
		for (j = 0; j < n; j++) {
			if (j == i) continue;
			ang[cnt++] = arg(p[j] - p[i]);
		}
		sort(ang, ang + cnt);
		for (j = 0; j < cnt; j++) {
			ang[cnt + j] = ang[j] + 2 * PI;
		}
		
		double minArg = PI;
		for (j = 0; j < cnt; j++) {
			minArg = min(minArg, ang[j + cnt - 1] - ang[j]);
		}
		double ans = (PI - minArg) / (2 * PI);
		printf("%.14f\n", ans);
	}
	return 0;
}