#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 r4874732 = N;
        float r4874733 = 1.0f;
        float r4874734 = r4874732 + r4874733;
        float r4874735 = log(r4874734);
        float r4874736 = log(r4874732);
        float r4874737 = r4874735 - r4874736;
        return r4874737;
}

double f_id(double N) {
        double r4874738 = N;
        double r4874739 = 1.0;
        double r4874740 = r4874738 + r4874739;
        double r4874741 = log(r4874740);
        double r4874742 = log(r4874738);
        double r4874743 = r4874741 - r4874742;
        return r4874743;
}


double f_of(float N) {
        float r4874744 = N;
        float r4874745 = 33880259934.72748f;
        bool r4874746 = r4874744 <= r4874745;
        float r4874747 = 1.0f;
        float r4874748 = r4874744 + r4874747;
        float r4874749 = r4874748 / r4874744;
        float r4874750 = log(r4874749);
        float r4874751 = r4874747 / r4874744;
        float r4874752 = 0.3333333333333333f;
        float r4874753 = r4874752 / r4874744;
        float r4874754 = 0.5f;
        float r4874755 = r4874753 - r4874754;
        float r4874756 = r4874744 * r4874744;
        float r4874757 = r4874755 / r4874756;
        float r4874758 = r4874751 + r4874757;
        float r4874759 = r4874746 ? r4874750 : r4874758;
        return r4874759;
}

double f_od(double N) {
        double r4874760 = N;
        double r4874761 = 33880259934.72748;
        bool r4874762 = r4874760 <= r4874761;
        double r4874763 = 1.0;
        double r4874764 = r4874760 + r4874763;
        double r4874765 = r4874764 / r4874760;
        double r4874766 = log(r4874765);
        double r4874767 = r4874763 / r4874760;
        double r4874768 = 0.3333333333333333;
        double r4874769 = r4874768 / r4874760;
        double r4874770 = 0.5;
        double r4874771 = r4874769 - r4874770;
        double r4874772 = r4874760 * r4874760;
        double r4874773 = r4874771 / r4874772;
        double r4874774 = r4874767 + r4874773;
        double r4874775 = r4874762 ? r4874766 : r4874774;
        return r4874775;
}

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 r4874776, r4874777, r4874778, r4874779, r4874780, r4874781;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4874776);
        mpfr_init_set_str(r4874777, "1", 10, MPFR_RNDN);
        mpfr_init(r4874778);
        mpfr_init(r4874779);
        mpfr_init(r4874780);
        mpfr_init(r4874781);
}

double f_im(double N) {
        mpfr_set_d(r4874776, N, MPFR_RNDN);
        ;
        mpfr_add(r4874778, r4874776, r4874777, MPFR_RNDN);
        mpfr_log(r4874779, r4874778, MPFR_RNDN);
        mpfr_log(r4874780, r4874776, MPFR_RNDN);
        mpfr_sub(r4874781, r4874779, r4874780, MPFR_RNDN);
        return mpfr_get_d(r4874781, MPFR_RNDN);
}

static mpfr_t r4874782, r4874783, r4874784, r4874785, r4874786, r4874787, r4874788, r4874789, r4874790, r4874791, r4874792, r4874793, r4874794, r4874795, r4874796, r4874797;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4874782);
        mpfr_init_set_str(r4874783, "33880259934.72748", 10, MPFR_RNDN);
        mpfr_init(r4874784);
        mpfr_init_set_str(r4874785, "1", 10, MPFR_RNDN);
        mpfr_init(r4874786);
        mpfr_init(r4874787);
        mpfr_init(r4874788);
        mpfr_init(r4874789);
        mpfr_init_set_str(r4874790, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4874791);
        mpfr_init_set_str(r4874792, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4874793);
        mpfr_init(r4874794);
        mpfr_init(r4874795);
        mpfr_init(r4874796);
        mpfr_init(r4874797);
}

double f_fm(double N) {
        mpfr_set_d(r4874782, N, MPFR_RNDN);
        ;
        mpfr_set_si(r4874784, mpfr_cmp(r4874782, r4874783) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r4874786, r4874782, r4874785, MPFR_RNDN);
        mpfr_div(r4874787, r4874786, r4874782, MPFR_RNDN);
        mpfr_log(r4874788, r4874787, MPFR_RNDN);
        mpfr_div(r4874789, r4874785, r4874782, MPFR_RNDN);
        ;
        mpfr_div(r4874791, r4874790, r4874782, MPFR_RNDN);
        ;
        mpfr_sub(r4874793, r4874791, r4874792, MPFR_RNDN);
        mpfr_mul(r4874794, r4874782, r4874782, MPFR_RNDN);
        mpfr_div(r4874795, r4874793, r4874794, MPFR_RNDN);
        mpfr_add(r4874796, r4874789, r4874795, MPFR_RNDN);
        if (mpfr_get_si(r4874784, MPFR_RNDN)) { mpfr_set(r4874797, r4874788, MPFR_RNDN); } else { mpfr_set(r4874797, r4874796, MPFR_RNDN); };
        return mpfr_get_d(r4874797, MPFR_RNDN);
}

static mpfr_t r4874798, r4874799, r4874800, r4874801, r4874802, r4874803, r4874804, r4874805, r4874806, r4874807, r4874808, r4874809, r4874810, r4874811, r4874812, r4874813;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4874798);
        mpfr_init_set_str(r4874799, "33880259934.72748", 10, MPFR_RNDN);
        mpfr_init(r4874800);
        mpfr_init_set_str(r4874801, "1", 10, MPFR_RNDN);
        mpfr_init(r4874802);
        mpfr_init(r4874803);
        mpfr_init(r4874804);
        mpfr_init(r4874805);
        mpfr_init_set_str(r4874806, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4874807);
        mpfr_init_set_str(r4874808, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4874809);
        mpfr_init(r4874810);
        mpfr_init(r4874811);
        mpfr_init(r4874812);
        mpfr_init(r4874813);
}

double f_dm(double N) {
        mpfr_set_d(r4874798, N, MPFR_RNDN);
        ;
        mpfr_set_si(r4874800, mpfr_cmp(r4874798, r4874799) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r4874802, r4874798, r4874801, MPFR_RNDN);
        mpfr_div(r4874803, r4874802, r4874798, MPFR_RNDN);
        mpfr_log(r4874804, r4874803, MPFR_RNDN);
        mpfr_div(r4874805, r4874801, r4874798, MPFR_RNDN);
        ;
        mpfr_div(r4874807, r4874806, r4874798, MPFR_RNDN);
        ;
        mpfr_sub(r4874809, r4874807, r4874808, MPFR_RNDN);
        mpfr_mul(r4874810, r4874798, r4874798, MPFR_RNDN);
        mpfr_div(r4874811, r4874809, r4874810, MPFR_RNDN);
        mpfr_add(r4874812, r4874805, r4874811, MPFR_RNDN);
        if (mpfr_get_si(r4874800, MPFR_RNDN)) { mpfr_set(r4874813, r4874804, MPFR_RNDN); } else { mpfr_set(r4874813, r4874812, MPFR_RNDN); };
        return mpfr_get_d(r4874813, MPFR_RNDN);
}

