#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "logs (example 3.8)";

double f_if(float n) {
        float r34672 = n;
        float r34673 = 1.0f;
        float r34674 = r34672 + r34673;
        float r34675 = log(r34674);
        float r34676 = r34674 * r34675;
        float r34677 = log(r34672);
        float r34678 = r34672 * r34677;
        float r34679 = r34676 - r34678;
        float r34680 = r34679 - r34673;
        return r34680;
}

double f_id(double n) {
        double r34681 = n;
        double r34682 = 1.0;
        double r34683 = r34681 + r34682;
        double r34684 = log(r34683);
        double r34685 = r34683 * r34684;
        double r34686 = log(r34681);
        double r34687 = r34681 * r34686;
        double r34688 = r34685 - r34687;
        double r34689 = r34688 - r34682;
        return r34689;
}


double f_of(float n) {
        float r34690 = n;
        float r34691 = 1.0f;
        float r34692 = r34690 + r34691;
        float r34693 = log(r34692);
        float r34694 = r34693 * r34692;
        float r34695 = log(r34690);
        float r34696 = -r34690;
        float r34697 = r34695 * r34696;
        float r34698 = r34697 + r34691;
        float r34699 = r34694 - r34698;
        return r34699;
}

double f_od(double n) {
        double r34700 = n;
        double r34701 = 1.0;
        double r34702 = r34700 + r34701;
        double r34703 = log(r34702);
        double r34704 = r34703 * r34702;
        double r34705 = log(r34700);
        double r34706 = -r34700;
        double r34707 = r34705 * r34706;
        double r34708 = r34707 + r34701;
        double r34709 = r34704 - r34708;
        return r34709;
}

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 r34710, r34711, r34712, r34713, r34714, r34715, r34716, r34717, r34718;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r34710);
        mpfr_init_set_str(r34711, "1", 10, MPFR_RNDN);
        mpfr_init(r34712);
        mpfr_init(r34713);
        mpfr_init(r34714);
        mpfr_init(r34715);
        mpfr_init(r34716);
        mpfr_init(r34717);
        mpfr_init(r34718);
}

double f_im(double n) {
        mpfr_set_d(r34710, n, MPFR_RNDN);
        ;
        mpfr_add(r34712, r34710, r34711, MPFR_RNDN);
        mpfr_log(r34713, r34712, MPFR_RNDN);
        mpfr_mul(r34714, r34712, r34713, MPFR_RNDN);
        mpfr_log(r34715, r34710, MPFR_RNDN);
        mpfr_mul(r34716, r34710, r34715, MPFR_RNDN);
        mpfr_sub(r34717, r34714, r34716, MPFR_RNDN);
        mpfr_sub(r34718, r34717, r34711, MPFR_RNDN);
        return mpfr_get_d(r34718, MPFR_RNDN);
}

static mpfr_t r34719, r34720, r34721, r34722, r34723, r34724, r34725, r34726, r34727, r34728;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r34719);
        mpfr_init_set_str(r34720, "1", 10, MPFR_RNDN);
        mpfr_init(r34721);
        mpfr_init(r34722);
        mpfr_init(r34723);
        mpfr_init(r34724);
        mpfr_init(r34725);
        mpfr_init(r34726);
        mpfr_init(r34727);
        mpfr_init(r34728);
}

double f_fm(double n) {
        mpfr_set_d(r34719, n, MPFR_RNDN);
        ;
        mpfr_add(r34721, r34719, r34720, MPFR_RNDN);
        mpfr_log(r34722, r34721, MPFR_RNDN);
        mpfr_mul(r34723, r34722, r34721, MPFR_RNDN);
        mpfr_log(r34724, r34719, MPFR_RNDN);
        mpfr_neg(r34725, r34719, MPFR_RNDN);
        mpfr_mul(r34726, r34724, r34725, MPFR_RNDN);
        mpfr_add(r34727, r34726, r34720, MPFR_RNDN);
        mpfr_sub(r34728, r34723, r34727, MPFR_RNDN);
        return mpfr_get_d(r34728, MPFR_RNDN);
}

static mpfr_t r34729, r34730, r34731, r34732, r34733, r34734, r34735, r34736, r34737, r34738;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r34729);
        mpfr_init_set_str(r34730, "1", 10, MPFR_RNDN);
        mpfr_init(r34731);
        mpfr_init(r34732);
        mpfr_init(r34733);
        mpfr_init(r34734);
        mpfr_init(r34735);
        mpfr_init(r34736);
        mpfr_init(r34737);
        mpfr_init(r34738);
}

double f_dm(double n) {
        mpfr_set_d(r34729, n, MPFR_RNDN);
        ;
        mpfr_add(r34731, r34729, r34730, MPFR_RNDN);
        mpfr_log(r34732, r34731, MPFR_RNDN);
        mpfr_mul(r34733, r34732, r34731, MPFR_RNDN);
        mpfr_log(r34734, r34729, MPFR_RNDN);
        mpfr_neg(r34735, r34729, MPFR_RNDN);
        mpfr_mul(r34736, r34734, r34735, MPFR_RNDN);
        mpfr_add(r34737, r34736, r34730, MPFR_RNDN);
        mpfr_sub(r34738, r34733, r34737, MPFR_RNDN);
        return mpfr_get_d(r34738, MPFR_RNDN);
}

