#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 r26427 = n;
        float r26428 = 1;
        float r26429 = r26427 + r26428;
        float r26430 = log(r26429);
        float r26431 = r26429 * r26430;
        float r26432 = log(r26427);
        float r26433 = r26427 * r26432;
        float r26434 = r26431 - r26433;
        float r26435 = r26434 - r26428;
        return r26435;
}

double f_id(double n) {
        double r26436 = n;
        double r26437 = 1;
        double r26438 = r26436 + r26437;
        double r26439 = log(r26438);
        double r26440 = r26438 * r26439;
        double r26441 = log(r26436);
        double r26442 = r26436 * r26441;
        double r26443 = r26440 - r26442;
        double r26444 = r26443 - r26437;
        return r26444;
}


double f_of(float n) {
        float r26445 = n;
        float r26446 = log(r26445);
        float r26447 = 1/6;
        float r26448 = r26447 / r26445;
        float r26449 = r26448 / r26445;
        float r26450 = r26446 - r26449;
        float r26451 = 1/2;
        float r26452 = r26451 / r26445;
        float r26453 = r26450 + r26452;
        return r26453;
}

double f_od(double n) {
        double r26454 = n;
        double r26455 = log(r26454);
        double r26456 = 1/6;
        double r26457 = r26456 / r26454;
        double r26458 = r26457 / r26454;
        double r26459 = r26455 - r26458;
        double r26460 = 1/2;
        double r26461 = r26460 / r26454;
        double r26462 = r26459 + r26461;
        return r26462;
}

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 r26463, r26464, r26465, r26466, r26467, r26468, r26469, r26470, r26471;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26463);
        mpfr_init_set_str(r26464, "1", 10, MPFR_RNDN);
        mpfr_init(r26465);
        mpfr_init(r26466);
        mpfr_init(r26467);
        mpfr_init(r26468);
        mpfr_init(r26469);
        mpfr_init(r26470);
        mpfr_init(r26471);
}

double f_im(double n) {
        mpfr_set_d(r26463, n, MPFR_RNDN);
        ;
        mpfr_add(r26465, r26463, r26464, MPFR_RNDN);
        mpfr_log(r26466, r26465, MPFR_RNDN);
        mpfr_mul(r26467, r26465, r26466, MPFR_RNDN);
        mpfr_log(r26468, r26463, MPFR_RNDN);
        mpfr_mul(r26469, r26463, r26468, MPFR_RNDN);
        mpfr_sub(r26470, r26467, r26469, MPFR_RNDN);
        mpfr_sub(r26471, r26470, r26464, MPFR_RNDN);
        return mpfr_get_d(r26471, MPFR_RNDN);
}

static mpfr_t r26472, r26473, r26474, r26475, r26476, r26477, r26478, r26479, r26480;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26472);
        mpfr_init(r26473);
        mpfr_init_set_str(r26474, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26475);
        mpfr_init(r26476);
        mpfr_init(r26477);
        mpfr_init_set_str(r26478, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26479);
        mpfr_init(r26480);
}

double f_fm(double n) {
        mpfr_set_d(r26472, n, MPFR_RNDN);
        mpfr_log(r26473, r26472, MPFR_RNDN);
        ;
        mpfr_div(r26475, r26474, r26472, MPFR_RNDN);
        mpfr_div(r26476, r26475, r26472, MPFR_RNDN);
        mpfr_sub(r26477, r26473, r26476, MPFR_RNDN);
        ;
        mpfr_div(r26479, r26478, r26472, MPFR_RNDN);
        mpfr_add(r26480, r26477, r26479, MPFR_RNDN);
        return mpfr_get_d(r26480, MPFR_RNDN);
}

static mpfr_t r26481, r26482, r26483, r26484, r26485, r26486, r26487, r26488, r26489;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26481);
        mpfr_init(r26482);
        mpfr_init_set_str(r26483, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26484);
        mpfr_init(r26485);
        mpfr_init(r26486);
        mpfr_init_set_str(r26487, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26488);
        mpfr_init(r26489);
}

double f_dm(double n) {
        mpfr_set_d(r26481, n, MPFR_RNDN);
        mpfr_log(r26482, r26481, MPFR_RNDN);
        ;
        mpfr_div(r26484, r26483, r26481, MPFR_RNDN);
        mpfr_div(r26485, r26484, r26481, MPFR_RNDN);
        mpfr_sub(r26486, r26482, r26485, MPFR_RNDN);
        ;
        mpfr_div(r26488, r26487, r26481, MPFR_RNDN);
        mpfr_add(r26489, r26486, r26488, MPFR_RNDN);
        return mpfr_get_d(r26489, MPFR_RNDN);
}

