#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 r4875546 = 1.0f;
        float r4875547 = x;
        float r4875548 = r4875546 - r4875547;
        float r4875549 = log(r4875548);
        float r4875550 = r4875546 + r4875547;
        float r4875551 = log(r4875550);
        float r4875552 = r4875549 / r4875551;
        return r4875552;
}

double f_id(double x) {
        double r4875553 = 1.0;
        double r4875554 = x;
        double r4875555 = r4875553 - r4875554;
        double r4875556 = log(r4875555);
        double r4875557 = r4875553 + r4875554;
        double r4875558 = log(r4875557);
        double r4875559 = r4875556 / r4875558;
        return r4875559;
}


double f_of(float x) {
        float r4875560 = 0.5f;
        float r4875561 = x;
        float r4875562 = 2.0f;
        float r4875563 = pow(r4875561, r4875562);
        float r4875564 = r4875560 * r4875563;
        float r4875565 = 1.0f;
        float r4875566 = r4875565 + r4875561;
        float r4875567 = r4875564 + r4875566;
        float r4875568 = -r4875567;
        return r4875568;
}

double f_od(double x) {
        double r4875569 = 0.5;
        double r4875570 = x;
        double r4875571 = 2.0;
        double r4875572 = pow(r4875570, r4875571);
        double r4875573 = r4875569 * r4875572;
        double r4875574 = 1.0;
        double r4875575 = r4875574 + r4875570;
        double r4875576 = r4875573 + r4875575;
        double r4875577 = -r4875576;
        return r4875577;
}

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 r4875578, r4875579, r4875580, r4875581, r4875582, r4875583, r4875584;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4875578, "1", 10, MPFR_RNDN);
        mpfr_init(r4875579);
        mpfr_init(r4875580);
        mpfr_init(r4875581);
        mpfr_init(r4875582);
        mpfr_init(r4875583);
        mpfr_init(r4875584);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4875579, x, MPFR_RNDN);
        mpfr_sub(r4875580, r4875578, r4875579, MPFR_RNDN);
        mpfr_log(r4875581, r4875580, MPFR_RNDN);
        mpfr_add(r4875582, r4875578, r4875579, MPFR_RNDN);
        mpfr_log(r4875583, r4875582, MPFR_RNDN);
        mpfr_div(r4875584, r4875581, r4875583, MPFR_RNDN);
        return mpfr_get_d(r4875584, MPFR_RNDN);
}

static mpfr_t r4875585, r4875586, r4875587, r4875588, r4875589, r4875590, r4875591, r4875592, r4875593;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4875585, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4875586);
        mpfr_init_set_str(r4875587, "2", 10, MPFR_RNDN);
        mpfr_init(r4875588);
        mpfr_init(r4875589);
        mpfr_init_set_str(r4875590, "1", 10, MPFR_RNDN);
        mpfr_init(r4875591);
        mpfr_init(r4875592);
        mpfr_init(r4875593);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4875586, x, MPFR_RNDN);
        ;
        mpfr_pow(r4875588, r4875586, r4875587, MPFR_RNDN);
        mpfr_mul(r4875589, r4875585, r4875588, MPFR_RNDN);
        ;
        mpfr_add(r4875591, r4875590, r4875586, MPFR_RNDN);
        mpfr_add(r4875592, r4875589, r4875591, MPFR_RNDN);
        mpfr_neg(r4875593, r4875592, MPFR_RNDN);
        return mpfr_get_d(r4875593, MPFR_RNDN);
}

static mpfr_t r4875594, r4875595, r4875596, r4875597, r4875598, r4875599, r4875600, r4875601, r4875602;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4875594, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4875595);
        mpfr_init_set_str(r4875596, "2", 10, MPFR_RNDN);
        mpfr_init(r4875597);
        mpfr_init(r4875598);
        mpfr_init_set_str(r4875599, "1", 10, MPFR_RNDN);
        mpfr_init(r4875600);
        mpfr_init(r4875601);
        mpfr_init(r4875602);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4875595, x, MPFR_RNDN);
        ;
        mpfr_pow(r4875597, r4875595, r4875596, MPFR_RNDN);
        mpfr_mul(r4875598, r4875594, r4875597, MPFR_RNDN);
        ;
        mpfr_add(r4875600, r4875599, r4875595, MPFR_RNDN);
        mpfr_add(r4875601, r4875598, r4875600, MPFR_RNDN);
        mpfr_neg(r4875602, r4875601, MPFR_RNDN);
        return mpfr_get_d(r4875602, MPFR_RNDN);
}

