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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2F2, float c) {
        float r20275 = b_2F2;
        float r20276 = -r20275;
        float r20277 = r20275 * r20275;
        float r20278 = a;
        float r20279 = c;
        float r20280 = r20278 * r20279;
        float r20281 = r20277 - r20280;
        float r20282 = sqrt(r20281);
        float r20283 = r20276 - r20282;
        float r20284 = r20283 / r20278;
        return r20284;
}

double f_id(double a, double b_2F2, double c) {
        double r20285 = b_2F2;
        double r20286 = -r20285;
        double r20287 = r20285 * r20285;
        double r20288 = a;
        double r20289 = c;
        double r20290 = r20288 * r20289;
        double r20291 = r20287 - r20290;
        double r20292 = sqrt(r20291);
        double r20293 = r20286 - r20292;
        double r20294 = r20293 / r20288;
        return r20294;
}


double f_of(float a, float b_2F2, float c) {
        float r20295 = b_2F2;
        float r20296 = -1.718982199476945e+89f;
        bool r20297 = r20295 <= r20296;
        float r20298 = c;
        float r20299 = r20298 / r20295;
        float r20300 = -0.5f;
        float r20301 = r20299 * r20300;
        float r20302 = -2.321564696919607e-245f;
        bool r20303 = r20295 <= r20302;
        float r20304 = -r20295;
        float r20305 = r20295 * r20295;
        float r20306 = a;
        float r20307 = r20306 * r20298;
        float r20308 = r20305 - r20307;
        float r20309 = sqrt(r20308);
        float r20310 = r20304 + r20309;
        float r20311 = r20298 / r20310;
        float r20312 = cbrt(r20311);
        float r20313 = r20312 * (r20312 * r20312);
        float r20314 = 9.141549925217606e+73f;
        bool r20315 = r20295 <= r20314;
        float r20316 = 1.0f;
        float r20317 = r20304 - r20309;
        float r20318 = r20306 / r20317;
        float r20319 = r20316 / r20318;
        float r20320 = -2.0f;
        float r20321 = r20295 / r20306;
        float r20322 = r20320 * r20321;
        float r20323 = r20315 ? r20319 : r20322;
        float r20324 = r20303 ? r20313 : r20323;
        float r20325 = r20297 ? r20301 : r20324;
        return r20325;
}

double f_od(double a, double b_2F2, double c) {
        double r20326 = b_2F2;
        double r20327 = -1.718982199476945e+89;
        bool r20328 = r20326 <= r20327;
        double r20329 = c;
        double r20330 = r20329 / r20326;
        double r20331 = -0.5;
        double r20332 = r20330 * r20331;
        double r20333 = -2.321564696919607e-245;
        bool r20334 = r20326 <= r20333;
        double r20335 = -r20326;
        double r20336 = r20326 * r20326;
        double r20337 = a;
        double r20338 = r20337 * r20329;
        double r20339 = r20336 - r20338;
        double r20340 = sqrt(r20339);
        double r20341 = r20335 + r20340;
        double r20342 = r20329 / r20341;
        double r20343 = cbrt(r20342);
        double r20344 = r20343 * (r20343 * r20343);
        double r20345 = 9.141549925217606e+73;
        bool r20346 = r20326 <= r20345;
        double r20347 = 1.0;
        double r20348 = r20335 - r20340;
        double r20349 = r20337 / r20348;
        double r20350 = r20347 / r20349;
        double r20351 = -2.0;
        double r20352 = r20326 / r20337;
        double r20353 = r20351 * r20352;
        double r20354 = r20346 ? r20350 : r20353;
        double r20355 = r20334 ? r20344 : r20354;
        double r20356 = r20328 ? r20332 : r20355;
        return r20356;
}

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 r20357, r20358, r20359, r20360, r20361, r20362, r20363, r20364, r20365, r20366;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2960);
        mpfr_init(r20357);
        mpfr_init(r20358);
        mpfr_init(r20359);
        mpfr_init(r20360);
        mpfr_init(r20361);
        mpfr_init(r20362);
        mpfr_init(r20363);
        mpfr_init(r20364);
        mpfr_init(r20365);
        mpfr_init(r20366);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r20357, b_2F2, MPFR_RNDN);
        mpfr_neg(r20358, r20357, MPFR_RNDN);
        mpfr_sqr(r20359, r20357, MPFR_RNDN);
        mpfr_set_d(r20360, a, MPFR_RNDN);
        mpfr_set_d(r20361, c, MPFR_RNDN);
        mpfr_mul(r20362, r20360, r20361, MPFR_RNDN);
        mpfr_sub(r20363, r20359, r20362, MPFR_RNDN);
        mpfr_sqrt(r20364, r20363, MPFR_RNDN);
        mpfr_sub(r20365, r20358, r20364, MPFR_RNDN);
        mpfr_div(r20366, r20365, r20360, MPFR_RNDN);
        return mpfr_get_d(r20366, MPFR_RNDN);
}

