#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 r4618405 = b_2F2;
        float r4618406 = -r4618405;
        float r4618407 = r4618405 * r4618405;
        float r4618408 = a;
        float r4618409 = c;
        float r4618410 = r4618408 * r4618409;
        float r4618411 = r4618407 - r4618410;
        float r4618412 = sqrt(r4618411);
        float r4618413 = r4618406 - r4618412;
        float r4618414 = r4618413 / r4618408;
        return r4618414;
}

double f_id(double a, double b_2F2, double c) {
        double r4618415 = b_2F2;
        double r4618416 = -r4618415;
        double r4618417 = r4618415 * r4618415;
        double r4618418 = a;
        double r4618419 = c;
        double r4618420 = r4618418 * r4618419;
        double r4618421 = r4618417 - r4618420;
        double r4618422 = sqrt(r4618421);
        double r4618423 = r4618416 - r4618422;
        double r4618424 = r4618423 / r4618418;
        return r4618424;
}


double f_of(float a, float b_2F2, float c) {
        float r4618425 = b_2F2;
        float r4618426 = -4.531827883994214e-14f;
        bool r4618427 = r4618425 <= r4618426;
        float r4618428 = c;
        float r4618429 = 0.5f;
        float r4618430 = r4618428 * r4618429;
        float r4618431 = a;
        float r4618432 = r4618425 / r4618431;
        float r4618433 = r4618430 / r4618432;
        float r4618434 = -r4618425;
        float r4618435 = r4618425 - r4618434;
        float r4618436 = r4618433 - r4618435;
        float r4618437 = r4618428 / r4618436;
        float r4618438 = 1438490.0801097094f;
        bool r4618439 = r4618425 <= r4618438;
        float r4618440 = r4618425 * r4618425;
        float r4618441 = r4618431 * r4618428;
        float r4618442 = r4618440 - r4618441;
        float r4618443 = sqrt(r4618442);
        float r4618444 = r4618434 - r4618443;
        float r4618445 = 1.0f;
        float r4618446 = r4618445 / r4618431;
        float r4618447 = r4618444 * r4618446;
        float r4618448 = r4618425 / r4618429;
        float r4618449 = r4618428 / r4618448;
        float r4618450 = 2.0f;
        float r4618451 = r4618450 / r4618431;
        float r4618452 = r4618425 * r4618451;
        float r4618453 = r4618449 - r4618452;
        float r4618454 = r4618439 ? r4618447 : r4618453;
        float r4618455 = r4618427 ? r4618437 : r4618454;
        return r4618455;
}

double f_od(double a, double b_2F2, double c) {
        double r4618456 = b_2F2;
        double r4618457 = -4.531827883994214e-14;
        bool r4618458 = r4618456 <= r4618457;
        double r4618459 = c;
        double r4618460 = 0.5;
        double r4618461 = r4618459 * r4618460;
        double r4618462 = a;
        double r4618463 = r4618456 / r4618462;
        double r4618464 = r4618461 / r4618463;
        double r4618465 = -r4618456;
        double r4618466 = r4618456 - r4618465;
        double r4618467 = r4618464 - r4618466;
        double r4618468 = r4618459 / r4618467;
        double r4618469 = 1438490.0801097094;
        bool r4618470 = r4618456 <= r4618469;
        double r4618471 = r4618456 * r4618456;
        double r4618472 = r4618462 * r4618459;
        double r4618473 = r4618471 - r4618472;
        double r4618474 = sqrt(r4618473);
        double r4618475 = r4618465 - r4618474;
        double r4618476 = 1.0;
        double r4618477 = r4618476 / r4618462;
        double r4618478 = r4618475 * r4618477;
        double r4618479 = r4618456 / r4618460;
        double r4618480 = r4618459 / r4618479;
        double r4618481 = 2.0;
        double r4618482 = r4618481 / r4618462;
        double r4618483 = r4618456 * r4618482;
        double r4618484 = r4618480 - r4618483;
        double r4618485 = r4618470 ? r4618478 : r4618484;
        double r4618486 = r4618458 ? r4618468 : r4618485;
        return r4618486;
}

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 r4618487, r4618488, r4618489, r4618490, r4618491, r4618492, r4618493, r4618494, r4618495, r4618496;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618487);
        mpfr_init(r4618488);
        mpfr_init(r4618489);
        mpfr_init(r4618490);
        mpfr_init(r4618491);
        mpfr_init(r4618492);
        mpfr_init(r4618493);
        mpfr_init(r4618494);
        mpfr_init(r4618495);
        mpfr_init(r4618496);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r4618487, b_2F2, MPFR_RNDN);
        mpfr_neg(r4618488, r4618487, MPFR_RNDN);
        mpfr_sqr(r4618489, r4618487, MPFR_RNDN);
        mpfr_set_d(r4618490, a, MPFR_RNDN);
        mpfr_set_d(r4618491, c, MPFR_RNDN);
        mpfr_mul(r4618492, r4618490, r4618491, MPFR_RNDN);
        mpfr_sub(r4618493, r4618489, r4618492, MPFR_RNDN);
        mpfr_sqrt(r4618494, r4618493, MPFR_RNDN);
        mpfr_sub(r4618495, r4618488, r4618494, MPFR_RNDN);
        mpfr_div(r4618496, r4618495, r4618490, MPFR_RNDN);
        return mpfr_get_d(r4618496, MPFR_RNDN);
}

