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

char *name = "expq3 (problem 3.4.2)";

double f_if(float a, float b, float eps) {
        float r39512 = eps;
        float r39513 = a;
        float r39514 = b;
        float r39515 = r39513 + r39514;
        float r39516 = r39515 * r39512;
        float r39517 = exp(r39516);
        float r39518 = 1;
        float r39519 = r39517 - r39518;
        float r39520 = r39512 * r39519;
        float r39521 = r39513 * r39512;
        float r39522 = exp(r39521);
        float r39523 = r39522 - r39518;
        float r39524 = r39514 * r39512;
        float r39525 = exp(r39524);
        float r39526 = r39525 - r39518;
        float r39527 = r39523 * r39526;
        float r39528 = r39520 / r39527;
        return r39528;
}

double f_id(double a, double b, double eps) {
        double r39529 = eps;
        double r39530 = a;
        double r39531 = b;
        double r39532 = r39530 + r39531;
        double r39533 = r39532 * r39529;
        double r39534 = exp(r39533);
        double r39535 = 1;
        double r39536 = r39534 - r39535;
        double r39537 = r39529 * r39536;
        double r39538 = r39530 * r39529;
        double r39539 = exp(r39538);
        double r39540 = r39539 - r39535;
        double r39541 = r39531 * r39529;
        double r39542 = exp(r39541);
        double r39543 = r39542 - r39535;
        double r39544 = r39540 * r39543;
        double r39545 = r39537 / r39544;
        return r39545;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r39546 = 1;
        float r39547 = b;
        float r39548 = r39546 / r39547;
        float r39549 = a;
        float r39550 = r39546 / r39549;
        float r39551 = r39548 + r39550;
        return r39551;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r39552 = 1;
        double r39553 = b;
        double r39554 = r39552 / r39553;
        double r39555 = a;
        double r39556 = r39552 / r39555;
        double r39557 = r39554 + r39556;
        return r39557;
}

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 r39558, r39559, r39560, r39561, r39562, r39563, r39564, r39565, r39566, r39567, r39568, r39569, r39570, r39571, r39572, r39573, r39574;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r39558);
        mpfr_init(r39559);
        mpfr_init(r39560);
        mpfr_init(r39561);
        mpfr_init(r39562);
        mpfr_init(r39563);
        mpfr_init_set_str(r39564, "1", 10, MPFR_RNDN);
        mpfr_init(r39565);
        mpfr_init(r39566);
        mpfr_init(r39567);
        mpfr_init(r39568);
        mpfr_init(r39569);
        mpfr_init(r39570);
        mpfr_init(r39571);
        mpfr_init(r39572);
        mpfr_init(r39573);
        mpfr_init(r39574);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r39558, eps, MPFR_RNDN);
        mpfr_set_d(r39559, a, MPFR_RNDN);
        mpfr_set_d(r39560, b, MPFR_RNDN);
        mpfr_add(r39561, r39559, r39560, MPFR_RNDN);
        mpfr_mul(r39562, r39561, r39558, MPFR_RNDN);
        mpfr_exp(r39563, r39562, MPFR_RNDN);
        ;
        mpfr_sub(r39565, r39563, r39564, MPFR_RNDN);
        mpfr_mul(r39566, r39558, r39565, MPFR_RNDN);
        mpfr_mul(r39567, r39559, r39558, MPFR_RNDN);
        mpfr_exp(r39568, r39567, MPFR_RNDN);
        mpfr_sub(r39569, r39568, r39564, MPFR_RNDN);
        mpfr_mul(r39570, r39560, r39558, MPFR_RNDN);
        mpfr_exp(r39571, r39570, MPFR_RNDN);
        mpfr_sub(r39572, r39571, r39564, MPFR_RNDN);
        mpfr_mul(r39573, r39569, r39572, MPFR_RNDN);
        mpfr_div(r39574, r39566, r39573, MPFR_RNDN);
        return mpfr_get_d(r39574, MPFR_RNDN);
}

static mpfr_t r39575, r39576, r39577, r39578, r39579, r39580;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39575, "1", 10, MPFR_RNDN);
        mpfr_init(r39576);
        mpfr_init(r39577);
        mpfr_init(r39578);
        mpfr_init(r39579);
        mpfr_init(r39580);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r39576, b, MPFR_RNDN);
        mpfr_div(r39577, r39575, r39576, MPFR_RNDN);
        mpfr_set_d(r39578, a, MPFR_RNDN);
        mpfr_div(r39579, r39575, r39578, MPFR_RNDN);
        mpfr_add(r39580, r39577, r39579, MPFR_RNDN);
        return mpfr_get_d(r39580, MPFR_RNDN);
}

static mpfr_t r39581, r39582, r39583, r39584, r39585, r39586;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39581, "1", 10, MPFR_RNDN);
        mpfr_init(r39582);
        mpfr_init(r39583);
        mpfr_init(r39584);
        mpfr_init(r39585);
        mpfr_init(r39586);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r39582, b, MPFR_RNDN);
        mpfr_div(r39583, r39581, r39582, MPFR_RNDN);
        mpfr_set_d(r39584, a, MPFR_RNDN);
        mpfr_div(r39585, r39581, r39584, MPFR_RNDN);
        mpfr_add(r39586, r39583, r39585, MPFR_RNDN);
        return mpfr_get_d(r39586, MPFR_RNDN);
}