static mpfr_t r20367, r20368, r20369, r20370, r20371, r20372, r20373, r20374, r20375, r20376, r20377, r20378, r20379, r20380, r20381, r20382, r20383, r20384, r20385, r20386, r20387, r20388, r20389, r20390, r20391, r20392, r20393, r20394, r20395, r20396, r20397;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r20367);
        mpfr_init_set_str(r20368, "-1.718982199476945e+89", 10, MPFR_RNDN);
        mpfr_init(r20369);
        mpfr_init(r20370);
        mpfr_init(r20371);
        mpfr_init_set_str(r20372, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r20373);
        mpfr_init_set_str(r20374, "-2.321564696919607e-245", 10, MPFR_RNDN);
        mpfr_init(r20375);
        mpfr_init(r20376);
        mpfr_init(r20377);
        mpfr_init(r20378);
        mpfr_init(r20379);
        mpfr_init(r20380);
        mpfr_init(r20381);
        mpfr_init(r20382);
        mpfr_init(r20383);
        mpfr_init(r20384);
        mpfr_init(r20385);
        mpfr_init_set_str(r20386, "9.141549925217606e+73", 10, MPFR_RNDN);
        mpfr_init(r20387);
        mpfr_init_set_str(r20388, "1", 10, MPFR_RNDN);
        mpfr_init(r20389);
        mpfr_init(r20390);
        mpfr_init(r20391);
        mpfr_init_set_str(r20392, "-2", 10, MPFR_RNDN);
        mpfr_init(r20393);
        mpfr_init(r20394);
        mpfr_init(r20395);
        mpfr_init(r20396);
        mpfr_init(r20397);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r20367, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r20369, mpfr_cmp(r20367, r20368) <= 0, MPFR_RNDN);
        mpfr_set_d(r20370, c, MPFR_RNDN);
        mpfr_div(r20371, r20370, r20367, MPFR_RNDN);
        ;
        mpfr_mul(r20373, r20371, r20372, MPFR_RNDN);
        ;
        mpfr_set_si(r20375, mpfr_cmp(r20367, r20374) <= 0, MPFR_RNDN);
        mpfr_neg(r20376, r20367, MPFR_RNDN);
        mpfr_sqr(r20377, r20367, MPFR_RNDN);
        mpfr_set_d(r20378, a, MPFR_RNDN);
        mpfr_mul(r20379, r20378, r20370, MPFR_RNDN);
        mpfr_sub(r20380, r20377, r20379, MPFR_RNDN);
        mpfr_sqrt(r20381, r20380, MPFR_RNDN);
        mpfr_add(r20382, r20376, r20381, MPFR_RNDN);
        mpfr_div(r20383, r20370, r20382, MPFR_RNDN);
        mpfr_cbrt(r20384, r20383, MPFR_RNDN);
        mpfr_mul(r20385, r20384, r20384, MPFR_RNDN); mpfr_mul(r20385, r20385, r20384, MPFR_RNDN);
        ;
        mpfr_set_si(r20387, mpfr_cmp(r20367, r20386) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r20389, r20376, r20381, MPFR_RNDN);
        mpfr_div(r20390, r20378, r20389, MPFR_RNDN);
        mpfr_div(r20391, r20388, r20390, MPFR_RNDN);
        ;
        mpfr_div(r20393, r20367, r20378, MPFR_RNDN);
        mpfr_mul(r20394, r20392, r20393, MPFR_RNDN);
        if (mpfr_get_si(r20387, MPFR_RNDN)) { mpfr_set(r20395, r20391, MPFR_RNDN); } else { mpfr_set(r20395, r20394, MPFR_RNDN); };
        if (mpfr_get_si(r20375, MPFR_RNDN)) { mpfr_set(r20396, r20385, MPFR_RNDN); } else { mpfr_set(r20396, r20395, MPFR_RNDN); };
        if (mpfr_get_si(r20369, MPFR_RNDN)) { mpfr_set(r20397, r20373, MPFR_RNDN); } else { mpfr_set(r20397, r20396, MPFR_RNDN); };
        return mpfr_get_d(r20397, MPFR_RNDN);
}

