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

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

double f_if(float a, float b_2F2, float c) {
        float r5040202 = b_2F2;
        float r5040203 = -r5040202;
        float r5040204 = r5040202 * r5040202;
        float r5040205 = a;
        float r5040206 = c;
        float r5040207 = r5040205 * r5040206;
        float r5040208 = r5040204 - r5040207;
        float r5040209 = sqrt(r5040208);
        float r5040210 = r5040203 - r5040209;
        float r5040211 = r5040210 / r5040205;
        return r5040211;
}

double f_id(double a, double b_2F2, double c) {
        double r5040212 = b_2F2;
        double r5040213 = -r5040212;
        double r5040214 = r5040212 * r5040212;
        double r5040215 = a;
        double r5040216 = c;
        double r5040217 = r5040215 * r5040216;
        double r5040218 = r5040214 - r5040217;
        double r5040219 = sqrt(r5040218);
        double r5040220 = r5040213 - r5040219;
        double r5040221 = r5040220 / r5040215;
        return r5040221;
}


double f_of(float a, float b_2F2, float c) {
        float r5040222 = b_2F2;
        float r5040223 = -7.107724709955627e+136f;
        bool r5040224 = r5040222 <= r5040223;
        float r5040225 = c;
        float r5040226 = r5040225 / r5040222;
        float r5040227 = -0.5f;
        float r5040228 = r5040226 * r5040227;
        float r5040229 = 9.635810611632596e-305f;
        bool r5040230 = r5040222 <= r5040229;
        float r5040231 = -r5040222;
        float r5040232 = r5040222 * r5040222;
        float r5040233 = a;
        float r5040234 = r5040233 * r5040225;
        float r5040235 = r5040232 - r5040234;
        float r5040236 = sqrt(r5040235);
        float r5040237 = r5040231 + r5040236;
        float r5040238 = r5040225 / r5040237;
        float r5040239 = 9.656800156747535e+100f;
        bool r5040240 = r5040222 <= r5040239;
        float r5040241 = r5040231 - r5040236;
        float r5040242 = r5040241 / r5040233;
        float r5040243 = 0.5f;
        float r5040244 = r5040243 / r5040222;
        float r5040245 = r5040244 * r5040225;
        float r5040246 = 2.0f;
        float r5040247 = r5040222 / r5040233;
        float r5040248 = r5040246 * r5040247;
        float r5040249 = r5040245 - r5040248;
        float r5040250 = r5040240 ? r5040242 : r5040249;
        float r5040251 = r5040230 ? r5040238 : r5040250;
        float r5040252 = r5040224 ? r5040228 : r5040251;
        return r5040252;
}

double f_od(double a, double b_2F2, double c) {
        double r5040253 = b_2F2;
        double r5040254 = -7.107724709955627e+136;
        bool r5040255 = r5040253 <= r5040254;
        double r5040256 = c;
        double r5040257 = r5040256 / r5040253;
        double r5040258 = -0.5;
        double r5040259 = r5040257 * r5040258;
        double r5040260 = 9.635810611632596e-305;
        bool r5040261 = r5040253 <= r5040260;
        double r5040262 = -r5040253;
        double r5040263 = r5040253 * r5040253;
        double r5040264 = a;
        double r5040265 = r5040264 * r5040256;
        double r5040266 = r5040263 - r5040265;
        double r5040267 = sqrt(r5040266);
        double r5040268 = r5040262 + r5040267;
        double r5040269 = r5040256 / r5040268;
        double r5040270 = 9.656800156747535e+100;
        bool r5040271 = r5040253 <= r5040270;
        double r5040272 = r5040262 - r5040267;
        double r5040273 = r5040272 / r5040264;
        double r5040274 = 0.5;
        double r5040275 = r5040274 / r5040253;
        double r5040276 = r5040275 * r5040256;
        double r5040277 = 2.0;
        double r5040278 = r5040253 / r5040264;
        double r5040279 = r5040277 * r5040278;
        double r5040280 = r5040276 - r5040279;
        double r5040281 = r5040271 ? r5040273 : r5040280;
        double r5040282 = r5040261 ? r5040269 : r5040281;
        double r5040283 = r5040255 ? r5040259 : r5040282;
        return r5040283;
}

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 r5040284, r5040285, r5040286, r5040287, r5040288, r5040289, r5040290, r5040291, r5040292, r5040293;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040284);
        mpfr_init(r5040285);
        mpfr_init(r5040286);
        mpfr_init(r5040287);
        mpfr_init(r5040288);
        mpfr_init(r5040289);
        mpfr_init(r5040290);
        mpfr_init(r5040291);
        mpfr_init(r5040292);
        mpfr_init(r5040293);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r5040284, b_2F2, MPFR_RNDN);
        mpfr_neg(r5040285, r5040284, MPFR_RNDN);
        mpfr_sqr(r5040286, r5040284, MPFR_RNDN);
        mpfr_set_d(r5040287, a, MPFR_RNDN);
        mpfr_set_d(r5040288, c, MPFR_RNDN);
        mpfr_mul(r5040289, r5040287, r5040288, MPFR_RNDN);
        mpfr_sub(r5040290, r5040286, r5040289, MPFR_RNDN);
        mpfr_sqrt(r5040291, r5040290, MPFR_RNDN);
        mpfr_sub(r5040292, r5040285, r5040291, MPFR_RNDN);
        mpfr_div(r5040293, r5040292, r5040287, MPFR_RNDN);
        return mpfr_get_d(r5040293, MPFR_RNDN);
}

