import java.util.Locale;

public class Euler267 {
    static double binomialTailProbability(int n, int kMin) {
        if (kMin <= 0)
            return 1.0;
        if (kMin > n)
            return 0.0;

        double[] prob = new double[n + 1];
        prob[0] = Math.pow(2.0, -n);

        for (int k = 0; k < n; k++) {
            prob[k + 1] = prob[k] * (n - k) / (k + 1);
        }

        double sum = 0.0;
        for (int k = kMin; k <= n; k++) {
            sum += prob[k];
        }
        return sum;
    }

    static int minimumWinsNeeded(int n, double target) {
        double lnTarget = Math.log(target);
        for (int k = 0; k <= n; k++) {
            double bestGain = -1.0e300;
            if (k == n) {
                bestGain = n * Math.log(3.0);
            } else {
                double fStar = (3.0 * k - n) / (2.0 * n);
                if (fStar > 0.0 && fStar < 1.0) {
                    bestGain = k * Math.log(1.0 + 2.0 * fStar) + (n - k) * Math.log(1.0 - fStar);
                } else if (fStar <= 0.0) {
                    bestGain = 0.0;
                }
            }
            if (bestGain >= lnTarget) {
                return k;
            }
        }
        return n + 1;
    }

    static double solveProbability(int tosses, double target) {
        int kMin = minimumWinsNeeded(tosses, target);
        return binomialTailProbability(tosses, kMin);
    }

    public static String solve() {
        double ans = solveProbability(1000, 1.0e9);
        return String.format(Locale.US, "%.12f", ans);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
