Problem:
Score : 300 points

Problem Statement

Snuke has a fair N-sided die that shows the integers from 1 to N with equal probability and a fair coin. He will play the following game with them:

Throw the die. The current score is the result of the die.

As long as the score is between 1 and K-1 (inclusive), keep flipping the coin. The score is doubled each time the coin lands heads up, and the score becomes 0 if the coin lands tails up.

The game ends when the score becomes 0 or becomes K or above. Snuke wins if the score is K or above, and loses if the score is 0.

You are given N and K. Find the probability that Snuke wins the game.

Constraints

1 ≤ N ≤ 10^5

1 ≤ K ≤ 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the probability that Snuke wins the game. The output is considered correct when the absolute or relative error is at most 10^{-9}.

Sample Input 1

3 10

Sample Output 1

0.145833333333

If the die shows 1, Snuke needs to get four consecutive heads from four coin flips to obtain a score of 10 or above. The probability of this happening is \frac{1}{3} \times (\frac{1}{2})^4 = \frac{1}{48}.

If the die shows 2, Snuke needs to get three consecutive heads from three coin flips to obtain a score of 10 or above. The probability of this happening is \frac{1}{3} \times (\frac{1}{2})^3 = \frac{1}{24}.

If the die shows 3, Snuke needs to get two consecutive heads from two coin flips to obtain a score of 10 or above. The probability of this happening is \frac{1}{3} \times (\frac{1}{2})^2 = \frac{1}{12}.

Thus, the probability that Snuke wins is \frac{1}{48} + \frac{1}{24} + \frac{1}{12} = \frac{7}{48} \simeq 0.1458333333.

Sample Input 2

100000 5

Sample Output 2

0.999973749998

Solution in Fortran (gfortran v4.8.4) (judge verdict: Wrong Answer)

PROGRAM ATCODER

implicit none
integer :: i=0,n,k,s,c1,c2,r(17),r0
real(8) :: ans=0.d0,a(17)

r = 0
a = 0

read*, n,k

c1 = n
s = 1

if ( n >= k ) then
  r0 = n - k + 1
  c1 = k
end if

do
  i = i + 1
  if ( s > k  ) exit
  s = s*2
  c2 = k/s
  if ( mod(k,s) /= 0 ) then
    c2 = c2 + 1
  end if
  if ( c2 > n ) cycle
  r(i) = c1 - c2
  if ( c1 == c2 ) then
    r(i) = 1
  end if
  c1 = c2
end do

ans = (1.d0/real(n,8))*real(r0,8)

do i = 1, 17, 1
  if ( r(i) == 0.d0 ) cycle
  a(i) = ((1.d0/real(n,8))*(0.5d0)**real(i,8))*real(r(i),8)
  ans = ans + a(i)
end do

write(*,'(i0,f0.10)') 0,ans

END PROGRAM ATCODER