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

char *name = "NMSE problem 3.4.2";

double f_if(float a, float b, float eps) {
        float r4774702 = eps;
        float r4774703 = a;
        float r4774704 = b;
        float r4774705 = r4774703 + r4774704;
        float r4774706 = r4774705 * r4774702;
        float r4774707 = exp(r4774706);
        float r4774708 = 1.0f;
        float r4774709 = r4774707 - r4774708;
        float r4774710 = r4774702 * r4774709;
        float r4774711 = r4774703 * r4774702;
        float r4774712 = exp(r4774711);
        float r4774713 = r4774712 - r4774708;
        float r4774714 = r4774704 * r4774702;
        float r4774715 = exp(r4774714);
        float r4774716 = r4774715 - r4774708;
        float r4774717 = r4774713 * r4774716;
        float r4774718 = r4774710 / r4774717;
        return r4774718;
}

double f_id(double a, double b, double eps) {
        double r4774719 = eps;
        double r4774720 = a;
        double r4774721 = b;
        double r4774722 = r4774720 + r4774721;
        double r4774723 = r4774722 * r4774719;
        double r4774724 = exp(r4774723);
        double r4774725 = 1.0;
        double r4774726 = r4774724 - r4774725;
        double r4774727 = r4774719 * r4774726;
        double r4774728 = r4774720 * r4774719;
        double r4774729 = exp(r4774728);
        double r4774730 = r4774729 - r4774725;
        double r4774731 = r4774721 * r4774719;
        double r4774732 = exp(r4774731);
        double r4774733 = r4774732 - r4774725;
        double r4774734 = r4774730 * r4774733;
        double r4774735 = r4774727 / r4774734;
        return r4774735;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r4774736 = 1.0f;
        float r4774737 = b;
        float r4774738 = r4774736 / r4774737;
        float r4774739 = a;
        float r4774740 = r4774736 / r4774739;
        float r4774741 = r4774738 + r4774740;
        return r4774741;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r4774742 = 1.0;
        double r4774743 = b;
        double r4774744 = r4774742 / r4774743;
        double r4774745 = a;
        double r4774746 = r4774742 / r4774745;
        double r4774747 = r4774744 + r4774746;
        return r4774747;
}

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 r4774748, r4774749, r4774750, r4774751, r4774752, r4774753, r4774754, r4774755, r4774756, r4774757, r4774758, r4774759, r4774760, r4774761, r4774762, r4774763, r4774764;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774748);
        mpfr_init(r4774749);
        mpfr_init(r4774750);
        mpfr_init(r4774751);
        mpfr_init(r4774752);
        mpfr_init(r4774753);
        mpfr_init_set_str(r4774754, "1", 10, MPFR_RNDN);
        mpfr_init(r4774755);
        mpfr_init(r4774756);
        mpfr_init(r4774757);
        mpfr_init(r4774758);
        mpfr_init(r4774759);
        mpfr_init(r4774760);
        mpfr_init(r4774761);
        mpfr_init(r4774762);
        mpfr_init(r4774763);
        mpfr_init(r4774764);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r4774748, eps, MPFR_RNDN);
        mpfr_set_d(r4774749, a, MPFR_RNDN);
        mpfr_set_d(r4774750, b, MPFR_RNDN);
        mpfr_add(r4774751, r4774749, r4774750, MPFR_RNDN);
        mpfr_mul(r4774752, r4774751, r4774748, MPFR_RNDN);
        mpfr_exp(r4774753, r4774752, MPFR_RNDN);
        ;
        mpfr_sub(r4774755, r4774753, r4774754, MPFR_RNDN);
        mpfr_mul(r4774756, r4774748, r4774755, MPFR_RNDN);
        mpfr_mul(r4774757, r4774749, r4774748, MPFR_RNDN);
        mpfr_exp(r4774758, r4774757, MPFR_RNDN);
        mpfr_sub(r4774759, r4774758, r4774754, MPFR_RNDN);
        mpfr_mul(r4774760, r4774750, r4774748, MPFR_RNDN);
        mpfr_exp(r4774761, r4774760, MPFR_RNDN);
        mpfr_sub(r4774762, r4774761, r4774754, MPFR_RNDN);
        mpfr_mul(r4774763, r4774759, r4774762, MPFR_RNDN);
        mpfr_div(r4774764, r4774756, r4774763, MPFR_RNDN);
        return mpfr_get_d(r4774764, MPFR_RNDN);
}

static mpfr_t r4774765, r4774766, r4774767, r4774768, r4774769, r4774770;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4774765, "1", 10, MPFR_RNDN);
        mpfr_init(r4774766);
        mpfr_init(r4774767);
        mpfr_init(r4774768);
        mpfr_init(r4774769);
        mpfr_init(r4774770);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r4774766, b, MPFR_RNDN);
        mpfr_div(r4774767, r4774765, r4774766, MPFR_RNDN);
        mpfr_set_d(r4774768, a, MPFR_RNDN);
        mpfr_div(r4774769, r4774765, r4774768, MPFR_RNDN);
        mpfr_add(r4774770, r4774767, r4774769, MPFR_RNDN);
        return mpfr_get_d(r4774770, MPFR_RNDN);
}

static mpfr_t r4774771, r4774772, r4774773, r4774774, r4774775, r4774776;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4774771, "1", 10, MPFR_RNDN);
        mpfr_init(r4774772);
        mpfr_init(r4774773);
        mpfr_init(r4774774);
        mpfr_init(r4774775);
        mpfr_init(r4774776);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r4774772, b, MPFR_RNDN);
        mpfr_div(r4774773, r4774771, r4774772, MPFR_RNDN);
        mpfr_set_d(r4774774, a, MPFR_RNDN);
        mpfr_div(r4774775, r4774771, r4774774, MPFR_RNDN);
        mpfr_add(r4774776, r4774773, r4774775, MPFR_RNDN);
        return mpfr_get_d(r4774776, MPFR_RNDN);
}

