#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 r4774313 = b_2F2;
        float r4774314 = -r4774313;
        float r4774315 = r4774313 * r4774313;
        float r4774316 = a;
        float r4774317 = c;
        float r4774318 = r4774316 * r4774317;
        float r4774319 = r4774315 - r4774318;
        float r4774320 = sqrt(r4774319);
        float r4774321 = r4774314 - r4774320;
        float r4774322 = r4774321 / r4774316;
        return r4774322;
}

double f_id(double a, double b_2F2, double c) {
        double r4774323 = b_2F2;
        double r4774324 = -r4774323;
        double r4774325 = r4774323 * r4774323;
        double r4774326 = a;
        double r4774327 = c;
        double r4774328 = r4774326 * r4774327;
        double r4774329 = r4774325 - r4774328;
        double r4774330 = sqrt(r4774329);
        double r4774331 = r4774324 - r4774330;
        double r4774332 = r4774331 / r4774326;
        return r4774332;
}


double f_of(float a, float b_2F2, float c) {
        float r4774333 = b_2F2;
        float r4774334 = -4.531827883994214e-14f;
        bool r4774335 = r4774333 <= r4774334;
        float r4774336 = c;
        float r4774337 = a;
        float r4774338 = 0.5f;
        float r4774339 = r4774337 * r4774338;
        float r4774340 = r4774336 / r4774333;
        float r4774341 = r4774339 * r4774340;
        float r4774342 = r4774333 + r4774333;
        float r4774343 = r4774341 - r4774342;
        float r4774344 = r4774336 / r4774343;
        float r4774345 = 1438490.0801097094f;
        bool r4774346 = r4774333 <= r4774345;
        float r4774347 = -r4774333;
        float r4774348 = r4774333 * r4774333;
        float r4774349 = r4774337 * r4774336;
        float r4774350 = r4774348 - r4774349;
        float r4774351 = sqrt(r4774350);
        float r4774352 = r4774347 - r4774351;
        float r4774353 = 1.0f;
        float r4774354 = r4774353 / r4774337;
        float r4774355 = r4774352 * r4774354;
        float r4774356 = r4774333 / r4774338;
        float r4774357 = r4774336 / r4774356;
        float r4774358 = r4774342 / r4774337;
        float r4774359 = r4774357 - r4774358;
        float r4774360 = r4774346 ? r4774355 : r4774359;
        float r4774361 = r4774335 ? r4774344 : r4774360;
        return r4774361;
}

double f_od(double a, double b_2F2, double c) {
        double r4774362 = b_2F2;
        double r4774363 = -4.531827883994214e-14;
        bool r4774364 = r4774362 <= r4774363;
        double r4774365 = c;
        double r4774366 = a;
        double r4774367 = 0.5;
        double r4774368 = r4774366 * r4774367;
        double r4774369 = r4774365 / r4774362;
        double r4774370 = r4774368 * r4774369;
        double r4774371 = r4774362 + r4774362;
        double r4774372 = r4774370 - r4774371;
        double r4774373 = r4774365 / r4774372;
        double r4774374 = 1438490.0801097094;
        bool r4774375 = r4774362 <= r4774374;
        double r4774376 = -r4774362;
        double r4774377 = r4774362 * r4774362;
        double r4774378 = r4774366 * r4774365;
        double r4774379 = r4774377 - r4774378;
        double r4774380 = sqrt(r4774379);
        double r4774381 = r4774376 - r4774380;
        double r4774382 = 1.0;
        double r4774383 = r4774382 / r4774366;
        double r4774384 = r4774381 * r4774383;
        double r4774385 = r4774362 / r4774367;
        double r4774386 = r4774365 / r4774385;
        double r4774387 = r4774371 / r4774366;
        double r4774388 = r4774386 - r4774387;
        double r4774389 = r4774375 ? r4774384 : r4774388;
        double r4774390 = r4774364 ? r4774373 : r4774389;
        return r4774390;
}

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 r4774391, r4774392, r4774393, r4774394, r4774395, r4774396, r4774397, r4774398, r4774399, r4774400;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774391);
        mpfr_init(r4774392);
        mpfr_init(r4774393);
        mpfr_init(r4774394);
        mpfr_init(r4774395);
        mpfr_init(r4774396);
        mpfr_init(r4774397);
        mpfr_init(r4774398);
        mpfr_init(r4774399);
        mpfr_init(r4774400);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r4774391, b_2F2, MPFR_RNDN);
        mpfr_neg(r4774392, r4774391, MPFR_RNDN);
        mpfr_sqr(r4774393, r4774391, MPFR_RNDN);
        mpfr_set_d(r4774394, a, MPFR_RNDN);
        mpfr_set_d(r4774395, c, MPFR_RNDN);
        mpfr_mul(r4774396, r4774394, r4774395, MPFR_RNDN);
        mpfr_sub(r4774397, r4774393, r4774396, MPFR_RNDN);
        mpfr_sqrt(r4774398, r4774397, MPFR_RNDN);
        mpfr_sub(r4774399, r4774392, r4774398, MPFR_RNDN);
        mpfr_div(r4774400, r4774399, r4774394, MPFR_RNDN);
        return mpfr_get_d(r4774400, MPFR_RNDN);
}

