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 JavaScript (node.js v5.12) (judge verdict: Accepted)

function Main(input) {
  "use strict";
	const lines = input.split("\n");
  let S = lines[0].split(" ").map(e => parseInt(e));
  
  const K = S.pop()
  const N = S.pop()

  const Ps = [];
  for (let i=0; i < 17; i++) {
    Ps.push(Math.pow(2, i+1))
  }

  const Pr = Ps.map( n => 1/n)
  const L = Ps.length;

  let ans = 0;
  for (let i=1; i<N+1; i++) {
    if (i >= K) {
      ans += 1/N;
      continue
    }
    let idx = 0;
    prb:
    for(let j =0; j < L ; j++) {
      if (i*Ps[j] >= K) {
        idx = j;
        break prb;
      }
    }
    ans += Pr[idx] / N


  }
  console.log(ans)

}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));