public class Euler406 {
    private static long capacityWithBudget(double c, double a, double b, long cap) {
        int imax = (int) Math.floor(c / a);
        int jmax = (int) Math.floor(c / b);
        int cols = jmax + 2;

        long[] dp = new long[(imax + 2) * cols];
        double eps = 1e-16 * (1.0 + c);

        for (int i = imax; i >= 0; --i) {
            double ai = i * a;
            for (int j = jmax; j >= 0; --j) {
                if (ai + j * b <= c + eps) {
                    long v = 1 + dp[(i + 1) * cols + j] + dp[i * cols + j + 1];
                    if (v > cap) {
                        v = cap;
                    }
                    dp[i * cols + j] = v;
                }
            }
        }

        return dp[0];
    }

    private static double cValue(long n, double a, double b) {
        double lo = 0.0;
        double hi = 1.0;
        while (capacityWithBudget(hi, a, b, n) < n) {
            hi *= 2.0;
        }

        for (int it = 0; it < 90; ++it) {
            double mid = (lo + hi) / 2.0;
            if (capacityWithBudget(mid, a, b, n) >= n) {
                hi = mid;
            } else {
                lo = mid;
            }
        }

        return hi;
    }

    public static String solve() {
        long n = 1000000000000L;
        long[] fib = new long[31];
        fib[1] = 1;
        fib[2] = 1;
        for (int k = 3; k <= 30; ++k) {
            fib[k] = fib[k - 1] + fib[k - 2];
        }

        double ans = 0.0;
        for (int k = 1; k <= 30; ++k) {
            double a = Math.sqrt(k);
            double b = Math.sqrt(fib[k]);
            ans += cValue(n, a, b);
        }

        return String.format(java.util.Locale.US, "%.8f", ans);
    }

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