
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	}

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

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	}

} Main public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	} main {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int N = Integer.parseInt(sc.next()); N Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int K = Integer.parseInt(sc.next()); K Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc double ans = 0; ans 0 ans = Math.max((double)(N-K+1)/N, 0) ans Math.max((double)(N-K+1)/N, 0) Math.max Math (double)(N-K+1)/N (double)(N-K+1) N-K N K 1 N 0 int co=0; co 0 if(N<K) co = N;
		else if(N>=K) co=K-1; N<K N K co = N co N if(N>=K) co=K-1; N>=K N K co=K-1 co K-1 K 1 for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		} int i=1; int i=1; i 1 i<=co i co i++ i++ i {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		} {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		} int countpow=0; countpow 0 for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			} int j=1; int j=1; j 1 j<18 j 18 j++ j++ j {
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			} {
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			} int p = (int) (i*Math.pow(2, j)); p (int) (i*Math.pow(2, j)) i Math.pow(2, j) Math.pow Math 2 j if(p>=K) {
					countpow=j;
					break;
				} p>=K p K {
					countpow=j;
					break;
				} countpow=j countpow j break; double tmp=(double)1/(N * Math.pow(2, countpow)); tmp (double)1/(N * Math.pow(2, countpow)) (double)1 (N * Math.pow(2, countpow)) N Math.pow(2, countpow) Math.pow Math 2 countpow ans += tmp ans tmp System.out.println(String.format("%.12f",ans)) System.out.println System.out System System.out String.format("%.12f",ans) String.format String "%.12f" ans String[] args args public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	}

} public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	}

} Main

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());//int型
		int K = Integer.parseInt(sc.next());
		double ans = 0;
		// サイコロの段階で勝ち確定
		ans = Math.max((double)(N-K+1)/N, 0);
		int co=0;
		if(N<K) co = N;
		else if(N>=K) co=K-1;
		
		for( int i=1; i<=co;i++) {
			int countpow=0;
			for(int j=1; j<18;j++){
			    int p = (int) (i*Math.pow(2, j));
				if(p>=K) {
					countpow=j;
					break;
				}
			}
			double tmp=(double)1/(N * Math.pow(2, countpow));
			ans += tmp;
			
		}
		
		System.out.println(String.format("%.12f",ans));
		
	}

}
