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

char *name = "NMSE problem 3.2.1, positive";

double f_if(float a, float b_2F2, float c) {
        float r5353195 = b_2F2;
        float r5353196 = -r5353195;
        float r5353197 = r5353195 * r5353195;
        float r5353198 = a;
        float r5353199 = c;
        float r5353200 = r5353198 * r5353199;
        float r5353201 = r5353197 - r5353200;
        float r5353202 = sqrt(r5353201);
        float r5353203 = r5353196 + r5353202;
        float r5353204 = r5353203 / r5353198;
        return r5353204;
}

double f_id(double a, double b_2F2, double c) {
        double r5353205 = b_2F2;
        double r5353206 = -r5353205;
        double r5353207 = r5353205 * r5353205;
        double r5353208 = a;
        double r5353209 = c;
        double r5353210 = r5353208 * r5353209;
        double r5353211 = r5353207 - r5353210;
        double r5353212 = sqrt(r5353211);
        double r5353213 = r5353206 + r5353212;
        double r5353214 = r5353213 / r5353208;
        return r5353214;
}


double f_of(float a, float b_2F2, float c) {
        float r5353215 = b_2F2;
        float r5353216 = -5.275923490878762e+150f;
        bool r5353217 = r5353215 <= r5353216;
        float r5353218 = -2.0f;
        float r5353219 = a;
        float r5353220 = r5353215 / r5353219;
        float r5353221 = r5353218 * r5353220;
        float r5353222 = -2.8117296895841062e-251f;
        bool r5353223 = r5353215 <= r5353222;
        float r5353224 = -r5353215;
        float r5353225 = r5353215 * r5353215;
        float r5353226 = c;
        float r5353227 = r5353219 * r5353226;
        float r5353228 = r5353225 - r5353227;
        float r5353229 = sqrt(r5353228);
        float r5353230 = r5353224 + r5353229;
        float r5353231 = r5353230 / r5353219;
        float r5353232 = 6.193250476192916e+56f;
        bool r5353233 = r5353215 <= r5353232;
        float r5353234 = 1.0f;
        float r5353235 = r5353215 * r5353215;
        float r5353236 = r5353226 * r5353219;
        float r5353237 = r5353235 - r5353236;
        float r5353238 = sqrt(r5353237);
        float r5353239 = r5353224 - r5353238;
        float r5353240 = r5353239 / r5353226;
        float r5353241 = r5353234 / r5353240;
        float r5353242 = 0.5f;
        float r5353243 = r5353219 * r5353242;
        float r5353244 = r5353215 / r5353226;
        float r5353245 = r5353243 / r5353244;
        float r5353246 = r5353224 - r5353215;
        float r5353247 = r5353245 + r5353246;
        float r5353248 = r5353226 / r5353247;
        float r5353249 = r5353233 ? r5353241 : r5353248;
        float r5353250 = r5353223 ? r5353231 : r5353249;
        float r5353251 = r5353217 ? r5353221 : r5353250;
        return r5353251;
}

