#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <numeric>
#include <cmath>

using namespace std;

typedef long long int ll;
typedef pair<pair<double,double>,int > P;


#define all(x) x.begin(),x.end()

const ll mod = 1e9+7;
const ll INF = 1e9;
const ll MAXN = 1e9;

double cross(P p,P q){
    return p.first.first* q.first.second-p.first.second* q.first.first;
}

double dot(P p,P q){
    return p.first.first*q.first.first+p.first.second*q.first.second;
}

double norm(P p){
    return sqrt(pow(p.first.first,2)+pow(p.first.second,2));
}
double vector_length(P p){
    return pow(pow(p.first.first,2)+pow(p.first.second,2),0.5);
}

double cos_(P p1,P p2){
    if(vector_length(p1)*vector_length(p2)==0) return 0;
    return dot(p1,p2)/(vector_length(p1)*vector_length(p2));
}


int ccw(P p0,P p1,P p2){ //p0p1が基準
    p1.first.first -= p0.first.first;
    p1.first.second -= p0.first.second;
    p2.first.first -= p0.first.first;
    p2.first.second -= p0.first.second;

    if(cross(p1,p2) > 0) return 1; // counter_clockwise
    if(cross(p1,p2) < 0) return -1; // clockwise
    if(dot(p1,p2)<0) return 2 ;//on_line back
    if(norm(p1)<norm(p2)) return -2; //on_line front
    return 3; // on_segment
}

void pri(P p){
    cout << p.first.first << "  " << p.first.second << endl;
}


vector<P> convex_hull(vector<P> ps){

    for(int i = 0; i < ps.size(); i++){
        double x = ps[i].first.first;
        ps[i].first.first = ps[i].first.second;
        ps[i].first.second = x;
    }
    sort(all(ps));
    for(int i = 0; i < ps.size(); i++){
        double x = ps[i].first.first;
        ps[i].first.first = ps[i].first.second;
        ps[i].first.second = x;
    }
    int n = ps.size(),k=0;
    vector<P> ch(n*2);
    for(int i = 0; i < n; i++){
        while(k>=2 && ccw(ch[k-2],ch[k-1],ps[i])< 0) k--;
        ch[k] = ps[i];
        k++;
    }
    int t = k+1;
    for(int i = n-2; i >= 0; i--){
        while(k >= t && ccw(ch[k-2],ch[k-1],ps[i])< 0) k--;
        ch[k] = ps[i];
        k++;
    }

    ch.resize(k-1);
    return ch;
}

int main()
{
    int n;
    cin >> n;
    vector<P> p(n);
    for(int i = 0; i < n; i++){
        cin >> p[i].first.first >> p[i].first.second;
        p[i].second = i;
    }

    vector<double> prob(n,0.0);

    p = convex_hull(p);

    if(p.size()<3){
        for(int i = 0; i < p.size(); i++){
            prob[p[i].second] = 0.5;
        }
    }else{
        for(int i = 0; i < p.size(); i++){

            P p_now = p[i],p_prev=p[i],p_next=p[i];
            if(i==0) p_prev = p[p.size()-1];
            else p_prev = p[i-1];

            if(i==p.size()-1) p_next = p[0];
            else p_next = p[i+1];   

            P p1 = P(pair<double,double>(p_now.first.first-p_prev.first.first,p_now.first.second-p_prev.first.second),-1);
            P p2 = P(pair<double,double>(p_next.first.first-p_now.first.first,p_next.first.second-p_now.first.second),-1);
            P q1 = P(pair<double,double>(-1*p1.first.second,p1.first.first),-1);
            P q2 = P(pair<double,double>(-1*p2.first.second,p2.first.first),-1);   

            prob[p[i].second] = acos(cos_(q1,q2))/(2*atan(1)*4);
        }
    }


    for(int i = 0; i < n; i++){
        printf("%.18f\n", prob[i]);
    }

    return 0;
}

Measured memory_bytes: 256