static mpfr_t r5040294, r5040295, r5040296, r5040297, r5040298, r5040299, r5040300, r5040301, r5040302, r5040303, r5040304, r5040305, r5040306, r5040307, r5040308, r5040309, r5040310, r5040311, r5040312, r5040313, r5040314, r5040315, r5040316, r5040317, r5040318, r5040319, r5040320, r5040321, r5040322, r5040323, r5040324;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040294);
        mpfr_init_set_str(r5040295, "-7.107724709955627e+136", 10, MPFR_RNDN);
        mpfr_init(r5040296);
        mpfr_init(r5040297);
        mpfr_init(r5040298);
        mpfr_init_set_str(r5040299, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r5040300);
        mpfr_init_set_str(r5040301, "9.635810611632596e-305", 10, MPFR_RNDN);
        mpfr_init(r5040302);
        mpfr_init(r5040303);
        mpfr_init(r5040304);
        mpfr_init(r5040305);
        mpfr_init(r5040306);
        mpfr_init(r5040307);
        mpfr_init(r5040308);
        mpfr_init(r5040309);
        mpfr_init(r5040310);
        mpfr_init_set_str(r5040311, "9.656800156747535e+100", 10, MPFR_RNDN);
        mpfr_init(r5040312);
        mpfr_init(r5040313);
        mpfr_init(r5040314);
        mpfr_init_set_str(r5040315, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5040316);
        mpfr_init(r5040317);
        mpfr_init_set_str(r5040318, "2", 10, MPFR_RNDN);
        mpfr_init(r5040319);
        mpfr_init(r5040320);
        mpfr_init(r5040321);
        mpfr_init(r5040322);
        mpfr_init(r5040323);
        mpfr_init(r5040324);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r5040294, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5040296, mpfr_cmp(r5040294, r5040295) <= 0, MPFR_RNDN);
        mpfr_set_d(r5040297, c, MPFR_RNDN);
        mpfr_div(r5040298, r5040297, r5040294, MPFR_RNDN);
        ;
        mpfr_mul(r5040300, r5040298, r5040299, MPFR_RNDN);
        ;
        mpfr_set_si(r5040302, mpfr_cmp(r5040294, r5040301) <= 0, MPFR_RNDN);
        mpfr_neg(r5040303, r5040294, MPFR_RNDN);
        mpfr_sqr(r5040304, r5040294, MPFR_RNDN);
        mpfr_set_d(r5040305, a, MPFR_RNDN);
        mpfr_mul(r5040306, r5040305, r5040297, MPFR_RNDN);
        mpfr_sub(r5040307, r5040304, r5040306, MPFR_RNDN);
        mpfr_sqrt(r5040308, r5040307, MPFR_RNDN);
        mpfr_add(r5040309, r5040303, r5040308, MPFR_RNDN);
        mpfr_div(r5040310, r5040297, r5040309, MPFR_RNDN);
        ;
        mpfr_set_si(r5040312, mpfr_cmp(r5040294, r5040311) <= 0, MPFR_RNDN);
        mpfr_sub(r5040313, r5040303, r5040308, MPFR_RNDN);
        mpfr_div(r5040314, r5040313, r5040305, MPFR_RNDN);
        ;
        mpfr_div(r5040316, r5040315, r5040294, MPFR_RNDN);
        mpfr_mul(r5040317, r5040316, r5040297, MPFR_RNDN);
        ;
        mpfr_div(r5040319, r5040294, r5040305, MPFR_RNDN);
        mpfr_mul(r5040320, r5040318, r5040319, MPFR_RNDN);
        mpfr_sub(r5040321, r5040317, r5040320, MPFR_RNDN);
        if (mpfr_get_si(r5040312, MPFR_RNDN)) { mpfr_set(r5040322, r5040314, MPFR_RNDN); } else { mpfr_set(r5040322, r5040321, MPFR_RNDN); };
        if (mpfr_get_si(r5040302, MPFR_RNDN)) { mpfr_set(r5040323, r5040310, MPFR_RNDN); } else { mpfr_set(r5040323, r5040322, MPFR_RNDN); };
        if (mpfr_get_si(r5040296, MPFR_RNDN)) { mpfr_set(r5040324, r5040300, MPFR_RNDN); } else { mpfr_set(r5040324, r5040323, MPFR_RNDN); };
        return mpfr_get_d(r5040324, MPFR_RNDN);
}

static mpfr_t r5040325, r5040326, r5040327, r5040328, r5040329, r5040330, r5040331, r5040332, r5040333, r5040334, r5040335, r5040336, r5040337, r5040338, r5040339, r5040340, r5040341, r5040342, r5040343, r5040344, r5040345, r5040346, r5040347, r5040348, r5040349, r5040350, r5040351, r5040352, r5040353, r5040354, r5040355;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040325);
        mpfr_init_set_str(r5040326, "-7.107724709955627e+136", 10, MPFR_RNDN);
        mpfr_init(r5040327);
        mpfr_init(r5040328);
        mpfr_init(r5040329);
        mpfr_init_set_str(r5040330, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r5040331);
        mpfr_init_set_str(r5040332, "9.635810611632596e-305", 10, MPFR_RNDN);
        mpfr_init(r5040333);
        mpfr_init(r5040334);
        mpfr_init(r5040335);
        mpfr_init(r5040336);
        mpfr_init(r5040337);
        mpfr_init(r5040338);
        mpfr_init(r5040339);
        mpfr_init(r5040340);
        mpfr_init(r5040341);
        mpfr_init_set_str(r5040342, "9.656800156747535e+100", 10, MPFR_RNDN);
        mpfr_init(r5040343);
        mpfr_init(r5040344);
        mpfr_init(r5040345);
        mpfr_init_set_str(r5040346, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5040347);
        mpfr_init(r5040348);
        mpfr_init_set_str(r5040349, "2", 10, MPFR_RNDN);
        mpfr_init(r5040350);
        mpfr_init(r5040351);
        mpfr_init(r5040352);
        mpfr_init(r5040353);
        mpfr_init(r5040354);
        mpfr_init(r5040355);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r5040325, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5040327, mpfr_cmp(r5040325, r5040326) <= 0, MPFR_RNDN);
        mpfr_set_d(r5040328, c, MPFR_RNDN);
        mpfr_div(r5040329, r5040328, r5040325, MPFR_RNDN);
        ;
        mpfr_mul(r5040331, r5040329, r5040330, MPFR_RNDN);
        ;
        mpfr_set_si(r5040333, mpfr_cmp(r5040325, r5040332) <= 0, MPFR_RNDN);
        mpfr_neg(r5040334, r5040325, MPFR_RNDN);
        mpfr_sqr(r5040335, r5040325, MPFR_RNDN);
        mpfr_set_d(r5040336, a, MPFR_RNDN);
        mpfr_mul(r5040337, r5040336, r5040328, MPFR_RNDN);
        mpfr_sub(r5040338, r5040335, r5040337, MPFR_RNDN);
        mpfr_sqrt(r5040339, r5040338, MPFR_RNDN);
        mpfr_add(r5040340, r5040334, r5040339, MPFR_RNDN);
        mpfr_div(r5040341, r5040328, r5040340, MPFR_RNDN);
        ;
        mpfr_set_si(r5040343, mpfr_cmp(r5040325, r5040342) <= 0, MPFR_RNDN);
        mpfr_sub(r5040344, r5040334, r5040339, MPFR_RNDN);
        mpfr_div(r5040345, r5040344, r5040336, MPFR_RNDN);
        ;
        mpfr_div(r5040347, r5040346, r5040325, MPFR_RNDN);
        mpfr_mul(r5040348, r5040347, r5040328, MPFR_RNDN);
        ;
        mpfr_div(r5040350, r5040325, r5040336, MPFR_RNDN);
        mpfr_mul(r5040351, r5040349, r5040350, MPFR_RNDN);
        mpfr_sub(r5040352, r5040348, r5040351, MPFR_RNDN);
        if (mpfr_get_si(r5040343, MPFR_RNDN)) { mpfr_set(r5040353, r5040345, MPFR_RNDN); } else { mpfr_set(r5040353, r5040352, MPFR_RNDN); };
        if (mpfr_get_si(r5040333, MPFR_RNDN)) { mpfr_set(r5040354, r5040341, MPFR_RNDN); } else { mpfr_set(r5040354, r5040353, MPFR_RNDN); };
        if (mpfr_get_si(r5040327, MPFR_RNDN)) { mpfr_set(r5040355, r5040331, MPFR_RNDN); } else { mpfr_set(r5040355, r5040354, MPFR_RNDN); };
        return mpfr_get_d(r5040355, MPFR_RNDN);
}