double f_od(double a, double b_2F2, double c) {
        double r5353252 = b_2F2;
        double r5353253 = -5.275923490878762e+150;
        bool r5353254 = r5353252 <= r5353253;
        double r5353255 = -2.0;
        double r5353256 = a;
        double r5353257 = r5353252 / r5353256;
        double r5353258 = r5353255 * r5353257;
        double r5353259 = -2.8117296895841062e-251;
        bool r5353260 = r5353252 <= r5353259;
        double r5353261 = -r5353252;
        double r5353262 = r5353252 * r5353252;
        double r5353263 = c;
        double r5353264 = r5353256 * r5353263;
        double r5353265 = r5353262 - r5353264;
        double r5353266 = sqrt(r5353265);
        double r5353267 = r5353261 + r5353266;
        double r5353268 = r5353267 / r5353256;
        double r5353269 = 6.193250476192916e+56;
        bool r5353270 = r5353252 <= r5353269;
        double r5353271 = 1.0;
        double r5353272 = r5353252 * r5353252;
        double r5353273 = r5353263 * r5353256;
        double r5353274 = r5353272 - r5353273;
        double r5353275 = sqrt(r5353274);
        double r5353276 = r5353261 - r5353275;
        double r5353277 = r5353276 / r5353263;
        double r5353278 = r5353271 / r5353277;
        double r5353279 = 0.5;
        double r5353280 = r5353256 * r5353279;
        double r5353281 = r5353252 / r5353263;
        double r5353282 = r5353280 / r5353281;
        double r5353283 = r5353261 - r5353252;
        double r5353284 = r5353282 + r5353283;
        double r5353285 = r5353263 / r5353284;
        double r5353286 = r5353270 ? r5353278 : r5353285;
        double r5353287 = r5353260 ? r5353268 : r5353286;
        double r5353288 = r5353254 ? r5353258 : r5353287;
        return r5353288;
}

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 r5353289, r5353290, r5353291, r5353292, r5353293, r5353294, r5353295, r5353296, r5353297, r5353298;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353289);
        mpfr_init(r5353290);
        mpfr_init(r5353291);
        mpfr_init(r5353292);
        mpfr_init(r5353293);
        mpfr_init(r5353294);
        mpfr_init(r5353295);
        mpfr_init(r5353296);
        mpfr_init(r5353297);
        mpfr_init(r5353298);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r5353289, b_2F2, MPFR_RNDN);
        mpfr_neg(r5353290, r5353289, MPFR_RNDN);
        mpfr_sqr(r5353291, r5353289, MPFR_RNDN);
        mpfr_set_d(r5353292, a, MPFR_RNDN);
        mpfr_set_d(r5353293, c, MPFR_RNDN);
        mpfr_mul(r5353294, r5353292, r5353293, MPFR_RNDN);
        mpfr_sub(r5353295, r5353291, r5353294, MPFR_RNDN);
        mpfr_sqrt(r5353296, r5353295, MPFR_RNDN);
        mpfr_add(r5353297, r5353290, r5353296, MPFR_RNDN);
        mpfr_div(r5353298, r5353297, r5353292, MPFR_RNDN);
        return mpfr_get_d(r5353298, MPFR_RNDN);
}

