from math import atan2, degrees



N = int(eval(input()))

holes = [tuple(map(int, input().split())) for i in range(N)]



for x, y in holes:

    slopes = []

    for x2, y2 in holes:

        if x == x2 and y == y2: continue

        slopes += [degrees(atan2(y2 - y, x2 - x))]



    aRange = [(0, 360)]

    for slope in slopes:

        f1 = (slope + 90) % 360

        t1 = (slope - 90) % 360

        if t1 == 0: t1 = 360



        if f1 <= t1:

            fts = [(f1, t1)]

        else:

            fts = [(0, t1), (f1, 360)]



        aRange2 = []

        for f, t in fts:

            for aFr, aTo in aRange:

                if aFr <= f: aFr = f

                if t <= aTo: aTo = t

                if aFr <= aTo:

                    aRange2 += [(aFr, aTo)]

        aRange = aRange2



    ans = 0

    for aFr, aTo in aRange:

        ans += (aTo - aFr) / 360

    print(ans)

import math



# ベクトル[p0->p1]に対する、点p2の位置（反時計回りならば、プラスを返す）

def ccw(p0, p1, p2):

    return (p1[0] - p0[0]) * (p2[1] - p0[1]) - (p1[1] - p0[1]) * (p2[0] - p0[0])





N = int(eval(input()))

pts = [(tuple(map(int, input().split())), i) for i in range(N)]



# 凸包を求める

pts.sort()



chU = [] # 上側

for pt, i in pts:

    while len(chU) >= 2 and ccw(chU[-2][0], chU[-1][0], pt) >= 0:

        chU.pop()

    chU.append((pt, i))



chL = [] # 下側

for pt, i in reversed(pts):

    while len(chL) >= 2 and ccw(chL[-2][0], chL[-1][0], pt) >= 0:

        chL.pop()

    chL.append((pt, i))



CH = chU[:-1] + chL[:-1] # ((x, y), i)





# 各点に対して、凸包上で隣接する２点との垂直二等分線がなす角度を求める（360°に対して占める割合が答え）

# （隣接する２辺の傾斜角の差に等しいので、それを計算する）

aIn = math.atan2(CH[-1][0][1] - CH[0][0][1], CH[-1][0][0] - CH[0][0][0])

ptNow = CH[-1][0]

anss = [0.0] * N

for i in reversed(list(range(len(CH)))):

    iNow = CH[i][1]

    pt2 = CH[i - 1][0]

    aOut = math.atan2(pt2[1] - ptNow[1], pt2[0] - ptNow[0])

    anss[iNow] = ((aOut - aIn) % (2 * math.pi)) / (2 * math.pi)



    ptNow = pt2

    aIn = aOut



for ans in anss:

    print(ans)

from math import atan2, degrees

N = int(eval(input()))
holes = [tuple(map(int, input().split())) for i in range(N)]
for x, y in holes:
    slopes = []
    for x2, y2 in holes:
        if x == x2 and y == y2:
            continue
        slopes += [degrees(atan2(y2 - y, x2 - x))]
    aRange = [(0, 360)]
    for slope in slopes:
        f1 = (slope + 90) % 360
        t1 = (slope - 90) % 360
        if t1 == 0:
            t1 = 360
        if f1 <= t1:
            fts = [(f1, t1)]
        else:
            fts = [(0, t1), (f1, 360)]
        aRange2 = []
        for f, t in fts:
            for aFr, aTo in aRange:
                if aFr <= f:
                    aFr = f
                if t <= aTo:
                    aTo = t
                if aFr <= aTo:
                    aRange2 += [(aFr, aTo)]
        aRange = aRange2
    ans = 0
    for aFr, aTo in aRange:
        ans += (aTo - aFr) / 360
    print(ans)

import math

# ベクトル[p0->p1]に対する、点p2の位置（反時計回りならば、プラスを返す）
def ccw(p0, p1, p2):
    return (p1[0] - p0[0]) * (p2[1] - p0[1]) - (p1[1] - p0[1]) * (p2[0] - p0[0])


