import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

public class Euler959 {

    static BigDecimal fValue(int a, int b) {
        if (a == b) {
            return BigDecimal.ZERO;
        }

        MathContext mc = new MathContext(100, RoundingMode.HALF_UP);
        int ab = a + b;

        BigDecimal pow2 = BigDecimal.ONE;
        for (int i = 0; i < ab; ++i) {
            pow2 = pow2.multiply(BigDecimal.valueOf(2));
        }

        BigDecimal term = BigDecimal.ONE;
        BigDecimal sum = BigDecimal.ONE;
        BigDecimal threshold = new BigDecimal("1e-80");

        for (int t = 0; t < 100000; ++t) {
            BigDecimal ratio = BigDecimal.ONE;

            for (int i = 1; i <= ab; ++i) {
                ratio = ratio.multiply(BigDecimal.valueOf(ab * t + i), mc);
            }
            for (int i = 1; i <= a; ++i) {
                ratio = ratio.divide(BigDecimal.valueOf(a * t + i), mc);
            }
            for (int i = 1; i <= b; ++i) {
                ratio = ratio.divide(BigDecimal.valueOf(b * t + i), mc);
            }
            ratio = ratio.divide(pow2, mc);

            term = term.multiply(ratio, mc);
            sum = sum.add(term, mc);

            if (term.compareTo(threshold) < 0) {
                break;
            }
        }

        return BigDecimal.ONE.divide(sum, mc);
    }

    public static String solve() {
        return fValue(89, 97).setScale(9, RoundingMode.HALF_UP).toString();
    }

    public static void main(String[] args) {
        if (fValue(1, 1).compareTo(BigDecimal.ZERO) != 0) {
            System.out.println("Validation failed");
            return;
        }

        BigDecimal target = new BigDecimal("0.427050983124842272");
        BigDecimal v12 = fValue(1, 2);
        if (v12.subtract(target).abs().compareTo(new BigDecimal("1e-15")) >= 0) {
            System.out.println("Validation failed");
            return;
        }

        System.out.println(solve());
    }
}
