#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 r4618782 = eps;
        float r4618783 = a;
        float r4618784 = b;
        float r4618785 = r4618783 + r4618784;
        float r4618786 = r4618785 * r4618782;
        float r4618787 = exp(r4618786);
        float r4618788 = 1.0f;
        float r4618789 = r4618787 - r4618788;
        float r4618790 = r4618782 * r4618789;
        float r4618791 = r4618783 * r4618782;
        float r4618792 = exp(r4618791);
        float r4618793 = r4618792 - r4618788;
        float r4618794 = r4618784 * r4618782;
        float r4618795 = exp(r4618794);
        float r4618796 = r4618795 - r4618788;
        float r4618797 = r4618793 * r4618796;
        float r4618798 = r4618790 / r4618797;
        return r4618798;
}

double f_id(double a, double b, double eps) {
        double r4618799 = eps;
        double r4618800 = a;
        double r4618801 = b;
        double r4618802 = r4618800 + r4618801;
        double r4618803 = r4618802 * r4618799;
        double r4618804 = exp(r4618803);
        double r4618805 = 1.0;
        double r4618806 = r4618804 - r4618805;
        double r4618807 = r4618799 * r4618806;
        double r4618808 = r4618800 * r4618799;
        double r4618809 = exp(r4618808);
        double r4618810 = r4618809 - r4618805;
        double r4618811 = r4618801 * r4618799;
        double r4618812 = exp(r4618811);
        double r4618813 = r4618812 - r4618805;
        double r4618814 = r4618810 * r4618813;
        double r4618815 = r4618807 / r4618814;
        return r4618815;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r4618816 = 1.0f;
        float r4618817 = b;
        float r4618818 = r4618816 / r4618817;
        float r4618819 = a;
        float r4618820 = r4618816 / r4618819;
        float r4618821 = r4618818 + r4618820;
        return r4618821;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r4618822 = 1.0;
        double r4618823 = b;
        double r4618824 = r4618822 / r4618823;
        double r4618825 = a;
        double r4618826 = r4618822 / r4618825;
        double r4618827 = r4618824 + r4618826;
        return r4618827;
}

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 r4618828, r4618829, r4618830, r4618831, r4618832, r4618833, r4618834, r4618835, r4618836, r4618837, r4618838, r4618839, r4618840, r4618841, r4618842, r4618843, r4618844;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618828);
        mpfr_init(r4618829);
        mpfr_init(r4618830);
        mpfr_init(r4618831);
        mpfr_init(r4618832);
        mpfr_init(r4618833);
        mpfr_init_set_str(r4618834, "1", 10, MPFR_RNDN);
        mpfr_init(r4618835);
        mpfr_init(r4618836);
        mpfr_init(r4618837);
        mpfr_init(r4618838);
        mpfr_init(r4618839);
        mpfr_init(r4618840);
        mpfr_init(r4618841);
        mpfr_init(r4618842);
        mpfr_init(r4618843);
        mpfr_init(r4618844);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r4618828, eps, MPFR_RNDN);
        mpfr_set_d(r4618829, a, MPFR_RNDN);
        mpfr_set_d(r4618830, b, MPFR_RNDN);
        mpfr_add(r4618831, r4618829, r4618830, MPFR_RNDN);
        mpfr_mul(r4618832, r4618831, r4618828, MPFR_RNDN);
        mpfr_exp(r4618833, r4618832, MPFR_RNDN);
        ;
        mpfr_sub(r4618835, r4618833, r4618834, MPFR_RNDN);
        mpfr_mul(r4618836, r4618828, r4618835, MPFR_RNDN);
        mpfr_mul(r4618837, r4618829, r4618828, MPFR_RNDN);
        mpfr_exp(r4618838, r4618837, MPFR_RNDN);
        mpfr_sub(r4618839, r4618838, r4618834, MPFR_RNDN);
        mpfr_mul(r4618840, r4618830, r4618828, MPFR_RNDN);
        mpfr_exp(r4618841, r4618840, MPFR_RNDN);
        mpfr_sub(r4618842, r4618841, r4618834, MPFR_RNDN);
        mpfr_mul(r4618843, r4618839, r4618842, MPFR_RNDN);
        mpfr_div(r4618844, r4618836, r4618843, MPFR_RNDN);
        return mpfr_get_d(r4618844, MPFR_RNDN);
}

static mpfr_t r4618845, r4618846, r4618847, r4618848, r4618849, r4618850;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4618845, "1", 10, MPFR_RNDN);
        mpfr_init(r4618846);
        mpfr_init(r4618847);
        mpfr_init(r4618848);
        mpfr_init(r4618849);
        mpfr_init(r4618850);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r4618846, b, MPFR_RNDN);
        mpfr_div(r4618847, r4618845, r4618846, MPFR_RNDN);
        mpfr_set_d(r4618848, a, MPFR_RNDN);
        mpfr_div(r4618849, r4618845, r4618848, MPFR_RNDN);
        mpfr_add(r4618850, r4618847, r4618849, MPFR_RNDN);
        return mpfr_get_d(r4618850, MPFR_RNDN);
}

static mpfr_t r4618851, r4618852, r4618853, r4618854, r4618855, r4618856;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4618851, "1", 10, MPFR_RNDN);
        mpfr_init(r4618852);
        mpfr_init(r4618853);
        mpfr_init(r4618854);
        mpfr_init(r4618855);
        mpfr_init(r4618856);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r4618852, b, MPFR_RNDN);
        mpfr_div(r4618853, r4618851, r4618852, MPFR_RNDN);
        mpfr_set_d(r4618854, a, MPFR_RNDN);
        mpfr_div(r4618855, r4618851, r4618854, MPFR_RNDN);
        mpfr_add(r4618856, r4618853, r4618855, MPFR_RNDN);
        return mpfr_get_d(r4618856, MPFR_RNDN);
}