static mpfr_t r5353299, r5353300, r5353301, r5353302, r5353303, r5353304, r5353305, r5353306, r5353307, r5353308, r5353309, r5353310, r5353311, r5353312, r5353313, r5353314, r5353315, r5353316, r5353317, r5353318, r5353319, r5353320, r5353321, r5353322, r5353323, r5353324, r5353325, r5353326, r5353327, r5353328, r5353329, r5353330, r5353331, r5353332, r5353333, r5353334, r5353335;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353299);
        mpfr_init_set_str(r5353300, "-5.275923490878762e+150", 10, MPFR_RNDN);
        mpfr_init(r5353301);
        mpfr_init_set_str(r5353302, "-2", 10, MPFR_RNDN);
        mpfr_init(r5353303);
        mpfr_init(r5353304);
        mpfr_init(r5353305);
        mpfr_init_set_str(r5353306, "-2.8117296895841062e-251", 10, MPFR_RNDN);
        mpfr_init(r5353307);
        mpfr_init(r5353308);
        mpfr_init(r5353309);
        mpfr_init(r5353310);
        mpfr_init(r5353311);
        mpfr_init(r5353312);
        mpfr_init(r5353313);
        mpfr_init(r5353314);
        mpfr_init(r5353315);
        mpfr_init_set_str(r5353316, "6.193250476192916e+56", 10, MPFR_RNDN);
        mpfr_init(r5353317);
        mpfr_init_set_str(r5353318, "1", 10, MPFR_RNDN);
        mpfr_init(r5353319);
        mpfr_init(r5353320);
        mpfr_init(r5353321);
        mpfr_init(r5353322);
        mpfr_init(r5353323);
        mpfr_init(r5353324);
        mpfr_init(r5353325);
        mpfr_init_set_str(r5353326, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5353327);
        mpfr_init(r5353328);
        mpfr_init(r5353329);
        mpfr_init(r5353330);
        mpfr_init(r5353331);
        mpfr_init(r5353332);
        mpfr_init(r5353333);
        mpfr_init(r5353334);
        mpfr_init(r5353335);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r5353299, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5353301, mpfr_cmp(r5353299, r5353300) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5353303, a, MPFR_RNDN);
        mpfr_div(r5353304, r5353299, r5353303, MPFR_RNDN);
        mpfr_mul(r5353305, r5353302, r5353304, MPFR_RNDN);
        ;
        mpfr_set_si(r5353307, mpfr_cmp(r5353299, r5353306) <= 0, MPFR_RNDN);
        mpfr_neg(r5353308, r5353299, MPFR_RNDN);
        mpfr_sqr(r5353309, r5353299, MPFR_RNDN);
        mpfr_set_d(r5353310, c, MPFR_RNDN);
        mpfr_mul(r5353311, r5353303, r5353310, MPFR_RNDN);
        mpfr_sub(r5353312, r5353309, r5353311, MPFR_RNDN);
        mpfr_sqrt(r5353313, r5353312, MPFR_RNDN);
        mpfr_add(r5353314, r5353308, r5353313, MPFR_RNDN);
        mpfr_div(r5353315, r5353314, r5353303, MPFR_RNDN);
        ;
        mpfr_set_si(r5353317, mpfr_cmp(r5353299, r5353316) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5353319, r5353299, r5353299, MPFR_RNDN);
        mpfr_mul(r5353320, r5353310, r5353303, MPFR_RNDN);
        mpfr_sub(r5353321, r5353319, r5353320, MPFR_RNDN);
        mpfr_sqrt(r5353322, r5353321, MPFR_RNDN);
        mpfr_sub(r5353323, r5353308, r5353322, MPFR_RNDN);
        mpfr_div(r5353324, r5353323, r5353310, MPFR_RNDN);
        mpfr_div(r5353325, r5353318, r5353324, MPFR_RNDN);
        ;
        mpfr_mul(r5353327, r5353303, r5353326, MPFR_RNDN);
        mpfr_div(r5353328, r5353299, r5353310, MPFR_RNDN);
        mpfr_div(r5353329, r5353327, r5353328, MPFR_RNDN);
        mpfr_sub(r5353330, r5353308, r5353299, MPFR_RNDN);
        mpfr_add(r5353331, r5353329, r5353330, MPFR_RNDN);
        mpfr_div(r5353332, r5353310, r5353331, MPFR_RNDN);
        if (mpfr_get_si(r5353317, MPFR_RNDN)) { mpfr_set(r5353333, r5353325, MPFR_RNDN); } else { mpfr_set(r5353333, r5353332, MPFR_RNDN); };
        if (mpfr_get_si(r5353307, MPFR_RNDN)) { mpfr_set(r5353334, r5353315, MPFR_RNDN); } else { mpfr_set(r5353334, r5353333, MPFR_RNDN); };
        if (mpfr_get_si(r5353301, MPFR_RNDN)) { mpfr_set(r5353335, r5353305, MPFR_RNDN); } else { mpfr_set(r5353335, r5353334, MPFR_RNDN); };
        return mpfr_get_d(r5353335, MPFR_RNDN);
}

