#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 r37130 = N;
        float r37131 = 1;
        float r37132 = r37130 + r37131;
        float r37133 = log(r37132);
        float r37134 = log(r37130);
        float r37135 = r37133 - r37134;
        return r37135;
}

double f_id(double N) {
        double r37136 = N;
        double r37137 = 1;
        double r37138 = r37136 + r37137;
        double r37139 = log(r37138);
        double r37140 = log(r37136);
        double r37141 = r37139 - r37140;
        return r37141;
}


double f_of(float N) {
        float r37142 = N;
        float r37143 = 7531.5475611680995;
        bool r37144 = r37142 <= r37143;
        float r37145 = 1;
        float r37146 = r37142 + r37145;
        float r37147 = r37146 / r37142;
        float r37148 = log(r37147);
        float r37149 = r37145 / r37142;
        float r37150 = 1/3;
        float r37151 = r37150 / r37142;
        float r37152 = 1/2;
        float r37153 = r37151 - r37152;
        float r37154 = r37142 * r37142;
        float r37155 = r37153 / r37154;
        float r37156 = r37149 + r37155;
        float r37157 = r37144 ? r37148 : r37156;
        return r37157;
}

double f_od(double N) {
        double r37158 = N;
        double r37159 = 7531.5475611680995;
        bool r37160 = r37158 <= r37159;
        double r37161 = 1;
        double r37162 = r37158 + r37161;
        double r37163 = r37162 / r37158;
        double r37164 = log(r37163);
        double r37165 = r37161 / r37158;
        double r37166 = 1/3;
        double r37167 = r37166 / r37158;
        double r37168 = 1/2;
        double r37169 = r37167 - r37168;
        double r37170 = r37158 * r37158;
        double r37171 = r37169 / r37170;
        double r37172 = r37165 + r37171;
        double r37173 = r37160 ? r37164 : r37172;
        return r37173;
}

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 r37174, r37175, r37176, r37177, r37178, r37179;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37174);
        mpfr_init_set_str(r37175, "1", 10, MPFR_RNDN);
        mpfr_init(r37176);
        mpfr_init(r37177);
        mpfr_init(r37178);
        mpfr_init(r37179);
}

double f_im(double N) {
        mpfr_set_d(r37174, N, MPFR_RNDN);
        ;
        mpfr_add(r37176, r37174, r37175, MPFR_RNDN);
        mpfr_log(r37177, r37176, MPFR_RNDN);
        mpfr_log(r37178, r37174, MPFR_RNDN);
        mpfr_sub(r37179, r37177, r37178, MPFR_RNDN);
        return mpfr_get_d(r37179, MPFR_RNDN);
}

static mpfr_t r37180, r37181, r37182, r37183, r37184, r37185, r37186, r37187, r37188, r37189, r37190, r37191, r37192, r37193, r37194, r37195;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37180);
        mpfr_init_set_str(r37181, "7531.5475611680995", 10, MPFR_RNDN);
        mpfr_init(r37182);
        mpfr_init_set_str(r37183, "1", 10, MPFR_RNDN);
        mpfr_init(r37184);
        mpfr_init(r37185);
        mpfr_init(r37186);
        mpfr_init(r37187);
        mpfr_init_set_str(r37188, "1/3", 10, MPFR_RNDN);
        mpfr_init(r37189);
        mpfr_init_set_str(r37190, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37191);
        mpfr_init(r37192);
        mpfr_init(r37193);
        mpfr_init(r37194);
        mpfr_init(r37195);
}

double f_fm(double N) {
        mpfr_set_d(r37180, N, MPFR_RNDN);
        ;
        mpfr_set_si(r37182, mpfr_cmp(r37180, r37181) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r37184, r37180, r37183, MPFR_RNDN);
        mpfr_div(r37185, r37184, r37180, MPFR_RNDN);
        mpfr_log(r37186, r37185, MPFR_RNDN);
        mpfr_div(r37187, r37183, r37180, MPFR_RNDN);
        ;
        mpfr_div(r37189, r37188, r37180, MPFR_RNDN);
        ;
        mpfr_sub(r37191, r37189, r37190, MPFR_RNDN);
        mpfr_mul(r37192, r37180, r37180, MPFR_RNDN);
        mpfr_div(r37193, r37191, r37192, MPFR_RNDN);
        mpfr_add(r37194, r37187, r37193, MPFR_RNDN);
        if (mpfr_get_si(r37182, MPFR_RNDN)) { mpfr_set(r37195, r37186, MPFR_RNDN); } else { mpfr_set(r37195, r37194, MPFR_RNDN); };
        return mpfr_get_d(r37195, MPFR_RNDN);
}

static mpfr_t r37196, r37197, r37198, r37199, r37200, r37201, r37202, r37203, r37204, r37205, r37206, r37207, r37208, r37209, r37210, r37211;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37196);
        mpfr_init_set_str(r37197, "7531.5475611680995", 10, MPFR_RNDN);
        mpfr_init(r37198);
        mpfr_init_set_str(r37199, "1", 10, MPFR_RNDN);
        mpfr_init(r37200);
        mpfr_init(r37201);
        mpfr_init(r37202);
        mpfr_init(r37203);
        mpfr_init_set_str(r37204, "1/3", 10, MPFR_RNDN);
        mpfr_init(r37205);
        mpfr_init_set_str(r37206, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37207);
        mpfr_init(r37208);
        mpfr_init(r37209);
        mpfr_init(r37210);
        mpfr_init(r37211);
}

double f_dm(double N) {
        mpfr_set_d(r37196, N, MPFR_RNDN);
        ;
        mpfr_set_si(r37198, mpfr_cmp(r37196, r37197) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r37200, r37196, r37199, MPFR_RNDN);
        mpfr_div(r37201, r37200, r37196, MPFR_RNDN);
        mpfr_log(r37202, r37201, MPFR_RNDN);
        mpfr_div(r37203, r37199, r37196, MPFR_RNDN);
        ;
        mpfr_div(r37205, r37204, r37196, MPFR_RNDN);
        ;
        mpfr_sub(r37207, r37205, r37206, MPFR_RNDN);
        mpfr_mul(r37208, r37196, r37196, MPFR_RNDN);
        mpfr_div(r37209, r37207, r37208, MPFR_RNDN);
        mpfr_add(r37210, r37203, r37209, MPFR_RNDN);
        if (mpfr_get_si(r37198, MPFR_RNDN)) { mpfr_set(r37211, r37202, MPFR_RNDN); } else { mpfr_set(r37211, r37210, MPFR_RNDN); };
        return mpfr_get_d(r37211, MPFR_RNDN);
}

