N, K = list(map(int, input().split()))





def f(x):

    k = 0

    while x < K:

        x *= 2

        k += 1

    return k





ans = sum(

    1 / (2**f(i))

    for i in range(1, N + 1)

) / N



print(ans)

from math import ceil



# 入力

N, K = list(map(int, input().split()))



# サイコロの各目について勝率を求め、それらの和を解とする

ans = sum(

    1 / (2**((ceil(K / i) - 1).bit_length()))

    for i in range(1, N + 1)

) / N



# 出力

print(ans)

N, K = list(map(int, input().split()))


def f(x):
    k = 0
    while x < K:
        x *= 2
        k += 1
    return k


ans = sum(1 / (2 ** f(i)) for i in range(1, N + 1)) / N
print(ans)

from math import ceil

# 入力
N, K = list(map(int, input().split()))
# サイコロの各目について勝率を求め、それらの和を解とする
ans = sum(1 / (2 ** ((ceil(K / i) - 1).bit_length())) for i in range(1, N + 1)) / N
# 出力
print(ans)

+from math import ceil + +# 入力 - - -def f(x): -    k = 0 -    while x < K: -        x *= 2 -        k += 1 -    return k - - -ans = sum(1 / (2 ** f(i)) for i in range(1, N + 1)) / N +# サイコロの各目について勝率を求め、それらの和を解とする +ans = sum(1 / (2 ** ((ceil(K / i) - 1).bit_length())) for i in range(1, N + 1)) / N +# 出力