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

char *name = "NMSE Section 6.1 mentioned, B";

double f_if(float a, float b) {
        float r28250 = atan2(1.0, 0.0);
        float r28251 = 2;
        float r28252 = r28250 / r28251;
        float r28253 = 1;
        float r28254 = b;
        float r28255 = r28254 * r28254;
        float r28256 = a;
        float r28257 = r28256 * r28256;
        float r28258 = r28255 - r28257;
        float r28259 = r28253 / r28258;
        float r28260 = r28252 * r28259;
        float r28261 = r28253 / r28256;
        float r28262 = r28253 / r28254;
        float r28263 = r28261 - r28262;
        float r28264 = r28260 * r28263;
        return r28264;
}

double f_id(double a, double b) {
        double r28265 = atan2(1.0, 0.0);
        double r28266 = 2;
        double r28267 = r28265 / r28266;
        double r28268 = 1;
        double r28269 = b;
        double r28270 = r28269 * r28269;
        double r28271 = a;
        double r28272 = r28271 * r28271;
        double r28273 = r28270 - r28272;
        double r28274 = r28268 / r28273;
        double r28275 = r28267 * r28274;
        double r28276 = r28268 / r28271;
        double r28277 = r28268 / r28269;
        double r28278 = r28276 - r28277;
        double r28279 = r28275 * r28278;
        return r28279;
}


double f_of(float a, float b) {
        float r28280 = atan2(1.0, 0.0);
        float r28281 = 2;
        float r28282 = r28280 / r28281;
        float r28283 = b;
        float r28284 = a;
        float r28285 = r28283 + r28284;
        float r28286 = r28282 / r28285;
        float r28287 = 1;
        float r28288 = r28284 * r28283;
        float r28289 = r28287 / r28288;
        float r28290 = r28286 * r28289;
        return r28290;
}

double f_od(double a, double b) {
        double r28291 = atan2(1.0, 0.0);
        double r28292 = 2;
        double r28293 = r28291 / r28292;
        double r28294 = b;
        double r28295 = a;
        double r28296 = r28294 + r28295;
        double r28297 = r28293 / r28296;
        double r28298 = 1;
        double r28299 = r28295 * r28294;
        double r28300 = r28298 / r28299;
        double r28301 = r28297 * r28300;
        return r28301;
}

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 r28302, r28303, r28304, r28305, r28306, r28307, r28308, r28309, r28310, r28311, r28312, r28313, r28314, r28315, r28316;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28302);
        mpfr_init_set_str(r28303, "2", 10, MPFR_RNDN);
        mpfr_init(r28304);
        mpfr_init_set_str(r28305, "1", 10, MPFR_RNDN);
        mpfr_init(r28306);
        mpfr_init(r28307);
        mpfr_init(r28308);
        mpfr_init(r28309);
        mpfr_init(r28310);
        mpfr_init(r28311);
        mpfr_init(r28312);
        mpfr_init(r28313);
        mpfr_init(r28314);
        mpfr_init(r28315);
        mpfr_init(r28316);
}

double f_im(double a, double b) {
        mpfr_const_pi(r28302, MPFR_RNDN);
        ;
        mpfr_div(r28304, r28302, r28303, MPFR_RNDN);
        ;
        mpfr_set_d(r28306, b, MPFR_RNDN);
        mpfr_mul(r28307, r28306, r28306, MPFR_RNDN);
        mpfr_set_d(r28308, a, MPFR_RNDN);
        mpfr_mul(r28309, r28308, r28308, MPFR_RNDN);
        mpfr_sub(r28310, r28307, r28309, MPFR_RNDN);
        mpfr_div(r28311, r28305, r28310, MPFR_RNDN);
        mpfr_mul(r28312, r28304, r28311, MPFR_RNDN);
        mpfr_div(r28313, r28305, r28308, MPFR_RNDN);
        mpfr_div(r28314, r28305, r28306, MPFR_RNDN);
        mpfr_sub(r28315, r28313, r28314, MPFR_RNDN);
        mpfr_mul(r28316, r28312, r28315, MPFR_RNDN);
        return mpfr_get_d(r28316, MPFR_RNDN);
}

static mpfr_t r28317, r28318, r28319, r28320, r28321, r28322, r28323, r28324, r28325, r28326, r28327;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28317);
        mpfr_init_set_str(r28318, "2", 10, MPFR_RNDN);
        mpfr_init(r28319);
        mpfr_init(r28320);
        mpfr_init(r28321);
        mpfr_init(r28322);
        mpfr_init(r28323);
        mpfr_init_set_str(r28324, "1", 10, MPFR_RNDN);
        mpfr_init(r28325);
        mpfr_init(r28326);
        mpfr_init(r28327);
}

double f_fm(double a, double b) {
        mpfr_const_pi(r28317, MPFR_RNDN);
        ;
        mpfr_div(r28319, r28317, r28318, MPFR_RNDN);
        mpfr_set_d(r28320, b, MPFR_RNDN);
        mpfr_set_d(r28321, a, MPFR_RNDN);
        mpfr_add(r28322, r28320, r28321, MPFR_RNDN);
        mpfr_div(r28323, r28319, r28322, MPFR_RNDN);
        ;
        mpfr_mul(r28325, r28321, r28320, MPFR_RNDN);
        mpfr_div(r28326, r28324, r28325, MPFR_RNDN);
        mpfr_mul(r28327, r28323, r28326, MPFR_RNDN);
        return mpfr_get_d(r28327, MPFR_RNDN);
}

static mpfr_t r28328, r28329, r28330, r28331, r28332, r28333, r28334, r28335, r28336, r28337, r28338;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28328);
        mpfr_init_set_str(r28329, "2", 10, MPFR_RNDN);
        mpfr_init(r28330);
        mpfr_init(r28331);
        mpfr_init(r28332);
        mpfr_init(r28333);
        mpfr_init(r28334);
        mpfr_init_set_str(r28335, "1", 10, MPFR_RNDN);
        mpfr_init(r28336);
        mpfr_init(r28337);
        mpfr_init(r28338);
}

double f_dm(double a, double b) {
        mpfr_const_pi(r28328, MPFR_RNDN);
        ;
        mpfr_div(r28330, r28328, r28329, MPFR_RNDN);
        mpfr_set_d(r28331, b, MPFR_RNDN);
        mpfr_set_d(r28332, a, MPFR_RNDN);
        mpfr_add(r28333, r28331, r28332, MPFR_RNDN);
        mpfr_div(r28334, r28330, r28333, MPFR_RNDN);
        ;
        mpfr_mul(r28336, r28332, r28331, MPFR_RNDN);
        mpfr_div(r28337, r28335, r28336, MPFR_RNDN);
        mpfr_mul(r28338, r28334, r28337, MPFR_RNDN);
        return mpfr_get_d(r28338, MPFR_RNDN);
}