static mpfr_t r20398, r20399, r20400, r20401, r20402, r20403, r20404, r20405, r20406, r20407, r20408, r20409, r20410, r20411, r20412, r20413, r20414, r20415, r20416, r20417, r20418, r20419, r20420, r20421, r20422, r20423, r20424, r20425, r20426, r20427, r20428;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r20398);
        mpfr_init_set_str(r20399, "-1.718982199476945e+89", 10, MPFR_RNDN);
        mpfr_init(r20400);
        mpfr_init(r20401);
        mpfr_init(r20402);
        mpfr_init_set_str(r20403, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r20404);
        mpfr_init_set_str(r20405, "-2.321564696919607e-245", 10, MPFR_RNDN);
        mpfr_init(r20406);
        mpfr_init(r20407);
        mpfr_init(r20408);
        mpfr_init(r20409);
        mpfr_init(r20410);
        mpfr_init(r20411);
        mpfr_init(r20412);
        mpfr_init(r20413);
        mpfr_init(r20414);
        mpfr_init(r20415);
        mpfr_init(r20416);
        mpfr_init_set_str(r20417, "9.141549925217606e+73", 10, MPFR_RNDN);
        mpfr_init(r20418);
        mpfr_init_set_str(r20419, "1", 10, MPFR_RNDN);
        mpfr_init(r20420);
        mpfr_init(r20421);
        mpfr_init(r20422);
        mpfr_init_set_str(r20423, "-2", 10, MPFR_RNDN);
        mpfr_init(r20424);
        mpfr_init(r20425);
        mpfr_init(r20426);
        mpfr_init(r20427);
        mpfr_init(r20428);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r20398, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r20400, mpfr_cmp(r20398, r20399) <= 0, MPFR_RNDN);
        mpfr_set_d(r20401, c, MPFR_RNDN);
        mpfr_div(r20402, r20401, r20398, MPFR_RNDN);
        ;
        mpfr_mul(r20404, r20402, r20403, MPFR_RNDN);
        ;
        mpfr_set_si(r20406, mpfr_cmp(r20398, r20405) <= 0, MPFR_RNDN);
        mpfr_neg(r20407, r20398, MPFR_RNDN);
        mpfr_sqr(r20408, r20398, MPFR_RNDN);
        mpfr_set_d(r20409, a, MPFR_RNDN);
        mpfr_mul(r20410, r20409, r20401, MPFR_RNDN);
        mpfr_sub(r20411, r20408, r20410, MPFR_RNDN);
        mpfr_sqrt(r20412, r20411, MPFR_RNDN);
        mpfr_add(r20413, r20407, r20412, MPFR_RNDN);
        mpfr_div(r20414, r20401, r20413, MPFR_RNDN);
        mpfr_cbrt(r20415, r20414, MPFR_RNDN);
        mpfr_mul(r20416, r20415, r20415, MPFR_RNDN); mpfr_mul(r20416, r20416, r20415, MPFR_RNDN);
        ;
        mpfr_set_si(r20418, mpfr_cmp(r20398, r20417) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r20420, r20407, r20412, MPFR_RNDN);
        mpfr_div(r20421, r20409, r20420, MPFR_RNDN);
        mpfr_div(r20422, r20419, r20421, MPFR_RNDN);
        ;
        mpfr_div(r20424, r20398, r20409, MPFR_RNDN);
        mpfr_mul(r20425, r20423, r20424, MPFR_RNDN);
        if (mpfr_get_si(r20418, MPFR_RNDN)) { mpfr_set(r20426, r20422, MPFR_RNDN); } else { mpfr_set(r20426, r20425, MPFR_RNDN); };
        if (mpfr_get_si(r20406, MPFR_RNDN)) { mpfr_set(r20427, r20416, MPFR_RNDN); } else { mpfr_set(r20427, r20426, MPFR_RNDN); };
        if (mpfr_get_si(r20400, MPFR_RNDN)) { mpfr_set(r20428, r20404, MPFR_RNDN); } else { mpfr_set(r20428, r20427, MPFR_RNDN); };
        return mpfr_get_d(r20428, MPFR_RNDN);
}

