#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2log (problem 3.3.6)";

double f_if(float N) {
        float r4415984 = N;
        float r4415985 = 1;
        float r4415986 = r4415984 + r4415985;
        float r4415987 = log(r4415986);
        float r4415988 = log(r4415984);
        float r4415989 = r4415987 - r4415988;
        return r4415989;
}

double f_id(double N) {
        double r4415990 = N;
        double r4415991 = 1;
        double r4415992 = r4415990 + r4415991;
        double r4415993 = log(r4415992);
        double r4415994 = log(r4415990);
        double r4415995 = r4415993 - r4415994;
        return r4415995;
}


double f_of(float N) {
        float r4415996 = N;
        float r4415997 = 41773.77440307341;
        bool r4415998 = r4415996 <= r4415997;
        float r4415999 = 1;
        float r4416000 = r4415996 + r4415999;
        float r4416001 = r4416000 / r4415996;
        float r4416002 = log(r4416001);
        float r4416003 = r4415999 / r4415996;
        float r4416004 = 1/3;
        float r4416005 = r4416004 / r4415996;
        float r4416006 = 1/2;
        float r4416007 = r4416005 - r4416006;
        float r4416008 = r4415996 * r4415996;
        float r4416009 = r4416007 / r4416008;
        float r4416010 = r4416003 + r4416009;
        float r4416011 = r4415998 ? r4416002 : r4416010;
        return r4416011;
}

double f_od(double N) {
        double r4416012 = N;
        double r4416013 = 41773.77440307341;
        bool r4416014 = r4416012 <= r4416013;
        double r4416015 = 1;
        double r4416016 = r4416012 + r4416015;
        double r4416017 = r4416016 / r4416012;
        double r4416018 = log(r4416017);
        double r4416019 = r4416015 / r4416012;
        double r4416020 = 1/3;
        double r4416021 = r4416020 / r4416012;
        double r4416022 = 1/2;
        double r4416023 = r4416021 - r4416022;
        double r4416024 = r4416012 * r4416012;
        double r4416025 = r4416023 / r4416024;
        double r4416026 = r4416019 + r4416025;
        double r4416027 = r4416014 ? r4416018 : r4416026;
        return r4416027;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r4416028, r4416029, r4416030, r4416031, r4416032, r4416033;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4416028);
        mpfr_init_set_str(r4416029, "1", 10, MPFR_RNDN);
        mpfr_init(r4416030);
        mpfr_init(r4416031);
        mpfr_init(r4416032);
        mpfr_init(r4416033);
}

double f_im(double N) {
        mpfr_set_d(r4416028, N, MPFR_RNDN);
        ;
        mpfr_add(r4416030, r4416028, r4416029, MPFR_RNDN);
        mpfr_log(r4416031, r4416030, MPFR_RNDN);
        mpfr_log(r4416032, r4416028, MPFR_RNDN);
        mpfr_sub(r4416033, r4416031, r4416032, MPFR_RNDN);
        return mpfr_get_d(r4416033, MPFR_RNDN);
}

static mpfr_t r4416034, r4416035, r4416036, r4416037, r4416038, r4416039, r4416040, r4416041, r4416042, r4416043, r4416044, r4416045, r4416046, r4416047, r4416048, r4416049;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4416034);
        mpfr_init_set_str(r4416035, "41773.77440307341", 10, MPFR_RNDN);
        mpfr_init(r4416036);
        mpfr_init_set_str(r4416037, "1", 10, MPFR_RNDN);
        mpfr_init(r4416038);
        mpfr_init(r4416039);
        mpfr_init(r4416040);
        mpfr_init(r4416041);
        mpfr_init_set_str(r4416042, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4416043);
        mpfr_init_set_str(r4416044, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4416045);
        mpfr_init(r4416046);
        mpfr_init(r4416047);
        mpfr_init(r4416048);
        mpfr_init(r4416049);
}

double f_fm(double N) {
        mpfr_set_d(r4416034, N, MPFR_RNDN);
        ;
        mpfr_set_si(r4416036, mpfr_cmp(r4416034, r4416035) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r4416038, r4416034, r4416037, MPFR_RNDN);
        mpfr_div(r4416039, r4416038, r4416034, MPFR_RNDN);
        mpfr_log(r4416040, r4416039, MPFR_RNDN);
        mpfr_div(r4416041, r4416037, r4416034, MPFR_RNDN);
        ;
        mpfr_div(r4416043, r4416042, r4416034, MPFR_RNDN);
        ;
        mpfr_sub(r4416045, r4416043, r4416044, MPFR_RNDN);
        mpfr_mul(r4416046, r4416034, r4416034, MPFR_RNDN);
        mpfr_div(r4416047, r4416045, r4416046, MPFR_RNDN);
        mpfr_add(r4416048, r4416041, r4416047, MPFR_RNDN);
        if (mpfr_get_si(r4416036, MPFR_RNDN)) { mpfr_set(r4416049, r4416040, MPFR_RNDN); } else { mpfr_set(r4416049, r4416048, MPFR_RNDN); };
        return mpfr_get_d(r4416049, MPFR_RNDN);
}

static mpfr_t r4416050, r4416051, r4416052, r4416053, r4416054, r4416055, r4416056, r4416057, r4416058, r4416059, r4416060, r4416061, r4416062, r4416063, r4416064, r4416065;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4416050);
        mpfr_init_set_str(r4416051, "41773.77440307341", 10, MPFR_RNDN);
        mpfr_init(r4416052);
        mpfr_init_set_str(r4416053, "1", 10, MPFR_RNDN);
        mpfr_init(r4416054);
        mpfr_init(r4416055);
        mpfr_init(r4416056);
        mpfr_init(r4416057);
        mpfr_init_set_str(r4416058, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4416059);
        mpfr_init_set_str(r4416060, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4416061);
        mpfr_init(r4416062);
        mpfr_init(r4416063);
        mpfr_init(r4416064);
        mpfr_init(r4416065);
}

double f_dm(double N) {
        mpfr_set_d(r4416050, N, MPFR_RNDN);
        ;
        mpfr_set_si(r4416052, mpfr_cmp(r4416050, r4416051) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r4416054, r4416050, r4416053, MPFR_RNDN);
        mpfr_div(r4416055, r4416054, r4416050, MPFR_RNDN);
        mpfr_log(r4416056, r4416055, MPFR_RNDN);
        mpfr_div(r4416057, r4416053, r4416050, MPFR_RNDN);
        ;
        mpfr_div(r4416059, r4416058, r4416050, MPFR_RNDN);
        ;
        mpfr_sub(r4416061, r4416059, r4416060, MPFR_RNDN);
        mpfr_mul(r4416062, r4416050, r4416050, MPFR_RNDN);
        mpfr_div(r4416063, r4416061, r4416062, MPFR_RNDN);
        mpfr_add(r4416064, r4416057, r4416063, MPFR_RNDN);
        if (mpfr_get_si(r4416052, MPFR_RNDN)) { mpfr_set(r4416065, r4416056, MPFR_RNDN); } else { mpfr_set(r4416065, r4416064, MPFR_RNDN); };
        return mpfr_get_d(r4416065, MPFR_RNDN);
}

