#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 r37090 = N;
        float r37091 = 1;
        float r37092 = r37090 + r37091;
        float r37093 = log(r37092);
        float r37094 = log(r37090);
        float r37095 = r37093 - r37094;
        return r37095;
}

double f_id(double N) {
        double r37096 = N;
        double r37097 = 1;
        double r37098 = r37096 + r37097;
        double r37099 = log(r37098);
        double r37100 = log(r37096);
        double r37101 = r37099 - r37100;
        return r37101;
}


double f_of(float N) {
        float r37102 = N;
        float r37103 = 3459592.9658002537;
        bool r37104 = r37102 <= r37103;
        float r37105 = 1;
        float r37106 = r37102 + r37105;
        float r37107 = r37106 / r37102;
        float r37108 = log(r37107);
        float r37109 = r37105 / r37102;
        float r37110 = 1/3;
        float r37111 = r37110 / r37102;
        float r37112 = 1/2;
        float r37113 = r37111 - r37112;
        float r37114 = r37102 * r37102;
        float r37115 = r37113 / r37114;
        float r37116 = r37109 + r37115;
        float r37117 = r37104 ? r37108 : r37116;
        return r37117;
}

double f_od(double N) {
        double r37118 = N;
        double r37119 = 3459592.9658002537;
        bool r37120 = r37118 <= r37119;
        double r37121 = 1;
        double r37122 = r37118 + r37121;
        double r37123 = r37122 / r37118;
        double r37124 = log(r37123);
        double r37125 = r37121 / r37118;
        double r37126 = 1/3;
        double r37127 = r37126 / r37118;
        double r37128 = 1/2;
        double r37129 = r37127 - r37128;
        double r37130 = r37118 * r37118;
        double r37131 = r37129 / r37130;
        double r37132 = r37125 + r37131;
        double r37133 = r37120 ? r37124 : r37132;
        return r37133;
}

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 r37134, r37135, r37136, r37137, r37138, r37139;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37134);
        mpfr_init_set_str(r37135, "1", 10, MPFR_RNDN);
        mpfr_init(r37136);
        mpfr_init(r37137);
        mpfr_init(r37138);
        mpfr_init(r37139);
}

double f_im(double N) {
        mpfr_set_d(r37134, N, MPFR_RNDN);
        ;
        mpfr_add(r37136, r37134, r37135, MPFR_RNDN);
        mpfr_log(r37137, r37136, MPFR_RNDN);
        mpfr_log(r37138, r37134, MPFR_RNDN);
        mpfr_sub(r37139, r37137, r37138, MPFR_RNDN);
        return mpfr_get_d(r37139, MPFR_RNDN);
}

static mpfr_t r37140, r37141, r37142, r37143, r37144, r37145, r37146, r37147, r37148, r37149, r37150, r37151, r37152, r37153, r37154, r37155;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37140);
        mpfr_init_set_str(r37141, "3459592.9658002537", 10, MPFR_RNDN);
        mpfr_init(r37142);
        mpfr_init_set_str(r37143, "1", 10, MPFR_RNDN);
        mpfr_init(r37144);
        mpfr_init(r37145);
        mpfr_init(r37146);
        mpfr_init(r37147);
        mpfr_init_set_str(r37148, "1/3", 10, MPFR_RNDN);
        mpfr_init(r37149);
        mpfr_init_set_str(r37150, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37151);
        mpfr_init(r37152);
        mpfr_init(r37153);
        mpfr_init(r37154);
        mpfr_init(r37155);
}

double f_fm(double N) {
        mpfr_set_d(r37140, N, MPFR_RNDN);
        ;
        mpfr_set_si(r37142, mpfr_cmp(r37140, r37141) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r37144, r37140, r37143, MPFR_RNDN);
        mpfr_div(r37145, r37144, r37140, MPFR_RNDN);
        mpfr_log(r37146, r37145, MPFR_RNDN);
        mpfr_div(r37147, r37143, r37140, MPFR_RNDN);
        ;
        mpfr_div(r37149, r37148, r37140, MPFR_RNDN);
        ;
        mpfr_sub(r37151, r37149, r37150, MPFR_RNDN);
        mpfr_mul(r37152, r37140, r37140, MPFR_RNDN);
        mpfr_div(r37153, r37151, r37152, MPFR_RNDN);
        mpfr_add(r37154, r37147, r37153, MPFR_RNDN);
        if (mpfr_get_si(r37142, MPFR_RNDN)) { mpfr_set(r37155, r37146, MPFR_RNDN); } else { mpfr_set(r37155, r37154, MPFR_RNDN); };
        return mpfr_get_d(r37155, MPFR_RNDN);
}

static mpfr_t r37156, r37157, r37158, r37159, r37160, r37161, r37162, r37163, r37164, r37165, r37166, r37167, r37168, r37169, r37170, r37171;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37156);
        mpfr_init_set_str(r37157, "3459592.9658002537", 10, MPFR_RNDN);
        mpfr_init(r37158);
        mpfr_init_set_str(r37159, "1", 10, MPFR_RNDN);
        mpfr_init(r37160);
        mpfr_init(r37161);
        mpfr_init(r37162);
        mpfr_init(r37163);
        mpfr_init_set_str(r37164, "1/3", 10, MPFR_RNDN);
        mpfr_init(r37165);
        mpfr_init_set_str(r37166, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37167);
        mpfr_init(r37168);
        mpfr_init(r37169);
        mpfr_init(r37170);
        mpfr_init(r37171);
}

double f_dm(double N) {
        mpfr_set_d(r37156, N, MPFR_RNDN);
        ;
        mpfr_set_si(r37158, mpfr_cmp(r37156, r37157) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r37160, r37156, r37159, MPFR_RNDN);
        mpfr_div(r37161, r37160, r37156, MPFR_RNDN);
        mpfr_log(r37162, r37161, MPFR_RNDN);
        mpfr_div(r37163, r37159, r37156, MPFR_RNDN);
        ;
        mpfr_div(r37165, r37164, r37156, MPFR_RNDN);
        ;
        mpfr_sub(r37167, r37165, r37166, MPFR_RNDN);
        mpfr_mul(r37168, r37156, r37156, MPFR_RNDN);
        mpfr_div(r37169, r37167, r37168, MPFR_RNDN);
        mpfr_add(r37170, r37163, r37169, MPFR_RNDN);
        if (mpfr_get_si(r37158, MPFR_RNDN)) { mpfr_set(r37171, r37162, MPFR_RNDN); } else { mpfr_set(r37171, r37170, MPFR_RNDN); };
        return mpfr_get_d(r37171, MPFR_RNDN);
}

