#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 r36660 = N;
        float r36661 = 1;
        float r36662 = r36660 + r36661;
        float r36663 = log(r36662);
        float r36664 = log(r36660);
        float r36665 = r36663 - r36664;
        return r36665;
}

double f_id(double N) {
        double r36666 = N;
        double r36667 = 1;
        double r36668 = r36666 + r36667;
        double r36669 = log(r36668);
        double r36670 = log(r36666);
        double r36671 = r36669 - r36670;
        return r36671;
}


double f_of(float N) {
        float r36672 = N;
        float r36673 = 7531.5475611680995;
        bool r36674 = r36672 <= r36673;
        float r36675 = 1;
        float r36676 = r36672 + r36675;
        float r36677 = r36676 / r36672;
        float r36678 = log(r36677);
        float r36679 = r36675 / r36672;
        float r36680 = 1/3;
        float r36681 = r36680 / r36672;
        float r36682 = 1/2;
        float r36683 = r36681 - r36682;
        float r36684 = r36672 * r36672;
        float r36685 = r36683 / r36684;
        float r36686 = r36679 + r36685;
        float r36687 = r36674 ? r36678 : r36686;
        return r36687;
}

double f_od(double N) {
        double r36688 = N;
        double r36689 = 7531.5475611680995;
        bool r36690 = r36688 <= r36689;
        double r36691 = 1;
        double r36692 = r36688 + r36691;
        double r36693 = r36692 / r36688;
        double r36694 = log(r36693);
        double r36695 = r36691 / r36688;
        double r36696 = 1/3;
        double r36697 = r36696 / r36688;
        double r36698 = 1/2;
        double r36699 = r36697 - r36698;
        double r36700 = r36688 * r36688;
        double r36701 = r36699 / r36700;
        double r36702 = r36695 + r36701;
        double r36703 = r36690 ? r36694 : r36702;
        return r36703;
}

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 r36704, r36705, r36706, r36707, r36708, r36709;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36704);
        mpfr_init_set_str(r36705, "1", 10, MPFR_RNDN);
        mpfr_init(r36706);
        mpfr_init(r36707);
        mpfr_init(r36708);
        mpfr_init(r36709);
}

double f_im(double N) {
        mpfr_set_d(r36704, N, MPFR_RNDN);
        ;
        mpfr_add(r36706, r36704, r36705, MPFR_RNDN);
        mpfr_log(r36707, r36706, MPFR_RNDN);
        mpfr_log(r36708, r36704, MPFR_RNDN);
        mpfr_sub(r36709, r36707, r36708, MPFR_RNDN);
        return mpfr_get_d(r36709, MPFR_RNDN);
}

static mpfr_t r36710, r36711, r36712, r36713, r36714, r36715, r36716, r36717, r36718, r36719, r36720, r36721, r36722, r36723, r36724, r36725;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36710);
        mpfr_init_set_str(r36711, "7531.5475611680995", 10, MPFR_RNDN);
        mpfr_init(r36712);
        mpfr_init_set_str(r36713, "1", 10, MPFR_RNDN);
        mpfr_init(r36714);
        mpfr_init(r36715);
        mpfr_init(r36716);
        mpfr_init(r36717);
        mpfr_init_set_str(r36718, "1/3", 10, MPFR_RNDN);
        mpfr_init(r36719);
        mpfr_init_set_str(r36720, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36721);
        mpfr_init(r36722);
        mpfr_init(r36723);
        mpfr_init(r36724);
        mpfr_init(r36725);
}

double f_fm(double N) {
        mpfr_set_d(r36710, N, MPFR_RNDN);
        ;
        mpfr_set_si(r36712, mpfr_cmp(r36710, r36711) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r36714, r36710, r36713, MPFR_RNDN);
        mpfr_div(r36715, r36714, r36710, MPFR_RNDN);
        mpfr_log(r36716, r36715, MPFR_RNDN);
        mpfr_div(r36717, r36713, r36710, MPFR_RNDN);
        ;
        mpfr_div(r36719, r36718, r36710, MPFR_RNDN);
        ;
        mpfr_sub(r36721, r36719, r36720, MPFR_RNDN);
        mpfr_mul(r36722, r36710, r36710, MPFR_RNDN);
        mpfr_div(r36723, r36721, r36722, MPFR_RNDN);
        mpfr_add(r36724, r36717, r36723, MPFR_RNDN);
        if (mpfr_get_si(r36712, MPFR_RNDN)) { mpfr_set(r36725, r36716, MPFR_RNDN); } else { mpfr_set(r36725, r36724, MPFR_RNDN); };
        return mpfr_get_d(r36725, MPFR_RNDN);
}

static mpfr_t r36726, r36727, r36728, r36729, r36730, r36731, r36732, r36733, r36734, r36735, r36736, r36737, r36738, r36739, r36740, r36741;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36726);
        mpfr_init_set_str(r36727, "7531.5475611680995", 10, MPFR_RNDN);
        mpfr_init(r36728);
        mpfr_init_set_str(r36729, "1", 10, MPFR_RNDN);
        mpfr_init(r36730);
        mpfr_init(r36731);
        mpfr_init(r36732);
        mpfr_init(r36733);
        mpfr_init_set_str(r36734, "1/3", 10, MPFR_RNDN);
        mpfr_init(r36735);
        mpfr_init_set_str(r36736, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36737);
        mpfr_init(r36738);
        mpfr_init(r36739);
        mpfr_init(r36740);
        mpfr_init(r36741);
}

double f_dm(double N) {
        mpfr_set_d(r36726, N, MPFR_RNDN);
        ;
        mpfr_set_si(r36728, mpfr_cmp(r36726, r36727) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r36730, r36726, r36729, MPFR_RNDN);
        mpfr_div(r36731, r36730, r36726, MPFR_RNDN);
        mpfr_log(r36732, r36731, MPFR_RNDN);
        mpfr_div(r36733, r36729, r36726, MPFR_RNDN);
        ;
        mpfr_div(r36735, r36734, r36726, MPFR_RNDN);
        ;
        mpfr_sub(r36737, r36735, r36736, MPFR_RNDN);
        mpfr_mul(r36738, r36726, r36726, MPFR_RNDN);
        mpfr_div(r36739, r36737, r36738, MPFR_RNDN);
        mpfr_add(r36740, r36733, r36739, MPFR_RNDN);
        if (mpfr_get_si(r36728, MPFR_RNDN)) { mpfr_set(r36741, r36732, MPFR_RNDN); } else { mpfr_set(r36741, r36740, MPFR_RNDN); };
        return mpfr_get_d(r36741, MPFR_RNDN);
}