static mpfr_t r4618497, r4618498, r4618499, r4618500, r4618501, r4618502, r4618503, r4618504, r4618505, r4618506, r4618507, r4618508, r4618509, r4618510, r4618511, r4618512, r4618513, r4618514, r4618515, r4618516, r4618517, r4618518, r4618519, r4618520, r4618521, r4618522, r4618523, r4618524, r4618525, r4618526, r4618527;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618497);
        mpfr_init_set_str(r4618498, "-4.531827883994214e-14", 10, MPFR_RNDN);
        mpfr_init(r4618499);
        mpfr_init(r4618500);
        mpfr_init_set_str(r4618501, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4618502);
        mpfr_init(r4618503);
        mpfr_init(r4618504);
        mpfr_init(r4618505);
        mpfr_init(r4618506);
        mpfr_init(r4618507);
        mpfr_init(r4618508);
        mpfr_init(r4618509);
        mpfr_init_set_str(r4618510, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4618511);
        mpfr_init(r4618512);
        mpfr_init(r4618513);
        mpfr_init(r4618514);
        mpfr_init(r4618515);
        mpfr_init(r4618516);
        mpfr_init_set_str(r4618517, "1", 10, MPFR_RNDN);
        mpfr_init(r4618518);
        mpfr_init(r4618519);
        mpfr_init(r4618520);
        mpfr_init(r4618521);
        mpfr_init_set_str(r4618522, "2", 10, MPFR_RNDN);
        mpfr_init(r4618523);
        mpfr_init(r4618524);
        mpfr_init(r4618525);
        mpfr_init(r4618526);
        mpfr_init(r4618527);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r4618497, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4618499, mpfr_cmp(r4618497, r4618498) <= 0, MPFR_RNDN);
        mpfr_set_d(r4618500, c, MPFR_RNDN);
        ;
        mpfr_mul(r4618502, r4618500, r4618501, MPFR_RNDN);
        mpfr_set_d(r4618503, a, MPFR_RNDN);
        mpfr_div(r4618504, r4618497, r4618503, MPFR_RNDN);
        mpfr_div(r4618505, r4618502, r4618504, MPFR_RNDN);
        mpfr_neg(r4618506, r4618497, MPFR_RNDN);
        mpfr_sub(r4618507, r4618497, r4618506, MPFR_RNDN);
        mpfr_sub(r4618508, r4618505, r4618507, MPFR_RNDN);
        mpfr_div(r4618509, r4618500, r4618508, MPFR_RNDN);
        ;
        mpfr_set_si(r4618511, mpfr_cmp(r4618497, r4618510) <= 0, MPFR_RNDN);
        mpfr_sqr(r4618512, r4618497, MPFR_RNDN);
        mpfr_mul(r4618513, r4618503, r4618500, MPFR_RNDN);
        mpfr_sub(r4618514, r4618512, r4618513, MPFR_RNDN);
        mpfr_sqrt(r4618515, r4618514, MPFR_RNDN);
        mpfr_sub(r4618516, r4618506, r4618515, MPFR_RNDN);
        ;
        mpfr_div(r4618518, r4618517, r4618503, MPFR_RNDN);
        mpfr_mul(r4618519, r4618516, r4618518, MPFR_RNDN);
        mpfr_div(r4618520, r4618497, r4618501, MPFR_RNDN);
        mpfr_div(r4618521, r4618500, r4618520, MPFR_RNDN);
        ;
        mpfr_div(r4618523, r4618522, r4618503, MPFR_RNDN);
        mpfr_mul(r4618524, r4618497, r4618523, MPFR_RNDN);
        mpfr_sub(r4618525, r4618521, r4618524, MPFR_RNDN);
        if (mpfr_get_si(r4618511, MPFR_RNDN)) { mpfr_set(r4618526, r4618519, MPFR_RNDN); } else { mpfr_set(r4618526, r4618525, MPFR_RNDN); };
        if (mpfr_get_si(r4618499, MPFR_RNDN)) { mpfr_set(r4618527, r4618509, MPFR_RNDN); } else { mpfr_set(r4618527, r4618526, MPFR_RNDN); };
        return mpfr_get_d(r4618527, MPFR_RNDN);
}

