#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 r26606 = n;
        float r26607 = 1;
        float r26608 = r26606 + r26607;
        float r26609 = log(r26608);
        float r26610 = r26608 * r26609;
        float r26611 = log(r26606);
        float r26612 = r26606 * r26611;
        float r26613 = r26610 - r26612;
        float r26614 = r26613 - r26607;
        return r26614;
}

double f_id(double n) {
        double r26615 = n;
        double r26616 = 1;
        double r26617 = r26615 + r26616;
        double r26618 = log(r26617);
        double r26619 = r26617 * r26618;
        double r26620 = log(r26615);
        double r26621 = r26615 * r26620;
        double r26622 = r26619 - r26621;
        double r26623 = r26622 - r26616;
        return r26623;
}


double f_of(float n) {
        float r26624 = n;
        float r26625 = log(r26624);
        float r26626 = 1/6;
        float r26627 = r26626 / r26624;
        float r26628 = r26627 / r26624;
        float r26629 = r26625 - r26628;
        float r26630 = 1/2;
        float r26631 = r26630 / r26624;
        float r26632 = r26629 + r26631;
        return r26632;
}

double f_od(double n) {
        double r26633 = n;
        double r26634 = log(r26633);
        double r26635 = 1/6;
        double r26636 = r26635 / r26633;
        double r26637 = r26636 / r26633;
        double r26638 = r26634 - r26637;
        double r26639 = 1/2;
        double r26640 = r26639 / r26633;
        double r26641 = r26638 + r26640;
        return r26641;
}

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 r26642, r26643, r26644, r26645, r26646, r26647, r26648, r26649, r26650;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26642);
        mpfr_init_set_str(r26643, "1", 10, MPFR_RNDN);
        mpfr_init(r26644);
        mpfr_init(r26645);
        mpfr_init(r26646);
        mpfr_init(r26647);
        mpfr_init(r26648);
        mpfr_init(r26649);
        mpfr_init(r26650);
}

double f_im(double n) {
        mpfr_set_d(r26642, n, MPFR_RNDN);
        ;
        mpfr_add(r26644, r26642, r26643, MPFR_RNDN);
        mpfr_log(r26645, r26644, MPFR_RNDN);
        mpfr_mul(r26646, r26644, r26645, MPFR_RNDN);
        mpfr_log(r26647, r26642, MPFR_RNDN);
        mpfr_mul(r26648, r26642, r26647, MPFR_RNDN);
        mpfr_sub(r26649, r26646, r26648, MPFR_RNDN);
        mpfr_sub(r26650, r26649, r26643, MPFR_RNDN);
        return mpfr_get_d(r26650, MPFR_RNDN);
}

static mpfr_t r26651, r26652, r26653, r26654, r26655, r26656, r26657, r26658, r26659;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26651);
        mpfr_init(r26652);
        mpfr_init_set_str(r26653, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26654);
        mpfr_init(r26655);
        mpfr_init(r26656);
        mpfr_init_set_str(r26657, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26658);
        mpfr_init(r26659);
}

double f_fm(double n) {
        mpfr_set_d(r26651, n, MPFR_RNDN);
        mpfr_log(r26652, r26651, MPFR_RNDN);
        ;
        mpfr_div(r26654, r26653, r26651, MPFR_RNDN);
        mpfr_div(r26655, r26654, r26651, MPFR_RNDN);
        mpfr_sub(r26656, r26652, r26655, MPFR_RNDN);
        ;
        mpfr_div(r26658, r26657, r26651, MPFR_RNDN);
        mpfr_add(r26659, r26656, r26658, MPFR_RNDN);
        return mpfr_get_d(r26659, MPFR_RNDN);
}

static mpfr_t r26660, r26661, r26662, r26663, r26664, r26665, r26666, r26667, r26668;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26660);
        mpfr_init(r26661);
        mpfr_init_set_str(r26662, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26663);
        mpfr_init(r26664);
        mpfr_init(r26665);
        mpfr_init_set_str(r26666, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26667);
        mpfr_init(r26668);
}

double f_dm(double n) {
        mpfr_set_d(r26660, n, MPFR_RNDN);
        mpfr_log(r26661, r26660, MPFR_RNDN);
        ;
        mpfr_div(r26663, r26662, r26660, MPFR_RNDN);
        mpfr_div(r26664, r26663, r26660, MPFR_RNDN);
        mpfr_sub(r26665, r26661, r26664, MPFR_RNDN);
        ;
        mpfr_div(r26667, r26666, r26660, MPFR_RNDN);
        mpfr_add(r26668, r26665, r26667, MPFR_RNDN);
        return mpfr_get_d(r26668, MPFR_RNDN);
}

