#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 r26451 = n;
        float r26452 = 1;
        float r26453 = r26451 + r26452;
        float r26454 = log(r26453);
        float r26455 = r26453 * r26454;
        float r26456 = log(r26451);
        float r26457 = r26451 * r26456;
        float r26458 = r26455 - r26457;
        float r26459 = r26458 - r26452;
        return r26459;
}

double f_id(double n) {
        double r26460 = n;
        double r26461 = 1;
        double r26462 = r26460 + r26461;
        double r26463 = log(r26462);
        double r26464 = r26462 * r26463;
        double r26465 = log(r26460);
        double r26466 = r26460 * r26465;
        double r26467 = r26464 - r26466;
        double r26468 = r26467 - r26461;
        return r26468;
}


double f_of(float n) {
        float r26469 = n;
        float r26470 = log(r26469);
        float r26471 = 1/6;
        float r26472 = r26471 / r26469;
        float r26473 = r26472 / r26469;
        float r26474 = r26470 - r26473;
        float r26475 = 1/2;
        float r26476 = r26475 / r26469;
        float r26477 = r26474 + r26476;
        return r26477;
}

double f_od(double n) {
        double r26478 = n;
        double r26479 = log(r26478);
        double r26480 = 1/6;
        double r26481 = r26480 / r26478;
        double r26482 = r26481 / r26478;
        double r26483 = r26479 - r26482;
        double r26484 = 1/2;
        double r26485 = r26484 / r26478;
        double r26486 = r26483 + r26485;
        return r26486;
}

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 r26487, r26488, r26489, r26490, r26491, r26492, r26493, r26494, r26495;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26487);
        mpfr_init_set_str(r26488, "1", 10, MPFR_RNDN);
        mpfr_init(r26489);
        mpfr_init(r26490);
        mpfr_init(r26491);
        mpfr_init(r26492);
        mpfr_init(r26493);
        mpfr_init(r26494);
        mpfr_init(r26495);
}

double f_im(double n) {
        mpfr_set_d(r26487, n, MPFR_RNDN);
        ;
        mpfr_add(r26489, r26487, r26488, MPFR_RNDN);
        mpfr_log(r26490, r26489, MPFR_RNDN);
        mpfr_mul(r26491, r26489, r26490, MPFR_RNDN);
        mpfr_log(r26492, r26487, MPFR_RNDN);
        mpfr_mul(r26493, r26487, r26492, MPFR_RNDN);
        mpfr_sub(r26494, r26491, r26493, MPFR_RNDN);
        mpfr_sub(r26495, r26494, r26488, MPFR_RNDN);
        return mpfr_get_d(r26495, MPFR_RNDN);
}

static mpfr_t r26496, r26497, r26498, r26499, r26500, r26501, r26502, r26503, r26504;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26496);
        mpfr_init(r26497);
        mpfr_init_set_str(r26498, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26499);
        mpfr_init(r26500);
        mpfr_init(r26501);
        mpfr_init_set_str(r26502, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26503);
        mpfr_init(r26504);
}

double f_fm(double n) {
        mpfr_set_d(r26496, n, MPFR_RNDN);
        mpfr_log(r26497, r26496, MPFR_RNDN);
        ;
        mpfr_div(r26499, r26498, r26496, MPFR_RNDN);
        mpfr_div(r26500, r26499, r26496, MPFR_RNDN);
        mpfr_sub(r26501, r26497, r26500, MPFR_RNDN);
        ;
        mpfr_div(r26503, r26502, r26496, MPFR_RNDN);
        mpfr_add(r26504, r26501, r26503, MPFR_RNDN);
        return mpfr_get_d(r26504, MPFR_RNDN);
}

static mpfr_t r26505, r26506, r26507, r26508, r26509, r26510, r26511, r26512, r26513;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26505);
        mpfr_init(r26506);
        mpfr_init_set_str(r26507, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26508);
        mpfr_init(r26509);
        mpfr_init(r26510);
        mpfr_init_set_str(r26511, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26512);
        mpfr_init(r26513);
}

double f_dm(double n) {
        mpfr_set_d(r26505, n, MPFR_RNDN);
        mpfr_log(r26506, r26505, MPFR_RNDN);
        ;
        mpfr_div(r26508, r26507, r26505, MPFR_RNDN);
        mpfr_div(r26509, r26508, r26505, MPFR_RNDN);
        mpfr_sub(r26510, r26506, r26509, MPFR_RNDN);
        ;
        mpfr_div(r26512, r26511, r26505, MPFR_RNDN);
        mpfr_add(r26513, r26510, r26512, MPFR_RNDN);
        return mpfr_get_d(r26513, MPFR_RNDN);
}

