#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 r5353786 = eps;
        float r5353787 = a;
        float r5353788 = b;
        float r5353789 = r5353787 + r5353788;
        float r5353790 = r5353789 * r5353786;
        float r5353791 = exp(r5353790);
        float r5353792 = 1.0f;
        float r5353793 = r5353791 - r5353792;
        float r5353794 = r5353786 * r5353793;
        float r5353795 = r5353787 * r5353786;
        float r5353796 = exp(r5353795);
        float r5353797 = r5353796 - r5353792;
        float r5353798 = r5353788 * r5353786;
        float r5353799 = exp(r5353798);
        float r5353800 = r5353799 - r5353792;
        float r5353801 = r5353797 * r5353800;
        float r5353802 = r5353794 / r5353801;
        return r5353802;
}

double f_id(double a, double b, double eps) {
        double r5353803 = eps;
        double r5353804 = a;
        double r5353805 = b;
        double r5353806 = r5353804 + r5353805;
        double r5353807 = r5353806 * r5353803;
        double r5353808 = exp(r5353807);
        double r5353809 = 1.0;
        double r5353810 = r5353808 - r5353809;
        double r5353811 = r5353803 * r5353810;
        double r5353812 = r5353804 * r5353803;
        double r5353813 = exp(r5353812);
        double r5353814 = r5353813 - r5353809;
        double r5353815 = r5353805 * r5353803;
        double r5353816 = exp(r5353815);
        double r5353817 = r5353816 - r5353809;
        double r5353818 = r5353814 * r5353817;
        double r5353819 = r5353811 / r5353818;
        return r5353819;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r5353820 = 1.0f;
        float r5353821 = b;
        float r5353822 = r5353820 / r5353821;
        float r5353823 = a;
        float r5353824 = r5353820 / r5353823;
        float r5353825 = r5353822 + r5353824;
        return r5353825;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r5353826 = 1.0;
        double r5353827 = b;
        double r5353828 = r5353826 / r5353827;
        double r5353829 = a;
        double r5353830 = r5353826 / r5353829;
        double r5353831 = r5353828 + r5353830;
        return r5353831;
}

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 r5353832, r5353833, r5353834, r5353835, r5353836, r5353837, r5353838, r5353839, r5353840, r5353841, r5353842, r5353843, r5353844, r5353845, r5353846, r5353847, r5353848;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353832);
        mpfr_init(r5353833);
        mpfr_init(r5353834);
        mpfr_init(r5353835);
        mpfr_init(r5353836);
        mpfr_init(r5353837);
        mpfr_init_set_str(r5353838, "1", 10, MPFR_RNDN);
        mpfr_init(r5353839);
        mpfr_init(r5353840);
        mpfr_init(r5353841);
        mpfr_init(r5353842);
        mpfr_init(r5353843);
        mpfr_init(r5353844);
        mpfr_init(r5353845);
        mpfr_init(r5353846);
        mpfr_init(r5353847);
        mpfr_init(r5353848);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r5353832, eps, MPFR_RNDN);
        mpfr_set_d(r5353833, a, MPFR_RNDN);
        mpfr_set_d(r5353834, b, MPFR_RNDN);
        mpfr_add(r5353835, r5353833, r5353834, MPFR_RNDN);
        mpfr_mul(r5353836, r5353835, r5353832, MPFR_RNDN);
        mpfr_exp(r5353837, r5353836, MPFR_RNDN);
        ;
        mpfr_sub(r5353839, r5353837, r5353838, MPFR_RNDN);
        mpfr_mul(r5353840, r5353832, r5353839, MPFR_RNDN);
        mpfr_mul(r5353841, r5353833, r5353832, MPFR_RNDN);
        mpfr_exp(r5353842, r5353841, MPFR_RNDN);
        mpfr_sub(r5353843, r5353842, r5353838, MPFR_RNDN);
        mpfr_mul(r5353844, r5353834, r5353832, MPFR_RNDN);
        mpfr_exp(r5353845, r5353844, MPFR_RNDN);
        mpfr_sub(r5353846, r5353845, r5353838, MPFR_RNDN);
        mpfr_mul(r5353847, r5353843, r5353846, MPFR_RNDN);
        mpfr_div(r5353848, r5353840, r5353847, MPFR_RNDN);
        return mpfr_get_d(r5353848, MPFR_RNDN);
}

static mpfr_t r5353849, r5353850, r5353851, r5353852, r5353853, r5353854;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5353849, "1", 10, MPFR_RNDN);
        mpfr_init(r5353850);
        mpfr_init(r5353851);
        mpfr_init(r5353852);
        mpfr_init(r5353853);
        mpfr_init(r5353854);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r5353850, b, MPFR_RNDN);
        mpfr_div(r5353851, r5353849, r5353850, MPFR_RNDN);
        mpfr_set_d(r5353852, a, MPFR_RNDN);
        mpfr_div(r5353853, r5353849, r5353852, MPFR_RNDN);
        mpfr_add(r5353854, r5353851, r5353853, MPFR_RNDN);
        return mpfr_get_d(r5353854, MPFR_RNDN);
}

static mpfr_t r5353855, r5353856, r5353857, r5353858, r5353859, r5353860;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5353855, "1", 10, MPFR_RNDN);
        mpfr_init(r5353856);
        mpfr_init(r5353857);
        mpfr_init(r5353858);
        mpfr_init(r5353859);
        mpfr_init(r5353860);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r5353856, b, MPFR_RNDN);
        mpfr_div(r5353857, r5353855, r5353856, MPFR_RNDN);
        mpfr_set_d(r5353858, a, MPFR_RNDN);
        mpfr_div(r5353859, r5353855, r5353858, MPFR_RNDN);
        mpfr_add(r5353860, r5353857, r5353859, MPFR_RNDN);
        return mpfr_get_d(r5353860, MPFR_RNDN);
}

