#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 r10495 = n;
        float r10496 = 1;
        float r10497 = r10495 + r10496;
        float r10498 = log(r10497);
        float r10499 = r10497 * r10498;
        float r10500 = log(r10495);
        float r10501 = r10495 * r10500;
        float r10502 = r10499 - r10501;
        float r10503 = r10502 - r10496;
        return r10503;
}

double f_id(double n) {
        double r10504 = n;
        double r10505 = 1;
        double r10506 = r10504 + r10505;
        double r10507 = log(r10506);
        double r10508 = r10506 * r10507;
        double r10509 = log(r10504);
        double r10510 = r10504 * r10509;
        double r10511 = r10508 - r10510;
        double r10512 = r10511 - r10505;
        return r10512;
}


double f_of(float n) {
        float r10513 = 1;
        float r10514 = n;
        float r10515 = r10513 / r10514;
        float r10516 = 1/3;
        float r10517 = r10516 / r10514;
        float r10518 = 1/2;
        float r10519 = r10517 - r10518;
        float r10520 = r10515 * r10519;
        float r10521 = log1p(r10514);
        float r10522 = r10521 - r10513;
        float r10523 = r10513 + r10522;
        float r10524 = r10520 + r10523;
        return r10524;
}

double f_od(double n) {
        double r10525 = 1;
        double r10526 = n;
        double r10527 = r10525 / r10526;
        double r10528 = 1/3;
        double r10529 = r10528 / r10526;
        double r10530 = 1/2;
        double r10531 = r10529 - r10530;
        double r10532 = r10527 * r10531;
        double r10533 = log1p(r10526);
        double r10534 = r10533 - r10525;
        double r10535 = r10525 + r10534;
        double r10536 = r10532 + r10535;
        return r10536;
}

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 r10537, r10538, r10539, r10540, r10541, r10542, r10543, r10544, r10545;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10537);
        mpfr_init_set_str(r10538, "1", 10, MPFR_RNDN);
        mpfr_init(r10539);
        mpfr_init(r10540);
        mpfr_init(r10541);
        mpfr_init(r10542);
        mpfr_init(r10543);
        mpfr_init(r10544);
        mpfr_init(r10545);
}

double f_im(double n) {
        mpfr_set_d(r10537, n, MPFR_RNDN);
        ;
        mpfr_add(r10539, r10537, r10538, MPFR_RNDN);
        mpfr_log(r10540, r10539, MPFR_RNDN);
        mpfr_mul(r10541, r10539, r10540, MPFR_RNDN);
        mpfr_log(r10542, r10537, MPFR_RNDN);
        mpfr_mul(r10543, r10537, r10542, MPFR_RNDN);
        mpfr_sub(r10544, r10541, r10543, MPFR_RNDN);
        mpfr_sub(r10545, r10544, r10538, MPFR_RNDN);
        return mpfr_get_d(r10545, MPFR_RNDN);
}

static mpfr_t r10546, r10547, r10548, r10549, r10550, r10551, r10552, r10553, r10554, r10555, r10556, r10557;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10546, "1", 10, MPFR_RNDN);
        mpfr_init(r10547);
        mpfr_init(r10548);
        mpfr_init_set_str(r10549, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10550);
        mpfr_init_set_str(r10551, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10552);
        mpfr_init(r10553);
        mpfr_init(r10554);
        mpfr_init(r10555);
        mpfr_init(r10556);
        mpfr_init(r10557);
}

double f_fm(double n) {
        ;
        mpfr_set_d(r10547, n, MPFR_RNDN);
        mpfr_div(r10548, r10546, r10547, MPFR_RNDN);
        ;
        mpfr_div(r10550, r10549, r10547, MPFR_RNDN);
        ;
        mpfr_sub(r10552, r10550, r10551, MPFR_RNDN);
        mpfr_mul(r10553, r10548, r10552, MPFR_RNDN);
        mpfr_log1p(r10554, r10547, MPFR_RNDN);
        mpfr_sub(r10555, r10554, r10546, MPFR_RNDN);
        mpfr_add(r10556, r10546, r10555, MPFR_RNDN);
        mpfr_add(r10557, r10553, r10556, MPFR_RNDN);
        return mpfr_get_d(r10557, MPFR_RNDN);
}

static mpfr_t r10558, r10559, r10560, r10561, r10562, r10563, r10564, r10565, r10566, r10567, r10568, r10569;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10558, "1", 10, MPFR_RNDN);
        mpfr_init(r10559);
        mpfr_init(r10560);
        mpfr_init_set_str(r10561, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10562);
        mpfr_init_set_str(r10563, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10564);
        mpfr_init(r10565);
        mpfr_init(r10566);
        mpfr_init(r10567);
        mpfr_init(r10568);
        mpfr_init(r10569);
}

double f_dm(double n) {
        ;
        mpfr_set_d(r10559, n, MPFR_RNDN);
        mpfr_div(r10560, r10558, r10559, MPFR_RNDN);
        ;
        mpfr_div(r10562, r10561, r10559, MPFR_RNDN);
        ;
        mpfr_sub(r10564, r10562, r10563, MPFR_RNDN);
        mpfr_mul(r10565, r10560, r10564, MPFR_RNDN);
        mpfr_log1p(r10566, r10559, MPFR_RNDN);
        mpfr_sub(r10567, r10566, r10558, MPFR_RNDN);
        mpfr_add(r10568, r10558, r10567, MPFR_RNDN);
        mpfr_add(r10569, r10565, r10568, MPFR_RNDN);
        return mpfr_get_d(r10569, MPFR_RNDN);
}