static mpfr_t r4774401, r4774402, r4774403, r4774404, r4774405, r4774406, r4774407, r4774408, r4774409, r4774410, r4774411, r4774412, r4774413, r4774414, r4774415, r4774416, r4774417, r4774418, r4774419, r4774420, r4774421, r4774422, r4774423, r4774424, r4774425, r4774426, r4774427, r4774428, r4774429;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774401);
        mpfr_init_set_str(r4774402, "-4.531827883994214e-14", 10, MPFR_RNDN);
        mpfr_init(r4774403);
        mpfr_init(r4774404);
        mpfr_init(r4774405);
        mpfr_init_set_str(r4774406, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4774407);
        mpfr_init(r4774408);
        mpfr_init(r4774409);
        mpfr_init(r4774410);
        mpfr_init(r4774411);
        mpfr_init(r4774412);
        mpfr_init_set_str(r4774413, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4774414);
        mpfr_init(r4774415);
        mpfr_init(r4774416);
        mpfr_init(r4774417);
        mpfr_init(r4774418);
        mpfr_init(r4774419);
        mpfr_init(r4774420);
        mpfr_init_set_str(r4774421, "1", 10, MPFR_RNDN);
        mpfr_init(r4774422);
        mpfr_init(r4774423);
        mpfr_init(r4774424);
        mpfr_init(r4774425);
        mpfr_init(r4774426);
        mpfr_init(r4774427);
        mpfr_init(r4774428);
        mpfr_init(r4774429);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r4774401, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4774403, mpfr_cmp(r4774401, r4774402) <= 0, MPFR_RNDN);
        mpfr_set_d(r4774404, c, MPFR_RNDN);
        mpfr_set_d(r4774405, a, MPFR_RNDN);
        ;
        mpfr_mul(r4774407, r4774405, r4774406, MPFR_RNDN);
        mpfr_div(r4774408, r4774404, r4774401, MPFR_RNDN);
        mpfr_mul(r4774409, r4774407, r4774408, MPFR_RNDN);
        mpfr_add(r4774410, r4774401, r4774401, MPFR_RNDN);
        mpfr_sub(r4774411, r4774409, r4774410, MPFR_RNDN);
        mpfr_div(r4774412, r4774404, r4774411, MPFR_RNDN);
        ;
        mpfr_set_si(r4774414, mpfr_cmp(r4774401, r4774413) <= 0, MPFR_RNDN);
        mpfr_neg(r4774415, r4774401, MPFR_RNDN);
        mpfr_sqr(r4774416, r4774401, MPFR_RNDN);
        mpfr_mul(r4774417, r4774405, r4774404, MPFR_RNDN);
        mpfr_sub(r4774418, r4774416, r4774417, MPFR_RNDN);
        mpfr_sqrt(r4774419, r4774418, MPFR_RNDN);
        mpfr_sub(r4774420, r4774415, r4774419, MPFR_RNDN);
        ;
        mpfr_div(r4774422, r4774421, r4774405, MPFR_RNDN);
        mpfr_mul(r4774423, r4774420, r4774422, MPFR_RNDN);
        mpfr_div(r4774424, r4774401, r4774406, MPFR_RNDN);
        mpfr_div(r4774425, r4774404, r4774424, MPFR_RNDN);
        mpfr_div(r4774426, r4774410, r4774405, MPFR_RNDN);
        mpfr_sub(r4774427, r4774425, r4774426, MPFR_RNDN);
        if (mpfr_get_si(r4774414, MPFR_RNDN)) { mpfr_set(r4774428, r4774423, MPFR_RNDN); } else { mpfr_set(r4774428, r4774427, MPFR_RNDN); };
        if (mpfr_get_si(r4774403, MPFR_RNDN)) { mpfr_set(r4774429, r4774412, MPFR_RNDN); } else { mpfr_set(r4774429, r4774428, MPFR_RNDN); };
        return mpfr_get_d(r4774429, MPFR_RNDN);
}

