#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "qlog (example 3.10)";

double f_if(float x) {
        float r6215324 = 1;
        float r6215325 = x;
        float r6215326 = r6215324 - r6215325;
        float r6215327 = log(r6215326);
        float r6215328 = r6215324 + r6215325;
        float r6215329 = log(r6215328);
        float r6215330 = r6215327 / r6215329;
        return r6215330;
}

double f_id(double x) {
        double r6215331 = 1;
        double r6215332 = x;
        double r6215333 = r6215331 - r6215332;
        double r6215334 = log(r6215333);
        double r6215335 = r6215331 + r6215332;
        double r6215336 = log(r6215335);
        double r6215337 = r6215334 / r6215336;
        return r6215337;
}


double f_of(float x) {
        float r6215338 = x;
        float r6215339 = r6215338 * r6215338;
        float r6215340 = 1/2;
        float r6215341 = -r6215340;
        float r6215342 = r6215339 * r6215341;
        float r6215343 = 1;
        float r6215344 = r6215338 + r6215343;
        float r6215345 = -r6215344;
        float r6215346 = r6215342 + r6215345;
        return r6215346;
}

double f_od(double x) {
        double r6215347 = x;
        double r6215348 = r6215347 * r6215347;
        double r6215349 = 1/2;
        double r6215350 = -r6215349;
        double r6215351 = r6215348 * r6215350;
        double r6215352 = 1;
        double r6215353 = r6215347 + r6215352;
        double r6215354 = -r6215353;
        double r6215355 = r6215351 + r6215354;
        return r6215355;
}

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 r6215356, r6215357, r6215358, r6215359, r6215360, r6215361, r6215362;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r6215356, "1", 10, MPFR_RNDN);
        mpfr_init(r6215357);
        mpfr_init(r6215358);
        mpfr_init(r6215359);
        mpfr_init(r6215360);
        mpfr_init(r6215361);
        mpfr_init(r6215362);
}

double f_im(double x) {
        ;
        mpfr_set_d(r6215357, x, MPFR_RNDN);
        mpfr_sub(r6215358, r6215356, r6215357, MPFR_RNDN);
        mpfr_log(r6215359, r6215358, MPFR_RNDN);
        mpfr_add(r6215360, r6215356, r6215357, MPFR_RNDN);
        mpfr_log(r6215361, r6215360, MPFR_RNDN);
        mpfr_div(r6215362, r6215359, r6215361, MPFR_RNDN);
        return mpfr_get_d(r6215362, MPFR_RNDN);
}

static mpfr_t r6215363, r6215364, r6215365, r6215366, r6215367, r6215368, r6215369, r6215370, r6215371;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215363);
        mpfr_init(r6215364);
        mpfr_init_set_str(r6215365, "1/2", 10, MPFR_RNDN);
        mpfr_init(r6215366);
        mpfr_init(r6215367);
        mpfr_init_set_str(r6215368, "1", 10, MPFR_RNDN);
        mpfr_init(r6215369);
        mpfr_init(r6215370);
        mpfr_init(r6215371);
}

double f_fm(double x) {
        mpfr_set_d(r6215363, x, MPFR_RNDN);
        mpfr_mul(r6215364, r6215363, r6215363, MPFR_RNDN);
        ;
        mpfr_neg(r6215366, r6215365, MPFR_RNDN);
        mpfr_mul(r6215367, r6215364, r6215366, MPFR_RNDN);
        ;
        mpfr_add(r6215369, r6215363, r6215368, MPFR_RNDN);
        mpfr_neg(r6215370, r6215369, MPFR_RNDN);
        mpfr_add(r6215371, r6215367, r6215370, MPFR_RNDN);
        return mpfr_get_d(r6215371, MPFR_RNDN);
}

static mpfr_t r6215372, r6215373, r6215374, r6215375, r6215376, r6215377, r6215378, r6215379, r6215380;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215372);
        mpfr_init(r6215373);
        mpfr_init_set_str(r6215374, "1/2", 10, MPFR_RNDN);
        mpfr_init(r6215375);
        mpfr_init(r6215376);
        mpfr_init_set_str(r6215377, "1", 10, MPFR_RNDN);
        mpfr_init(r6215378);
        mpfr_init(r6215379);
        mpfr_init(r6215380);
}

double f_dm(double x) {
        mpfr_set_d(r6215372, x, MPFR_RNDN);
        mpfr_mul(r6215373, r6215372, r6215372, MPFR_RNDN);
        ;
        mpfr_neg(r6215375, r6215374, MPFR_RNDN);
        mpfr_mul(r6215376, r6215373, r6215375, MPFR_RNDN);
        ;
        mpfr_add(r6215378, r6215372, r6215377, MPFR_RNDN);
        mpfr_neg(r6215379, r6215378, MPFR_RNDN);
        mpfr_add(r6215380, r6215376, r6215379, MPFR_RNDN);
        return mpfr_get_d(r6215380, MPFR_RNDN);
}

