#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 r26500 = n;
        float r26501 = 1;
        float r26502 = r26500 + r26501;
        float r26503 = log(r26502);
        float r26504 = r26502 * r26503;
        float r26505 = log(r26500);
        float r26506 = r26500 * r26505;
        float r26507 = r26504 - r26506;
        float r26508 = r26507 - r26501;
        return r26508;
}

double f_id(double n) {
        double r26509 = n;
        double r26510 = 1;
        double r26511 = r26509 + r26510;
        double r26512 = log(r26511);
        double r26513 = r26511 * r26512;
        double r26514 = log(r26509);
        double r26515 = r26509 * r26514;
        double r26516 = r26513 - r26515;
        double r26517 = r26516 - r26510;
        return r26517;
}


double f_of(float n) {
        float r26518 = n;
        float r26519 = log(r26518);
        float r26520 = 1/6;
        float r26521 = r26520 / r26518;
        float r26522 = r26521 / r26518;
        float r26523 = r26519 - r26522;
        float r26524 = 1/2;
        float r26525 = r26524 / r26518;
        float r26526 = r26523 + r26525;
        return r26526;
}

double f_od(double n) {
        double r26527 = n;
        double r26528 = log(r26527);
        double r26529 = 1/6;
        double r26530 = r26529 / r26527;
        double r26531 = r26530 / r26527;
        double r26532 = r26528 - r26531;
        double r26533 = 1/2;
        double r26534 = r26533 / r26527;
        double r26535 = r26532 + r26534;
        return r26535;
}

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 r26536, r26537, r26538, r26539, r26540, r26541, r26542, r26543, r26544;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26536);
        mpfr_init_set_str(r26537, "1", 10, MPFR_RNDN);
        mpfr_init(r26538);
        mpfr_init(r26539);
        mpfr_init(r26540);
        mpfr_init(r26541);
        mpfr_init(r26542);
        mpfr_init(r26543);
        mpfr_init(r26544);
}

double f_im(double n) {
        mpfr_set_d(r26536, n, MPFR_RNDN);
        ;
        mpfr_add(r26538, r26536, r26537, MPFR_RNDN);
        mpfr_log(r26539, r26538, MPFR_RNDN);
        mpfr_mul(r26540, r26538, r26539, MPFR_RNDN);
        mpfr_log(r26541, r26536, MPFR_RNDN);
        mpfr_mul(r26542, r26536, r26541, MPFR_RNDN);
        mpfr_sub(r26543, r26540, r26542, MPFR_RNDN);
        mpfr_sub(r26544, r26543, r26537, MPFR_RNDN);
        return mpfr_get_d(r26544, MPFR_RNDN);
}

static mpfr_t r26545, r26546, r26547, r26548, r26549, r26550, r26551, r26552, r26553;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26545);
        mpfr_init(r26546);
        mpfr_init_set_str(r26547, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26548);
        mpfr_init(r26549);
        mpfr_init(r26550);
        mpfr_init_set_str(r26551, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26552);
        mpfr_init(r26553);
}

double f_fm(double n) {
        mpfr_set_d(r26545, n, MPFR_RNDN);
        mpfr_log(r26546, r26545, MPFR_RNDN);
        ;
        mpfr_div(r26548, r26547, r26545, MPFR_RNDN);
        mpfr_div(r26549, r26548, r26545, MPFR_RNDN);
        mpfr_sub(r26550, r26546, r26549, MPFR_RNDN);
        ;
        mpfr_div(r26552, r26551, r26545, MPFR_RNDN);
        mpfr_add(r26553, r26550, r26552, MPFR_RNDN);
        return mpfr_get_d(r26553, MPFR_RNDN);
}

static mpfr_t r26554, r26555, r26556, r26557, r26558, r26559, r26560, r26561, r26562;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26554);
        mpfr_init(r26555);
        mpfr_init_set_str(r26556, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26557);
        mpfr_init(r26558);
        mpfr_init(r26559);
        mpfr_init_set_str(r26560, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26561);
        mpfr_init(r26562);
}

double f_dm(double n) {
        mpfr_set_d(r26554, n, MPFR_RNDN);
        mpfr_log(r26555, r26554, MPFR_RNDN);
        ;
        mpfr_div(r26557, r26556, r26554, MPFR_RNDN);
        mpfr_div(r26558, r26557, r26554, MPFR_RNDN);
        mpfr_sub(r26559, r26555, r26558, MPFR_RNDN);
        ;
        mpfr_div(r26561, r26560, r26554, MPFR_RNDN);
        mpfr_add(r26562, r26559, r26561, MPFR_RNDN);
        return mpfr_get_d(r26562, MPFR_RNDN);
}