static mpfr_t r4774430, r4774431, r4774432, r4774433, r4774434, r4774435, r4774436, r4774437, r4774438, r4774439, r4774440, r4774441, r4774442, r4774443, r4774444, r4774445, r4774446, r4774447, r4774448, r4774449, r4774450, r4774451, r4774452, r4774453, r4774454, r4774455, r4774456, r4774457, r4774458;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774430);
        mpfr_init_set_str(r4774431, "-4.531827883994214e-14", 10, MPFR_RNDN);
        mpfr_init(r4774432);
        mpfr_init(r4774433);
        mpfr_init(r4774434);
        mpfr_init_set_str(r4774435, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4774436);
        mpfr_init(r4774437);
        mpfr_init(r4774438);
        mpfr_init(r4774439);
        mpfr_init(r4774440);
        mpfr_init(r4774441);
        mpfr_init_set_str(r4774442, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4774443);
        mpfr_init(r4774444);
        mpfr_init(r4774445);
        mpfr_init(r4774446);
        mpfr_init(r4774447);
        mpfr_init(r4774448);
        mpfr_init(r4774449);
        mpfr_init_set_str(r4774450, "1", 10, MPFR_RNDN);
        mpfr_init(r4774451);
        mpfr_init(r4774452);
        mpfr_init(r4774453);
        mpfr_init(r4774454);
        mpfr_init(r4774455);
        mpfr_init(r4774456);
        mpfr_init(r4774457);
        mpfr_init(r4774458);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r4774430, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4774432, mpfr_cmp(r4774430, r4774431) <= 0, MPFR_RNDN);
        mpfr_set_d(r4774433, c, MPFR_RNDN);
        mpfr_set_d(r4774434, a, MPFR_RNDN);
        ;
        mpfr_mul(r4774436, r4774434, r4774435, MPFR_RNDN);
        mpfr_div(r4774437, r4774433, r4774430, MPFR_RNDN);
        mpfr_mul(r4774438, r4774436, r4774437, MPFR_RNDN);
        mpfr_add(r4774439, r4774430, r4774430, MPFR_RNDN);
        mpfr_sub(r4774440, r4774438, r4774439, MPFR_RNDN);
        mpfr_div(r4774441, r4774433, r4774440, MPFR_RNDN);
        ;
        mpfr_set_si(r4774443, mpfr_cmp(r4774430, r4774442) <= 0, MPFR_RNDN);
        mpfr_neg(r4774444, r4774430, MPFR_RNDN);
        mpfr_sqr(r4774445, r4774430, MPFR_RNDN);
        mpfr_mul(r4774446, r4774434, r4774433, MPFR_RNDN);
        mpfr_sub(r4774447, r4774445, r4774446, MPFR_RNDN);
        mpfr_sqrt(r4774448, r4774447, MPFR_RNDN);
        mpfr_sub(r4774449, r4774444, r4774448, MPFR_RNDN);
        ;
        mpfr_div(r4774451, r4774450, r4774434, MPFR_RNDN);
        mpfr_mul(r4774452, r4774449, r4774451, MPFR_RNDN);
        mpfr_div(r4774453, r4774430, r4774435, MPFR_RNDN);
        mpfr_div(r4774454, r4774433, r4774453, MPFR_RNDN);
        mpfr_div(r4774455, r4774439, r4774434, MPFR_RNDN);
        mpfr_sub(r4774456, r4774454, r4774455, MPFR_RNDN);
        if (mpfr_get_si(r4774443, MPFR_RNDN)) { mpfr_set(r4774457, r4774452, MPFR_RNDN); } else { mpfr_set(r4774457, r4774456, MPFR_RNDN); };
        if (mpfr_get_si(r4774432, MPFR_RNDN)) { mpfr_set(r4774458, r4774441, MPFR_RNDN); } else { mpfr_set(r4774458, r4774457, MPFR_RNDN); };
        return mpfr_get_d(r4774458, MPFR_RNDN);
}

