#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 r4939685 = N;
        float r4939686 = 1.0f;
        float r4939687 = r4939685 + r4939686;
        float r4939688 = log(r4939687);
        float r4939689 = log(r4939685);
        float r4939690 = r4939688 - r4939689;
        return r4939690;
}

double f_id(double N) {
        double r4939691 = N;
        double r4939692 = 1.0;
        double r4939693 = r4939691 + r4939692;
        double r4939694 = log(r4939693);
        double r4939695 = log(r4939691);
        double r4939696 = r4939694 - r4939695;
        return r4939696;
}


double f_of(float N) {
        float r4939697 = N;
        float r4939698 = 5126479.956417156f;
        bool r4939699 = r4939697 <= r4939698;
        float r4939700 = 1.0f;
        float r4939701 = r4939697 + r4939700;
        float r4939702 = r4939701 / r4939697;
        float r4939703 = log(r4939702);
        float r4939704 = 0.3333333333333333f;
        float r4939705 = r4939704 / r4939697;
        float r4939706 = 0.5f;
        float r4939707 = r4939705 - r4939706;
        float r4939708 = r4939697 * r4939697;
        float r4939709 = r4939707 / r4939708;
        float r4939710 = r4939700 / r4939697;
        float r4939711 = r4939709 + r4939710;
        float r4939712 = r4939699 ? r4939703 : r4939711;
        return r4939712;
}

double f_od(double N) {
        double r4939713 = N;
        double r4939714 = 5126479.956417156;
        bool r4939715 = r4939713 <= r4939714;
        double r4939716 = 1.0;
        double r4939717 = r4939713 + r4939716;
        double r4939718 = r4939717 / r4939713;
        double r4939719 = log(r4939718);
        double r4939720 = 0.3333333333333333;
        double r4939721 = r4939720 / r4939713;
        double r4939722 = 0.5;
        double r4939723 = r4939721 - r4939722;
        double r4939724 = r4939713 * r4939713;
        double r4939725 = r4939723 / r4939724;
        double r4939726 = r4939716 / r4939713;
        double r4939727 = r4939725 + r4939726;
        double r4939728 = r4939715 ? r4939719 : r4939727;
        return r4939728;
}

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 r4939729, r4939730, r4939731, r4939732, r4939733, r4939734;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4939729);
        mpfr_init_set_str(r4939730, "1", 10, MPFR_RNDN);
        mpfr_init(r4939731);
        mpfr_init(r4939732);
        mpfr_init(r4939733);
        mpfr_init(r4939734);
}

double f_im(double N) {
        mpfr_set_d(r4939729, N, MPFR_RNDN);
        ;
        mpfr_add(r4939731, r4939729, r4939730, MPFR_RNDN);
        mpfr_log(r4939732, r4939731, MPFR_RNDN);
        mpfr_log(r4939733, r4939729, MPFR_RNDN);
        mpfr_sub(r4939734, r4939732, r4939733, MPFR_RNDN);
        return mpfr_get_d(r4939734, MPFR_RNDN);
}

static mpfr_t r4939735, r4939736, r4939737, r4939738, r4939739, r4939740, r4939741, r4939742, r4939743, r4939744, r4939745, r4939746, r4939747, r4939748, r4939749, r4939750;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4939735);
        mpfr_init_set_str(r4939736, "5126479.956417156", 10, MPFR_RNDN);
        mpfr_init(r4939737);
        mpfr_init_set_str(r4939738, "1", 10, MPFR_RNDN);
        mpfr_init(r4939739);
        mpfr_init(r4939740);
        mpfr_init(r4939741);
        mpfr_init_set_str(r4939742, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4939743);
        mpfr_init_set_str(r4939744, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4939745);
        mpfr_init(r4939746);
        mpfr_init(r4939747);
        mpfr_init(r4939748);
        mpfr_init(r4939749);
        mpfr_init(r4939750);
}

double f_fm(double N) {
        mpfr_set_d(r4939735, N, MPFR_RNDN);
        ;
        mpfr_set_si(r4939737, mpfr_cmp(r4939735, r4939736) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r4939739, r4939735, r4939738, MPFR_RNDN);
        mpfr_div(r4939740, r4939739, r4939735, MPFR_RNDN);
        mpfr_log(r4939741, r4939740, MPFR_RNDN);
        ;
        mpfr_div(r4939743, r4939742, r4939735, MPFR_RNDN);
        ;
        mpfr_sub(r4939745, r4939743, r4939744, MPFR_RNDN);
        mpfr_sqr(r4939746, r4939735, MPFR_RNDN);
        mpfr_div(r4939747, r4939745, r4939746, MPFR_RNDN);
        mpfr_div(r4939748, r4939738, r4939735, MPFR_RNDN);
        mpfr_add(r4939749, r4939747, r4939748, MPFR_RNDN);
        if (mpfr_get_si(r4939737, MPFR_RNDN)) { mpfr_set(r4939750, r4939741, MPFR_RNDN); } else { mpfr_set(r4939750, r4939749, MPFR_RNDN); };
        return mpfr_get_d(r4939750, MPFR_RNDN);
}

static mpfr_t r4939751, r4939752, r4939753, r4939754, r4939755, r4939756, r4939757, r4939758, r4939759, r4939760, r4939761, r4939762, r4939763, r4939764, r4939765, r4939766;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4939751);
        mpfr_init_set_str(r4939752, "5126479.956417156", 10, MPFR_RNDN);
        mpfr_init(r4939753);
        mpfr_init_set_str(r4939754, "1", 10, MPFR_RNDN);
        mpfr_init(r4939755);
        mpfr_init(r4939756);
        mpfr_init(r4939757);
        mpfr_init_set_str(r4939758, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4939759);
        mpfr_init_set_str(r4939760, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4939761);
        mpfr_init(r4939762);
        mpfr_init(r4939763);
        mpfr_init(r4939764);
        mpfr_init(r4939765);
        mpfr_init(r4939766);
}

double f_dm(double N) {
        mpfr_set_d(r4939751, N, MPFR_RNDN);
        ;
        mpfr_set_si(r4939753, mpfr_cmp(r4939751, r4939752) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r4939755, r4939751, r4939754, MPFR_RNDN);
        mpfr_div(r4939756, r4939755, r4939751, MPFR_RNDN);
        mpfr_log(r4939757, r4939756, MPFR_RNDN);
        ;
        mpfr_div(r4939759, r4939758, r4939751, MPFR_RNDN);
        ;
        mpfr_sub(r4939761, r4939759, r4939760, MPFR_RNDN);
        mpfr_sqr(r4939762, r4939751, MPFR_RNDN);
        mpfr_div(r4939763, r4939761, r4939762, MPFR_RNDN);
        mpfr_div(r4939764, r4939754, r4939751, MPFR_RNDN);
        mpfr_add(r4939765, r4939763, r4939764, MPFR_RNDN);
        if (mpfr_get_si(r4939753, MPFR_RNDN)) { mpfr_set(r4939766, r4939757, MPFR_RNDN); } else { mpfr_set(r4939766, r4939765, MPFR_RNDN); };
        return mpfr_get_d(r4939766, MPFR_RNDN);
}