N = int(eval(input()))
pts = [(tuple(map(int, input().split())), i) for i in range(N)]
# 凸包を求める
pts.sort()
chU = []  # 上側
for pt, i in pts:
    while len(chU) >= 2 and ccw(chU[-2][0], chU[-1][0], pt) >= 0:
        chU.pop()
    chU.append((pt, i))
chL = []  # 下側
for pt, i in reversed(pts):
    while len(chL) >= 2 and ccw(chL[-2][0], chL[-1][0], pt) >= 0:
        chL.pop()
    chL.append((pt, i))
CH = chU[:-1] + chL[:-1]  # ((x, y), i)
# 各点に対して、凸包上で隣接する２点との垂直二等分線がなす角度を求める（360°に対して占める割合が答え）
# （隣接する２辺の傾斜角の差に等しいので、それを計算する）
aIn = math.atan2(CH[-1][0][1] - CH[0][0][1], CH[-1][0][0] - CH[0][0][0])
ptNow = CH[-1][0]
anss = [0.0] * N
for i in reversed(list(range(len(CH)))):
    iNow = CH[i][1]
    pt2 = CH[i - 1][0]
    aOut = math.atan2(pt2[1] - ptNow[1], pt2[0] - ptNow[0])
    anss[iNow] = ((aOut - aIn) % (2 * math.pi)) / (2 * math.pi)
    ptNow = pt2
    aIn = aOut
for ans in anss:
    print(ans)

-from math import atan2, degrees +import math + +# ベクトル[p0->p1]に対する、点p2の位置（反時計回りならば、プラスを返す） +def ccw(p0, p1, p2): +    return (p1[0] - p0[0]) * (p2[1] - p0[1]) - (p1[1] - p0[1]) * (p2[0] - p0[0]) + -holes = [tuple(map(int, input().split())) for i in range(N)] -for x, y in holes: -    slopes = [] -    for x2, y2 in holes: -        if x == x2 and y == y2: -            continue -        slopes += [degrees(atan2(y2 - y, x2 - x))] -    aRange = [(0, 360)] -    for slope in slopes: -        f1 = (slope + 90) % 360 -        t1 = (slope - 90) % 360 -        if t1 == 0: -            t1 = 360 -        if f1 <= t1: -            fts = [(f1, t1)] -        else: -            fts = [(0, t1), (f1, 360)] -        aRange2 = [] -        for f, t in fts: -            for aFr, aTo in aRange: -                if aFr <= f: -                    aFr = f -                if t <= aTo: -                    aTo = t -                if aFr <= aTo: -                    aRange2 += [(aFr, aTo)] -        aRange = aRange2 -    ans = 0 -    for aFr, aTo in aRange: -        ans += (aTo - aFr) / 360 +pts = [(tuple(map(int, input().split())), i) for i in range(N)] +# 凸包を求める +pts.sort() +chU = []  # 上側 +for pt, i in pts: +    while len(chU) >= 2 and ccw(chU[-2][0], chU[-1][0], pt) >= 0: +        chU.pop() +    chU.append((pt, i)) +chL = []  # 下側 +for pt, i in reversed(pts): +    while len(chL) >= 2 and ccw(chL[-2][0], chL[-1][0], pt) >= 0: +        chL.pop() +    chL.append((pt, i)) +CH = chU[:-1] + chL[:-1]  # ((x, y), i) +# 各点に対して、凸包上で隣接する２点との垂直二等分線がなす角度を求める（360°に対して占める割合が答え） +# （隣接する２辺の傾斜角の差に等しいので、それを計算する） +aIn = math.atan2(CH[-1][0][1] - CH[0][0][1], CH[-1][0][0] - CH[0][0][0]) +ptNow = CH[-1][0] +anss = [0.0] * N +for i in reversed(list(range(len(CH)))): +    iNow = CH[i][1] +    pt2 = CH[i - 1][0] +    aOut = math.atan2(pt2[1] - ptNow[1], pt2[0] - ptNow[0]) +    anss[iNow] = ((aOut - aIn) % (2 * math.pi)) / (2 * math.pi) +    ptNow = pt2 +    aIn = aOut +for ans in anss: