#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 r4774151 = b_2F2;
        float r4774152 = -r4774151;
        float r4774153 = r4774151 * r4774151;
        float r4774154 = a;
        float r4774155 = c;
        float r4774156 = r4774154 * r4774155;
        float r4774157 = r4774153 - r4774156;
        float r4774158 = sqrt(r4774157);
        float r4774159 = r4774152 + r4774158;
        float r4774160 = r4774159 / r4774154;
        return r4774160;
}

double f_id(double a, double b_2F2, double c) {
        double r4774161 = b_2F2;
        double r4774162 = -r4774161;
        double r4774163 = r4774161 * r4774161;
        double r4774164 = a;
        double r4774165 = c;
        double r4774166 = r4774164 * r4774165;
        double r4774167 = r4774163 - r4774166;
        double r4774168 = sqrt(r4774167);
        double r4774169 = r4774162 + r4774168;
        double r4774170 = r4774169 / r4774164;
        return r4774170;
}


double f_of(float a, float b_2F2, float c) {
        float r4774171 = b_2F2;
        float r4774172 = -1.7321058520772784e+67f;
        bool r4774173 = r4774171 <= r4774172;
        float r4774174 = -2.0f;
        float r4774175 = a;
        float r4774176 = r4774171 / r4774175;
        float r4774177 = r4774174 * r4774176;
        float r4774178 = 1.922375846709798e-232f;
        bool r4774179 = r4774171 <= r4774178;
        float r4774180 = -r4774171;
        float r4774181 = r4774171 * r4774171;
        float r4774182 = c;
        float r4774183 = r4774175 * r4774182;
        float r4774184 = r4774181 - r4774183;
        float r4774185 = sqrt(r4774184);
        float r4774186 = r4774180 + r4774185;
        float r4774187 = 1.0f;
        float r4774188 = r4774187 / r4774175;
        float r4774189 = r4774186 * r4774188;
        float r4774190 = 1438490.0801097094f;
        bool r4774191 = r4774171 <= r4774190;
        float r4774192 = r4774180 - r4774185;
        float r4774193 = r4774183 / r4774192;
        float r4774194 = r4774193 * r4774188;
        float r4774195 = r4774180 - r4774171;
        float r4774196 = 0.5f;
        float r4774197 = r4774182 * r4774196;
        float r4774198 = r4774197 / r4774176;
        float r4774199 = r4774195 + r4774198;
        float r4774200 = r4774182 / r4774199;
        float r4774201 = r4774191 ? r4774194 : r4774200;
        float r4774202 = r4774179 ? r4774189 : r4774201;
        float r4774203 = r4774173 ? r4774177 : r4774202;
        return r4774203;
}

double f_od(double a, double b_2F2, double c) {
        double r4774204 = b_2F2;
        double r4774205 = -1.7321058520772784e+67;
        bool r4774206 = r4774204 <= r4774205;
        double r4774207 = -2.0;
        double r4774208 = a;
        double r4774209 = r4774204 / r4774208;
        double r4774210 = r4774207 * r4774209;
        double r4774211 = 1.922375846709798e-232;
        bool r4774212 = r4774204 <= r4774211;
        double r4774213 = -r4774204;
        double r4774214 = r4774204 * r4774204;
        double r4774215 = c;
        double r4774216 = r4774208 * r4774215;
        double r4774217 = r4774214 - r4774216;
        double r4774218 = sqrt(r4774217);
        double r4774219 = r4774213 + r4774218;
        double r4774220 = 1.0;
        double r4774221 = r4774220 / r4774208;
        double r4774222 = r4774219 * r4774221;
        double r4774223 = 1438490.0801097094;
        bool r4774224 = r4774204 <= r4774223;
        double r4774225 = r4774213 - r4774218;
        double r4774226 = r4774216 / r4774225;
        double r4774227 = r4774226 * r4774221;
        double r4774228 = r4774213 - r4774204;
        double r4774229 = 0.5;
        double r4774230 = r4774215 * r4774229;
        double r4774231 = r4774230 / r4774209;
        double r4774232 = r4774228 + r4774231;
        double r4774233 = r4774215 / r4774232;
        double r4774234 = r4774224 ? r4774227 : r4774233;
        double r4774235 = r4774212 ? r4774222 : r4774234;
        double r4774236 = r4774206 ? r4774210 : r4774235;
        return r4774236;
}

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 r4774237, r4774238, r4774239, r4774240, r4774241, r4774242, r4774243, r4774244, r4774245, r4774246;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774237);
        mpfr_init(r4774238);
        mpfr_init(r4774239);
        mpfr_init(r4774240);
        mpfr_init(r4774241);
        mpfr_init(r4774242);
        mpfr_init(r4774243);
        mpfr_init(r4774244);
        mpfr_init(r4774245);
        mpfr_init(r4774246);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r4774237, b_2F2, MPFR_RNDN);
        mpfr_neg(r4774238, r4774237, MPFR_RNDN);
        mpfr_sqr(r4774239, r4774237, MPFR_RNDN);
        mpfr_set_d(r4774240, a, MPFR_RNDN);
        mpfr_set_d(r4774241, c, MPFR_RNDN);
        mpfr_mul(r4774242, r4774240, r4774241, MPFR_RNDN);
        mpfr_sub(r4774243, r4774239, r4774242, MPFR_RNDN);
        mpfr_sqrt(r4774244, r4774243, MPFR_RNDN);
        mpfr_add(r4774245, r4774238, r4774244, MPFR_RNDN);
        mpfr_div(r4774246, r4774245, r4774240, MPFR_RNDN);
        return mpfr_get_d(r4774246, MPFR_RNDN);
}

static mpfr_t r4774247, r4774248, r4774249, r4774250, r4774251, r4774252, r4774253, r4774254, r4774255, r4774256, r4774257, r4774258, r4774259, r4774260, r4774261, r4774262, r4774263, r4774264, r4774265, r4774266, r4774267, r4774268, r4774269, r4774270, r4774271, r4774272, r4774273, r4774274, r4774275, r4774276, r4774277, r4774278, r4774279;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774247);
        mpfr_init_set_str(r4774248, "-1.7321058520772784e+67", 10, MPFR_RNDN);
        mpfr_init(r4774249);
        mpfr_init_set_str(r4774250, "-2", 10, MPFR_RNDN);
        mpfr_init(r4774251);
        mpfr_init(r4774252);
        mpfr_init(r4774253);
        mpfr_init_set_str(r4774254, "1.922375846709798e-232", 10, MPFR_RNDN);
        mpfr_init(r4774255);
        mpfr_init(r4774256);
        mpfr_init(r4774257);
        mpfr_init(r4774258);
        mpfr_init(r4774259);
        mpfr_init(r4774260);
        mpfr_init(r4774261);
        mpfr_init(r4774262);
        mpfr_init_set_str(r4774263, "1", 10, MPFR_RNDN);
        mpfr_init(r4774264);
        mpfr_init(r4774265);
        mpfr_init_set_str(r4774266, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4774267);
        mpfr_init(r4774268);
        mpfr_init(r4774269);
        mpfr_init(r4774270);
        mpfr_init(r4774271);
        mpfr_init_set_str(r4774272, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4774273);
        mpfr_init(r4774274);
        mpfr_init(r4774275);
        mpfr_init(r4774276);
        mpfr_init(r4774277);
        mpfr_init(r4774278);
        mpfr_init(r4774279);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r4774247, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4774249, mpfr_cmp(r4774247, r4774248) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r4774251, a, MPFR_RNDN);
        mpfr_div(r4774252, r4774247, r4774251, MPFR_RNDN);
        mpfr_mul(r4774253, r4774250, r4774252, MPFR_RNDN);
        ;
        mpfr_set_si(r4774255, mpfr_cmp(r4774247, r4774254) <= 0, MPFR_RNDN);
        mpfr_neg(r4774256, r4774247, MPFR_RNDN);
        mpfr_sqr(r4774257, r4774247, MPFR_RNDN);
        mpfr_set_d(r4774258, c, MPFR_RNDN);
        mpfr_mul(r4774259, r4774251, r4774258, MPFR_RNDN);
        mpfr_sub(r4774260, r4774257, r4774259, MPFR_RNDN);
        mpfr_sqrt(r4774261, r4774260, MPFR_RNDN);
        mpfr_add(r4774262, r4774256, r4774261, MPFR_RNDN);
        ;
        mpfr_div(r4774264, r4774263, r4774251, MPFR_RNDN);
        mpfr_mul(r4774265, r4774262, r4774264, MPFR_RNDN);
        ;
        mpfr_set_si(r4774267, mpfr_cmp(r4774247, r4774266) <= 0, MPFR_RNDN);
        mpfr_sub(r4774268, r4774256, r4774261, MPFR_RNDN);
        mpfr_div(r4774269, r4774259, r4774268, MPFR_RNDN);
        mpfr_mul(r4774270, r4774269, r4774264, MPFR_RNDN);
        mpfr_sub(r4774271, r4774256, r4774247, MPFR_RNDN);
        ;
        mpfr_mul(r4774273, r4774258, r4774272, MPFR_RNDN);
        mpfr_div(r4774274, r4774273, r4774252, MPFR_RNDN);
        mpfr_add(r4774275, r4774271, r4774274, MPFR_RNDN);
        mpfr_div(r4774276, r4774258, r4774275, MPFR_RNDN);
        if (mpfr_get_si(r4774267, MPFR_RNDN)) { mpfr_set(r4774277, r4774270, MPFR_RNDN); } else { mpfr_set(r4774277, r4774276, MPFR_RNDN); };
        if (mpfr_get_si(r4774255, MPFR_RNDN)) { mpfr_set(r4774278, r4774265, MPFR_RNDN); } else { mpfr_set(r4774278, r4774277, MPFR_RNDN); };
        if (mpfr_get_si(r4774249, MPFR_RNDN)) { mpfr_set(r4774279, r4774253, MPFR_RNDN); } else { mpfr_set(r4774279, r4774278, MPFR_RNDN); };
        return mpfr_get_d(r4774279, MPFR_RNDN);
}

static mpfr_t r4774280, r4774281, r4774282, r4774283, r4774284, r4774285, r4774286, r4774287, r4774288, r4774289, r4774290, r4774291, r4774292, r4774293, r4774294, r4774295, r4774296, r4774297, r4774298, r4774299, r4774300, r4774301, r4774302, r4774303, r4774304, r4774305, r4774306, r4774307, r4774308, r4774309, r4774310, r4774311, r4774312;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774280);
        mpfr_init_set_str(r4774281, "-1.7321058520772784e+67", 10, MPFR_RNDN);
        mpfr_init(r4774282);
        mpfr_init_set_str(r4774283, "-2", 10, MPFR_RNDN);
        mpfr_init(r4774284);
        mpfr_init(r4774285);
        mpfr_init(r4774286);
        mpfr_init_set_str(r4774287, "1.922375846709798e-232", 10, MPFR_RNDN);
        mpfr_init(r4774288);
        mpfr_init(r4774289);
        mpfr_init(r4774290);
        mpfr_init(r4774291);
        mpfr_init(r4774292);
        mpfr_init(r4774293);
        mpfr_init(r4774294);
        mpfr_init(r4774295);
        mpfr_init_set_str(r4774296, "1", 10, MPFR_RNDN);
        mpfr_init(r4774297);
        mpfr_init(r4774298);
        mpfr_init_set_str(r4774299, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4774300);
        mpfr_init(r4774301);
        mpfr_init(r4774302);
        mpfr_init(r4774303);
        mpfr_init(r4774304);
        mpfr_init_set_str(r4774305, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4774306);
        mpfr_init(r4774307);
        mpfr_init(r4774308);
        mpfr_init(r4774309);
        mpfr_init(r4774310);
        mpfr_init(r4774311);
        mpfr_init(r4774312);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r4774280, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4774282, mpfr_cmp(r4774280, r4774281) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r4774284, a, MPFR_RNDN);
        mpfr_div(r4774285, r4774280, r4774284, MPFR_RNDN);
        mpfr_mul(r4774286, r4774283, r4774285, MPFR_RNDN);
        ;
        mpfr_set_si(r4774288, mpfr_cmp(r4774280, r4774287) <= 0, MPFR_RNDN);
        mpfr_neg(r4774289, r4774280, MPFR_RNDN);
        mpfr_sqr(r4774290, r4774280, MPFR_RNDN);
        mpfr_set_d(r4774291, c, MPFR_RNDN);
        mpfr_mul(r4774292, r4774284, r4774291, MPFR_RNDN);
        mpfr_sub(r4774293, r4774290, r4774292, MPFR_RNDN);
        mpfr_sqrt(r4774294, r4774293, MPFR_RNDN);
        mpfr_add(r4774295, r4774289, r4774294, MPFR_RNDN);
        ;
        mpfr_div(r4774297, r4774296, r4774284, MPFR_RNDN);
        mpfr_mul(r4774298, r4774295, r4774297, MPFR_RNDN);
        ;
        mpfr_set_si(r4774300, mpfr_cmp(r4774280, r4774299) <= 0, MPFR_RNDN);
        mpfr_sub(r4774301, r4774289, r4774294, MPFR_RNDN);
        mpfr_div(r4774302, r4774292, r4774301, MPFR_RNDN);
        mpfr_mul(r4774303, r4774302, r4774297, MPFR_RNDN);
        mpfr_sub(r4774304, r4774289, r4774280, MPFR_RNDN);
        ;
        mpfr_mul(r4774306, r4774291, r4774305, MPFR_RNDN);
        mpfr_div(r4774307, r4774306, r4774285, MPFR_RNDN);
        mpfr_add(r4774308, r4774304, r4774307, MPFR_RNDN);
        mpfr_div(r4774309, r4774291, r4774308, MPFR_RNDN);
        if (mpfr_get_si(r4774300, MPFR_RNDN)) { mpfr_set(r4774310, r4774303, MPFR_RNDN); } else { mpfr_set(r4774310, r4774309, MPFR_RNDN); };
        if (mpfr_get_si(r4774288, MPFR_RNDN)) { mpfr_set(r4774311, r4774298, MPFR_RNDN); } else { mpfr_set(r4774311, r4774310, MPFR_RNDN); };
        if (mpfr_get_si(r4774282, MPFR_RNDN)) { mpfr_set(r4774312, r4774286, MPFR_RNDN); } else { mpfr_set(r4774312, r4774311, MPFR_RNDN); };
        return mpfr_get_d(r4774312, MPFR_RNDN);
}

