public class Euler965 {

    static double computeF(int N) {
        long a = 0;
        long b = 1;
        long c = 1;
        long d = N;

        double sum = 0.0;
        double compensation = 0.0;

        while (c <= N) {
            double term = 1.0 / (2.0 * b * d * d);

            double y = term - compensation;
            double t = sum + y;
            compensation = (t - sum) - y;
            sum = t;

            long k = (N + b) / d;
            long nextC = k * c - a;
            long nextD = k * d - b;
            a = c;
            b = d;
            c = nextC;
            d = nextD;
        }

        return sum;
    }

    static boolean nearlyEqual(double x, double y, double eps) {
        return Math.abs(x - y) <= eps;
    }

    public static String solve() {
        return String.format(java.util.Locale.US, "%.13f", computeF(10000));
    }

    public static void main(String[] args) {
        if (!nearlyEqual(computeF(1), 0.5, 1e-15)) {
            System.out.println("Validation failed");
            return;
        }
        if (!nearlyEqual(computeF(4), 0.25, 1e-15)) {
            System.out.println("Validation failed");
            return;
        }
        if (!nearlyEqual(computeF(10), 19.0 / 144.0, 1e-15)) {
            System.out.println("Validation failed");
            return;
        }

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