#include <bits/stdc++.h>

#define rep(i,n) for (int i = 0; i < (int)(n); ++i)
#define reps(i,n) for (int i = 1; i <= (int)(n); ++i)
#define repd(i,n) for (int i = (int)(n - 1); i >= 0; --i)
#define repds(i,n) for (int i = (int)(n); i > 0; --i)
#define loop(i,x,n) for (int i = (int)(x); i < (n); ++i)
#define loops(i,x,n) for (int i = (int)(x); i <= (n); ++i)
#define loopd(i,x,n) for (int i = (int)(x); i > (n); --i)
#define loopds(i,x,n) for (int i = (int)(x); i >= (n); --i)
#define itrep(i,a) for (auto i = begin(a); i != end(a); ++i)
#define itrepd(i,a) for (auto i = rbegin(a); i != rend(a); ++i)
#define all(f,x,...) [&](decltype(x)& whole) { return (f)(begin(whole), end(whole), ##__VA_ARGS__); }(x)
using namespace std;
using ll = long long;
using ld = long double;
constexpr ll inf = static_cast<ll>(1e18);
constexpr int iinf = static_cast<int>(1e9);
constexpr double dinf = 1e10;
constexpr ld ldinf = 1e18;
ll mod = static_cast<ll>(1e9 + 7);
template<class T> constexpr int sz(const T& a) { return (int)a.size(); }
template<class T> constexpr T pow2(const T a) { return a * a; }
template<class T, class ... Args> constexpr void mins(T& a, Args... args) { a = min<T>({ a, args... }); }
template<class T, class... Args> constexpr void maxs(T& a, Args... args) { a = max<T>({ a,args... }); }
template<class A, int N, class T>
void fillArray(A(&array)[N], const T& val) { std::fill((T*)array, (T*)(array + N), val); }

constexpr double eps = 1e-10;
struct Point {
    double x, y;
    int id;
    Point(double x = 0, double y = 0) : x(x), y(y) {}
    Point& operator+=(const Point& v) { x += v.x; y += v.y; return *this; }
    Point operator+(const Point& v) const { return Point(*this) += v; }
    Point& operator-=(const Point& v) { x -= v.x; y -= v.y; return *this; }
    Point operator-(const Point& v) const { return Point(*this) -= v; }
    Point& operator*=(double s) { x *= s; y *= s; return *this; }
    Point operator*(double s) const { return Point(*this) *= s; }
    Point& operator/=(double s) { x /= s; y /= s; return *this; }
    Point operator/(double s) const { return Point(*this) /= s; }
    double dot(const Point& v) const { return x * v.x + y * v.y; }
    double cross(const Point& v) const { return x * v.y - v.x * y; }
    Point rotate90() const { return Point(y, -x); }
    double norm2() const { return x * x + y * y; }
    double norm() const { return sqrt(norm2()); }
    int ort() const {
        if (abs(x) < eps && abs(y) < eps) return 0;
        if (y > 0) return x > 0 ? 1 : 2;
        else return x > 0 ? 4 : 3;
    }
    //bool operator<(const Point& v) const {
    //    int o = ort(), vo = v.ort();
    //    if (o != vo) return o < vo;
    //    return cross(v) > 0;
    //}
    bool operator<(const Point& v) const {
        return x < v.x || (x == v.x && y < v.y);
    }
};
std::vector<Point> convex_hull(std::vector<Point>& p) {
    int n = (int)p.size();
    std::sort(p.begin(), p.end());
    int k = 0;
    std::vector<Point> h(n * 2);
    for (int i = 0; i < n; ++i) {
        while (k > 1 && (h[k - 1] - h[k - 2]).cross(p[i] - h[k - 1]) <= 0) --k;
        h[k++] = p[i];
    }
    for (int i = n - 2, t = k; i >= 0; --i) {
        while (k > t && (h[k - 1] - h[k - 2]).cross(p[i] - h[k - 1]) <= 0) --k;
        h[k++] = p[i];
    }
    h.resize(k - 1);
    return h;
}

int n;
void solve() {
    cin >> n;
    vector<Point> p(n);
    rep(i, n) {
        cin >> p[i].x >> p[i].y;
        p[i].id = i;
    }
    auto h = convex_hull(p);
    auto m = sz(h);
    vector<double> rad(m);
    rep(i, m) {
        int j = (i + 1) % m;
        auto q = (h[i] - h[j]).rotate90();
        rad[i] = atan2(q.y, q.x);
    }
    vector<double> ans(n);
    rep(i, m) {
        int j = (i + 1) % m;
        auto a = rad[j] - rad[i];
        if (a < 0) a += 2 * M_PI;
        if (a > 2 * M_PI) a -= 2 * M_PI;
        ans[h[j].id] = a / (2 * M_PI);
    }
    rep(i, n) cout << ans[i] << endl;
}

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(15);
    solve();
    return 0;
}


Measured memory_bytes: 512