static mpfr_t r5353336, r5353337, r5353338, r5353339, r5353340, r5353341, r5353342, r5353343, r5353344, r5353345, r5353346, r5353347, r5353348, r5353349, r5353350, r5353351, r5353352, r5353353, r5353354, r5353355, r5353356, r5353357, r5353358, r5353359, r5353360, r5353361, r5353362, r5353363, r5353364, r5353365, r5353366, r5353367, r5353368, r5353369, r5353370, r5353371, r5353372;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353336);
        mpfr_init_set_str(r5353337, "-5.275923490878762e+150", 10, MPFR_RNDN);
        mpfr_init(r5353338);
        mpfr_init_set_str(r5353339, "-2", 10, MPFR_RNDN);
        mpfr_init(r5353340);
        mpfr_init(r5353341);
        mpfr_init(r5353342);
        mpfr_init_set_str(r5353343, "-2.8117296895841062e-251", 10, MPFR_RNDN);
        mpfr_init(r5353344);
        mpfr_init(r5353345);
        mpfr_init(r5353346);
        mpfr_init(r5353347);
        mpfr_init(r5353348);
        mpfr_init(r5353349);
        mpfr_init(r5353350);
        mpfr_init(r5353351);
        mpfr_init(r5353352);
        mpfr_init_set_str(r5353353, "6.193250476192916e+56", 10, MPFR_RNDN);
        mpfr_init(r5353354);
        mpfr_init_set_str(r5353355, "1", 10, MPFR_RNDN);
        mpfr_init(r5353356);
        mpfr_init(r5353357);
        mpfr_init(r5353358);
        mpfr_init(r5353359);
        mpfr_init(r5353360);
        mpfr_init(r5353361);
        mpfr_init(r5353362);
        mpfr_init_set_str(r5353363, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5353364);
        mpfr_init(r5353365);
        mpfr_init(r5353366);
        mpfr_init(r5353367);
        mpfr_init(r5353368);
        mpfr_init(r5353369);
        mpfr_init(r5353370);
        mpfr_init(r5353371);
        mpfr_init(r5353372);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r5353336, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5353338, mpfr_cmp(r5353336, r5353337) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5353340, a, MPFR_RNDN);
        mpfr_div(r5353341, r5353336, r5353340, MPFR_RNDN);
        mpfr_mul(r5353342, r5353339, r5353341, MPFR_RNDN);
        ;
        mpfr_set_si(r5353344, mpfr_cmp(r5353336, r5353343) <= 0, MPFR_RNDN);
        mpfr_neg(r5353345, r5353336, MPFR_RNDN);
        mpfr_sqr(r5353346, r5353336, MPFR_RNDN);
        mpfr_set_d(r5353347, c, MPFR_RNDN);
        mpfr_mul(r5353348, r5353340, r5353347, MPFR_RNDN);
        mpfr_sub(r5353349, r5353346, r5353348, MPFR_RNDN);
        mpfr_sqrt(r5353350, r5353349, MPFR_RNDN);
        mpfr_add(r5353351, r5353345, r5353350, MPFR_RNDN);
        mpfr_div(r5353352, r5353351, r5353340, MPFR_RNDN);
        ;
        mpfr_set_si(r5353354, mpfr_cmp(r5353336, r5353353) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5353356, r5353336, r5353336, MPFR_RNDN);
        mpfr_mul(r5353357, r5353347, r5353340, MPFR_RNDN);
        mpfr_sub(r5353358, r5353356, r5353357, MPFR_RNDN);
        mpfr_sqrt(r5353359, r5353358, MPFR_RNDN);
        mpfr_sub(r5353360, r5353345, r5353359, MPFR_RNDN);
        mpfr_div(r5353361, r5353360, r5353347, MPFR_RNDN);
        mpfr_div(r5353362, r5353355, r5353361, MPFR_RNDN);
        ;
        mpfr_mul(r5353364, r5353340, r5353363, MPFR_RNDN);
        mpfr_div(r5353365, r5353336, r5353347, MPFR_RNDN);
        mpfr_div(r5353366, r5353364, r5353365, MPFR_RNDN);
        mpfr_sub(r5353367, r5353345, r5353336, MPFR_RNDN);
        mpfr_add(r5353368, r5353366, r5353367, MPFR_RNDN);
        mpfr_div(r5353369, r5353347, r5353368, MPFR_RNDN);
        if (mpfr_get_si(r5353354, MPFR_RNDN)) { mpfr_set(r5353370, r5353362, MPFR_RNDN); } else { mpfr_set(r5353370, r5353369, MPFR_RNDN); };
        if (mpfr_get_si(r5353344, MPFR_RNDN)) { mpfr_set(r5353371, r5353352, MPFR_RNDN); } else { mpfr_set(r5353371, r5353370, MPFR_RNDN); };
        if (mpfr_get_si(r5353338, MPFR_RNDN)) { mpfr_set(r5353372, r5353342, MPFR_RNDN); } else { mpfr_set(r5353372, r5353371, MPFR_RNDN); };
        return mpfr_get_d(r5353372, MPFR_RNDN);
}

