#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 r38041 = 1;
        float r38042 = x;
        float r38043 = r38041 - r38042;
        float r38044 = log(r38043);
        float r38045 = r38041 + r38042;
        float r38046 = log(r38045);
        float r38047 = r38044 / r38046;
        return r38047;
}

double f_id(double x) {
        double r38048 = 1;
        double r38049 = x;
        double r38050 = r38048 - r38049;
        double r38051 = log(r38050);
        double r38052 = r38048 + r38049;
        double r38053 = log(r38052);
        double r38054 = r38051 / r38053;
        return r38054;
}


double f_of(float x) {
        float r38055 = 1/2;
        float r38056 = x;
        float r38057 = 2;
        float r38058 = pow(r38056, r38057);
        float r38059 = r38055 * r38058;
        float r38060 = 1;
        float r38061 = r38060 + r38056;
        float r38062 = r38059 + r38061;
        float r38063 = -r38062;
        return r38063;
}

double f_od(double x) {
        double r38064 = 1/2;
        double r38065 = x;
        double r38066 = 2;
        double r38067 = pow(r38065, r38066);
        double r38068 = r38064 * r38067;
        double r38069 = 1;
        double r38070 = r38069 + r38065;
        double r38071 = r38068 + r38070;
        double r38072 = -r38071;
        return r38072;
}

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 r38073, r38074, r38075, r38076, r38077, r38078, r38079;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r38073, "1", 10, MPFR_RNDN);
        mpfr_init(r38074);
        mpfr_init(r38075);
        mpfr_init(r38076);
        mpfr_init(r38077);
        mpfr_init(r38078);
        mpfr_init(r38079);
}

double f_im(double x) {
        ;
        mpfr_set_d(r38074, x, MPFR_RNDN);
        mpfr_sub(r38075, r38073, r38074, MPFR_RNDN);
        mpfr_log(r38076, r38075, MPFR_RNDN);
        mpfr_add(r38077, r38073, r38074, MPFR_RNDN);
        mpfr_log(r38078, r38077, MPFR_RNDN);
        mpfr_div(r38079, r38076, r38078, MPFR_RNDN);
        return mpfr_get_d(r38079, MPFR_RNDN);
}

static mpfr_t r38080, r38081, r38082, r38083, r38084, r38085, r38086, r38087, r38088;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r38080, "1/2", 10, MPFR_RNDN);
        mpfr_init(r38081);
        mpfr_init_set_str(r38082, "2", 10, MPFR_RNDN);
        mpfr_init(r38083);
        mpfr_init(r38084);
        mpfr_init_set_str(r38085, "1", 10, MPFR_RNDN);
        mpfr_init(r38086);
        mpfr_init(r38087);
        mpfr_init(r38088);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r38081, x, MPFR_RNDN);
        ;
        mpfr_pow(r38083, r38081, r38082, MPFR_RNDN);
        mpfr_mul(r38084, r38080, r38083, MPFR_RNDN);
        ;
        mpfr_add(r38086, r38085, r38081, MPFR_RNDN);
        mpfr_add(r38087, r38084, r38086, MPFR_RNDN);
        mpfr_neg(r38088, r38087, MPFR_RNDN);
        return mpfr_get_d(r38088, MPFR_RNDN);
}

static mpfr_t r38089, r38090, r38091, r38092, r38093, r38094, r38095, r38096, r38097;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r38089, "1/2", 10, MPFR_RNDN);
        mpfr_init(r38090);
        mpfr_init_set_str(r38091, "2", 10, MPFR_RNDN);
        mpfr_init(r38092);
        mpfr_init(r38093);
        mpfr_init_set_str(r38094, "1", 10, MPFR_RNDN);
        mpfr_init(r38095);
        mpfr_init(r38096);
        mpfr_init(r38097);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r38090, x, MPFR_RNDN);
        ;
        mpfr_pow(r38092, r38090, r38091, MPFR_RNDN);
        mpfr_mul(r38093, r38089, r38092, MPFR_RNDN);
        ;
        mpfr_add(r38095, r38094, r38090, MPFR_RNDN);
        mpfr_add(r38096, r38093, r38095, MPFR_RNDN);
        mpfr_neg(r38097, r38096, MPFR_RNDN);
        return mpfr_get_d(r38097, MPFR_RNDN);
}