static mpfr_t r4618528, r4618529, r4618530, r4618531, r4618532, r4618533, r4618534, r4618535, r4618536, r4618537, r4618538, r4618539, r4618540, r4618541, r4618542, r4618543, r4618544, r4618545, r4618546, r4618547, r4618548, r4618549, r4618550, r4618551, r4618552, r4618553, r4618554, r4618555, r4618556, r4618557, r4618558;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618528);
        mpfr_init_set_str(r4618529, "-4.531827883994214e-14", 10, MPFR_RNDN);
        mpfr_init(r4618530);
        mpfr_init(r4618531);
        mpfr_init_set_str(r4618532, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4618533);
        mpfr_init(r4618534);
        mpfr_init(r4618535);
        mpfr_init(r4618536);
        mpfr_init(r4618537);
        mpfr_init(r4618538);
        mpfr_init(r4618539);
        mpfr_init(r4618540);
        mpfr_init_set_str(r4618541, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4618542);
        mpfr_init(r4618543);
        mpfr_init(r4618544);
        mpfr_init(r4618545);
        mpfr_init(r4618546);
        mpfr_init(r4618547);
        mpfr_init_set_str(r4618548, "1", 10, MPFR_RNDN);
        mpfr_init(r4618549);
        mpfr_init(r4618550);
        mpfr_init(r4618551);
        mpfr_init(r4618552);
        mpfr_init_set_str(r4618553, "2", 10, MPFR_RNDN);
        mpfr_init(r4618554);
        mpfr_init(r4618555);
        mpfr_init(r4618556);
        mpfr_init(r4618557);
        mpfr_init(r4618558);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r4618528, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4618530, mpfr_cmp(r4618528, r4618529) <= 0, MPFR_RNDN);
        mpfr_set_d(r4618531, c, MPFR_RNDN);
        ;
        mpfr_mul(r4618533, r4618531, r4618532, MPFR_RNDN);
        mpfr_set_d(r4618534, a, MPFR_RNDN);
        mpfr_div(r4618535, r4618528, r4618534, MPFR_RNDN);
        mpfr_div(r4618536, r4618533, r4618535, MPFR_RNDN);
        mpfr_neg(r4618537, r4618528, MPFR_RNDN);
        mpfr_sub(r4618538, r4618528, r4618537, MPFR_RNDN);
        mpfr_sub(r4618539, r4618536, r4618538, MPFR_RNDN);
        mpfr_div(r4618540, r4618531, r4618539, MPFR_RNDN);
        ;
        mpfr_set_si(r4618542, mpfr_cmp(r4618528, r4618541) <= 0, MPFR_RNDN);
        mpfr_sqr(r4618543, r4618528, MPFR_RNDN);
        mpfr_mul(r4618544, r4618534, r4618531, MPFR_RNDN);
        mpfr_sub(r4618545, r4618543, r4618544, MPFR_RNDN);
        mpfr_sqrt(r4618546, r4618545, MPFR_RNDN);
        mpfr_sub(r4618547, r4618537, r4618546, MPFR_RNDN);
        ;
        mpfr_div(r4618549, r4618548, r4618534, MPFR_RNDN);
        mpfr_mul(r4618550, r4618547, r4618549, MPFR_RNDN);
        mpfr_div(r4618551, r4618528, r4618532, MPFR_RNDN);
        mpfr_div(r4618552, r4618531, r4618551, MPFR_RNDN);
        ;
        mpfr_div(r4618554, r4618553, r4618534, MPFR_RNDN);
        mpfr_mul(r4618555, r4618528, r4618554, MPFR_RNDN);
        mpfr_sub(r4618556, r4618552, r4618555, MPFR_RNDN);
        if (mpfr_get_si(r4618542, MPFR_RNDN)) { mpfr_set(r4618557, r4618550, MPFR_RNDN); } else { mpfr_set(r4618557, r4618556, MPFR_RNDN); };
        if (mpfr_get_si(r4618530, MPFR_RNDN)) { mpfr_set(r4618558, r4618540, MPFR_RNDN); } else { mpfr_set(r4618558, r4618557, MPFR_RNDN); };
        return mpfr_get_d(r4618558, MPFR_RNDN);
}

