#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 r26387 = n;
        float r26388 = 1;
        float r26389 = r26387 + r26388;
        float r26390 = log(r26389);
        float r26391 = r26389 * r26390;
        float r26392 = log(r26387);
        float r26393 = r26387 * r26392;
        float r26394 = r26391 - r26393;
        float r26395 = r26394 - r26388;
        return r26395;
}

double f_id(double n) {
        double r26396 = n;
        double r26397 = 1;
        double r26398 = r26396 + r26397;
        double r26399 = log(r26398);
        double r26400 = r26398 * r26399;
        double r26401 = log(r26396);
        double r26402 = r26396 * r26401;
        double r26403 = r26400 - r26402;
        double r26404 = r26403 - r26397;
        return r26404;
}


double f_of(float n) {
        float r26405 = n;
        float r26406 = log(r26405);
        float r26407 = 1/6;
        float r26408 = r26407 / r26405;
        float r26409 = r26408 / r26405;
        float r26410 = r26406 - r26409;
        float r26411 = 1/2;
        float r26412 = r26411 / r26405;
        float r26413 = r26410 + r26412;
        return r26413;
}

double f_od(double n) {
        double r26414 = n;
        double r26415 = log(r26414);
        double r26416 = 1/6;
        double r26417 = r26416 / r26414;
        double r26418 = r26417 / r26414;
        double r26419 = r26415 - r26418;
        double r26420 = 1/2;
        double r26421 = r26420 / r26414;
        double r26422 = r26419 + r26421;
        return r26422;
}

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 r26423, r26424, r26425, r26426, r26427, r26428, r26429, r26430, r26431;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26423);
        mpfr_init_set_str(r26424, "1", 10, MPFR_RNDN);
        mpfr_init(r26425);
        mpfr_init(r26426);
        mpfr_init(r26427);
        mpfr_init(r26428);
        mpfr_init(r26429);
        mpfr_init(r26430);
        mpfr_init(r26431);
}

double f_im(double n) {
        mpfr_set_d(r26423, n, MPFR_RNDN);
        ;
        mpfr_add(r26425, r26423, r26424, MPFR_RNDN);
        mpfr_log(r26426, r26425, MPFR_RNDN);
        mpfr_mul(r26427, r26425, r26426, MPFR_RNDN);
        mpfr_log(r26428, r26423, MPFR_RNDN);
        mpfr_mul(r26429, r26423, r26428, MPFR_RNDN);
        mpfr_sub(r26430, r26427, r26429, MPFR_RNDN);
        mpfr_sub(r26431, r26430, r26424, MPFR_RNDN);
        return mpfr_get_d(r26431, MPFR_RNDN);
}

static mpfr_t r26432, r26433, r26434, r26435, r26436, r26437, r26438, r26439, r26440;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26432);
        mpfr_init(r26433);
        mpfr_init_set_str(r26434, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26435);
        mpfr_init(r26436);
        mpfr_init(r26437);
        mpfr_init_set_str(r26438, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26439);
        mpfr_init(r26440);
}

double f_fm(double n) {
        mpfr_set_d(r26432, n, MPFR_RNDN);
        mpfr_log(r26433, r26432, MPFR_RNDN);
        ;
        mpfr_div(r26435, r26434, r26432, MPFR_RNDN);
        mpfr_div(r26436, r26435, r26432, MPFR_RNDN);
        mpfr_sub(r26437, r26433, r26436, MPFR_RNDN);
        ;
        mpfr_div(r26439, r26438, r26432, MPFR_RNDN);
        mpfr_add(r26440, r26437, r26439, MPFR_RNDN);
        return mpfr_get_d(r26440, MPFR_RNDN);
}

static mpfr_t r26441, r26442, r26443, r26444, r26445, r26446, r26447, r26448, r26449;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26441);
        mpfr_init(r26442);
        mpfr_init_set_str(r26443, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26444);
        mpfr_init(r26445);
        mpfr_init(r26446);
        mpfr_init_set_str(r26447, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26448);
        mpfr_init(r26449);
}

double f_dm(double n) {
        mpfr_set_d(r26441, n, MPFR_RNDN);
        mpfr_log(r26442, r26441, MPFR_RNDN);
        ;
        mpfr_div(r26444, r26443, r26441, MPFR_RNDN);
        mpfr_div(r26445, r26444, r26441, MPFR_RNDN);
        mpfr_sub(r26446, r26442, r26445, MPFR_RNDN);
        ;
        mpfr_div(r26448, r26447, r26441, MPFR_RNDN);
        mpfr_add(r26449, r26446, r26448, MPFR_RNDN);
        return mpfr_get_d(r26449, MPFR_RNDN);
}

