#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 r26401 = n;
        float r26402 = 1;
        float r26403 = r26401 + r26402;
        float r26404 = log(r26403);
        float r26405 = r26403 * r26404;
        float r26406 = log(r26401);
        float r26407 = r26401 * r26406;
        float r26408 = r26405 - r26407;
        float r26409 = r26408 - r26402;
        return r26409;
}

double f_id(double n) {
        double r26410 = n;
        double r26411 = 1;
        double r26412 = r26410 + r26411;
        double r26413 = log(r26412);
        double r26414 = r26412 * r26413;
        double r26415 = log(r26410);
        double r26416 = r26410 * r26415;
        double r26417 = r26414 - r26416;
        double r26418 = r26417 - r26411;
        return r26418;
}


double f_of(float n) {
        float r26419 = n;
        float r26420 = log(r26419);
        float r26421 = 1/6;
        float r26422 = r26421 / r26419;
        float r26423 = r26422 / r26419;
        float r26424 = r26420 - r26423;
        float r26425 = 1/2;
        float r26426 = r26425 / r26419;
        float r26427 = r26424 + r26426;
        return r26427;
}

double f_od(double n) {
        double r26428 = n;
        double r26429 = log(r26428);
        double r26430 = 1/6;
        double r26431 = r26430 / r26428;
        double r26432 = r26431 / r26428;
        double r26433 = r26429 - r26432;
        double r26434 = 1/2;
        double r26435 = r26434 / r26428;
        double r26436 = r26433 + r26435;
        return r26436;
}

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 r26437, r26438, r26439, r26440, r26441, r26442, r26443, r26444, r26445;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26437);
        mpfr_init_set_str(r26438, "1", 10, MPFR_RNDN);
        mpfr_init(r26439);
        mpfr_init(r26440);
        mpfr_init(r26441);
        mpfr_init(r26442);
        mpfr_init(r26443);
        mpfr_init(r26444);
        mpfr_init(r26445);
}

double f_im(double n) {
        mpfr_set_d(r26437, n, MPFR_RNDN);
        ;
        mpfr_add(r26439, r26437, r26438, MPFR_RNDN);
        mpfr_log(r26440, r26439, MPFR_RNDN);
        mpfr_mul(r26441, r26439, r26440, MPFR_RNDN);
        mpfr_log(r26442, r26437, MPFR_RNDN);
        mpfr_mul(r26443, r26437, r26442, MPFR_RNDN);
        mpfr_sub(r26444, r26441, r26443, MPFR_RNDN);
        mpfr_sub(r26445, r26444, r26438, MPFR_RNDN);
        return mpfr_get_d(r26445, MPFR_RNDN);
}

static mpfr_t r26446, r26447, r26448, r26449, r26450, r26451, r26452, r26453, r26454;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26446);
        mpfr_init(r26447);
        mpfr_init_set_str(r26448, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26449);
        mpfr_init(r26450);
        mpfr_init(r26451);
        mpfr_init_set_str(r26452, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26453);
        mpfr_init(r26454);
}

double f_fm(double n) {
        mpfr_set_d(r26446, n, MPFR_RNDN);
        mpfr_log(r26447, r26446, MPFR_RNDN);
        ;
        mpfr_div(r26449, r26448, r26446, MPFR_RNDN);
        mpfr_div(r26450, r26449, r26446, MPFR_RNDN);
        mpfr_sub(r26451, r26447, r26450, MPFR_RNDN);
        ;
        mpfr_div(r26453, r26452, r26446, MPFR_RNDN);
        mpfr_add(r26454, r26451, r26453, MPFR_RNDN);
        return mpfr_get_d(r26454, MPFR_RNDN);
}

static mpfr_t r26455, r26456, r26457, r26458, r26459, r26460, r26461, r26462, r26463;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26455);
        mpfr_init(r26456);
        mpfr_init_set_str(r26457, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26458);
        mpfr_init(r26459);
        mpfr_init(r26460);
        mpfr_init_set_str(r26461, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26462);
        mpfr_init(r26463);
}

double f_dm(double n) {
        mpfr_set_d(r26455, n, MPFR_RNDN);
        mpfr_log(r26456, r26455, MPFR_RNDN);
        ;
        mpfr_div(r26458, r26457, r26455, MPFR_RNDN);
        mpfr_div(r26459, r26458, r26455, MPFR_RNDN);
        mpfr_sub(r26460, r26456, r26459, MPFR_RNDN);
        ;
        mpfr_div(r26462, r26461, r26455, MPFR_RNDN);
        mpfr_add(r26463, r26460, r26462, MPFR_RNDN);
        return mpfr_get_d(r26463, MPFR_RNDN);
}

