#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 r4940565 = 1.0f;
        float r4940566 = x;
        float r4940567 = r4940565 - r4940566;
        float r4940568 = log(r4940567);
        float r4940569 = r4940565 + r4940566;
        float r4940570 = log(r4940569);
        float r4940571 = r4940568 / r4940570;
        return r4940571;
}

double f_id(double x) {
        double r4940572 = 1.0;
        double r4940573 = x;
        double r4940574 = r4940572 - r4940573;
        double r4940575 = log(r4940574);
        double r4940576 = r4940572 + r4940573;
        double r4940577 = log(r4940576);
        double r4940578 = r4940575 / r4940577;
        return r4940578;
}


double f_of(float x) {
        float r4940579 = x;
        float r4940580 = 1.0f;
        float r4940581 = r4940579 + r4940580;
        float r4940582 = 0.5f;
        float r4940583 = r4940579 * r4940579;
        float r4940584 = r4940582 * r4940583;
        float r4940585 = r4940581 + r4940584;
        float r4940586 = -r4940585;
        return r4940586;
}

double f_od(double x) {
        double r4940587 = x;
        double r4940588 = 1.0;
        double r4940589 = r4940587 + r4940588;
        double r4940590 = 0.5;
        double r4940591 = r4940587 * r4940587;
        double r4940592 = r4940590 * r4940591;
        double r4940593 = r4940589 + r4940592;
        double r4940594 = -r4940593;
        return r4940594;
}

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 r4940595, r4940596, r4940597, r4940598, r4940599, r4940600, r4940601;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4940595, "1", 10, MPFR_RNDN);
        mpfr_init(r4940596);
        mpfr_init(r4940597);
        mpfr_init(r4940598);
        mpfr_init(r4940599);
        mpfr_init(r4940600);
        mpfr_init(r4940601);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4940596, x, MPFR_RNDN);
        mpfr_sub(r4940597, r4940595, r4940596, MPFR_RNDN);
        mpfr_log(r4940598, r4940597, MPFR_RNDN);
        mpfr_add(r4940599, r4940595, r4940596, MPFR_RNDN);
        mpfr_log(r4940600, r4940599, MPFR_RNDN);
        mpfr_div(r4940601, r4940598, r4940600, MPFR_RNDN);
        return mpfr_get_d(r4940601, MPFR_RNDN);
}

static mpfr_t r4940602, r4940603, r4940604, r4940605, r4940606, r4940607, r4940608, r4940609;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4940602);
        mpfr_init_set_str(r4940603, "1", 10, MPFR_RNDN);
        mpfr_init(r4940604);
        mpfr_init_set_str(r4940605, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4940606);
        mpfr_init(r4940607);
        mpfr_init(r4940608);
        mpfr_init(r4940609);
}

double f_fm(double x) {
        mpfr_set_d(r4940602, x, MPFR_RNDN);
        ;
        mpfr_add(r4940604, r4940602, r4940603, MPFR_RNDN);
        ;
        mpfr_sqr(r4940606, r4940602, MPFR_RNDN);
        mpfr_mul(r4940607, r4940605, r4940606, MPFR_RNDN);
        mpfr_add(r4940608, r4940604, r4940607, MPFR_RNDN);
        mpfr_neg(r4940609, r4940608, MPFR_RNDN);
        return mpfr_get_d(r4940609, MPFR_RNDN);
}

static mpfr_t r4940610, r4940611, r4940612, r4940613, r4940614, r4940615, r4940616, r4940617;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4940610);
        mpfr_init_set_str(r4940611, "1", 10, MPFR_RNDN);
        mpfr_init(r4940612);
        mpfr_init_set_str(r4940613, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4940614);
        mpfr_init(r4940615);
        mpfr_init(r4940616);
        mpfr_init(r4940617);
}

double f_dm(double x) {
        mpfr_set_d(r4940610, x, MPFR_RNDN);
        ;
        mpfr_add(r4940612, r4940610, r4940611, MPFR_RNDN);
        ;
        mpfr_sqr(r4940614, r4940610, MPFR_RNDN);
        mpfr_mul(r4940615, r4940613, r4940614, MPFR_RNDN);
        mpfr_add(r4940616, r4940612, r4940615, MPFR_RNDN);
        mpfr_neg(r4940617, r4940616, MPFR_RNDN);
        return mpfr_get_d(r4940617, MPFR_RNDN);
}

