import java.util.*;

public class Main {

	public static void main(String[] args) {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	}
} import java.util.*; util.* java public class Main {

	public static void main(String[] args) {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	}
} Main public static void main(String[] args) {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	} main {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long n = Long.parseLong(sc.next()); n Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc long goal = Long.parseLong(sc.next()); goal Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc double result = 0; result 0 for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		} int i = 1; int i = 1; i 1 i <= n i n i++ i++ i {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		} {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		} int kaisuu = 0; kaisuu 0 int score = i; score i while (score < goal) {
				kaisuu++;
				score *= 2;
			} score < goal score goal {
				kaisuu++;
				score *= 2;
			} kaisuu++ kaisuu score *= 2 score 2 result += 1.0 / Math.pow(2, kaisuu) result 1.0 / Math.pow(2, kaisuu) 1.0 Math.pow(2, kaisuu) Math.pow Math 2 kaisuu System.out.println(result / (n + 0.0)) System.out.println System.out System System.out result / (n + 0.0) result (n + 0.0) n 0.0 String[] args args public class Main {

	public static void main(String[] args) {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	}
} public class Main {

	public static void main(String[] args) {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	}
} Main
import java.util.*;

public class Main {

	public static void main(String[] args) {

		// 入力
		Scanner sc = new Scanner(System.in);
		long n = Long.parseLong(sc.next()); // サイコロの面数
		long goal = Long.parseLong(sc.next()); // 目標点数

		double result = 0;
		for (int i = 1; i <= n; i++) {

			// iは、何度「2倍」するとgoalに届くか？
			int kaisuu = 0;
			int score = i;
			while (score < goal) {
				kaisuu++;
				score *= 2;
			}

			// i点からゴールできる確率をresultに足す
			result += 1.0 / Math.pow(2, kaisuu);

		}

		System.out.println(result / (n + 0.0));

	}
}