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

char *name = "NMSE p42, negative";

double f_if(float a, float b, float c) {
        float r5320345 = b;
        float r5320346 = -r5320345;
        float r5320347 = r5320345 * r5320345;
        float r5320348 = 4.0f;
        float r5320349 = a;
        float r5320350 = c;
        float r5320351 = r5320349 * r5320350;
        float r5320352 = r5320348 * r5320351;
        float r5320353 = r5320347 - r5320352;
        float r5320354 = sqrt(r5320353);
        float r5320355 = r5320346 - r5320354;
        float r5320356 = 2.0f;
        float r5320357 = r5320356 * r5320349;
        float r5320358 = r5320355 / r5320357;
        return r5320358;
}

double f_id(double a, double b, double c) {
        double r5320359 = b;
        double r5320360 = -r5320359;
        double r5320361 = r5320359 * r5320359;
        double r5320362 = 4.0;
        double r5320363 = a;
        double r5320364 = c;
        double r5320365 = r5320363 * r5320364;
        double r5320366 = r5320362 * r5320365;
        double r5320367 = r5320361 - r5320366;
        double r5320368 = sqrt(r5320367);
        double r5320369 = r5320360 - r5320368;
        double r5320370 = 2.0;
        double r5320371 = r5320370 * r5320363;
        double r5320372 = r5320369 / r5320371;
        return r5320372;
}


double f_of(float a, float b, float c) {
        float r5320373 = b;
        float r5320374 = -1.8681440687605764e-97f;
        bool r5320375 = r5320373 <= r5320374;
        float r5320376 = -r5320373;
        float r5320377 = r5320373 + r5320376;
        float r5320378 = 2.0f;
        float r5320379 = a;
        float r5320380 = r5320378 * r5320379;
        float r5320381 = r5320377 / r5320380;
        float r5320382 = c;
        float r5320383 = r5320382 / r5320373;
        float r5320384 = r5320381 - r5320383;
        float r5320385 = 1.4221487181389516e+74f;
        bool r5320386 = r5320373 <= r5320385;
        float r5320387 = r5320373 * r5320373;
        float r5320388 = 4.0f;
        float r5320389 = r5320379 * r5320382;
        float r5320390 = r5320388 * r5320389;
        float r5320391 = r5320387 - r5320390;
        float r5320392 = sqrt(r5320391);
        float r5320393 = r5320376 - r5320392;
        float r5320394 = 1.0f;
        float r5320395 = r5320394 / r5320380;
        float r5320396 = r5320393 * r5320395;
        float r5320397 = r5320382 / r5320378;
        float r5320398 = r5320378 / r5320373;
        float r5320399 = r5320397 * r5320398;
        float r5320400 = r5320373 / r5320379;
        float r5320401 = r5320399 - r5320400;
        float r5320402 = r5320386 ? r5320396 : r5320401;
        float r5320403 = r5320375 ? r5320384 : r5320402;
        return r5320403;
}

double f_od(double a, double b, double c) {
        double r5320404 = b;
        double r5320405 = -1.8681440687605764e-97;
        bool r5320406 = r5320404 <= r5320405;
        double r5320407 = -r5320404;
        double r5320408 = r5320404 + r5320407;
        double r5320409 = 2.0;
        double r5320410 = a;
        double r5320411 = r5320409 * r5320410;
        double r5320412 = r5320408 / r5320411;
        double r5320413 = c;
        double r5320414 = r5320413 / r5320404;
        double r5320415 = r5320412 - r5320414;
        double r5320416 = 1.4221487181389516e+74;
        bool r5320417 = r5320404 <= r5320416;
        double r5320418 = r5320404 * r5320404;
        double r5320419 = 4.0;
        double r5320420 = r5320410 * r5320413;
        double r5320421 = r5320419 * r5320420;
        double r5320422 = r5320418 - r5320421;
        double r5320423 = sqrt(r5320422);
        double r5320424 = r5320407 - r5320423;
        double r5320425 = 1.0;
        double r5320426 = r5320425 / r5320411;
        double r5320427 = r5320424 * r5320426;
        double r5320428 = r5320413 / r5320409;
        double r5320429 = r5320409 / r5320404;
        double r5320430 = r5320428 * r5320429;
        double r5320431 = r5320404 / r5320410;
        double r5320432 = r5320430 - r5320431;
        double r5320433 = r5320417 ? r5320427 : r5320432;
        double r5320434 = r5320406 ? r5320415 : r5320433;
        return r5320434;
}

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 r5320435, r5320436, r5320437, r5320438, r5320439, r5320440, r5320441, r5320442, r5320443, r5320444, r5320445, r5320446, r5320447, r5320448;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320435);
        mpfr_init(r5320436);
        mpfr_init(r5320437);
        mpfr_init_set_str(r5320438, "4", 10, MPFR_RNDN);
        mpfr_init(r5320439);
        mpfr_init(r5320440);
        mpfr_init(r5320441);
        mpfr_init(r5320442);
        mpfr_init(r5320443);
        mpfr_init(r5320444);
        mpfr_init(r5320445);
        mpfr_init_set_str(r5320446, "2", 10, MPFR_RNDN);
        mpfr_init(r5320447);
        mpfr_init(r5320448);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r5320435, b, MPFR_RNDN);
        mpfr_neg(r5320436, r5320435, MPFR_RNDN);
        mpfr_sqr(r5320437, r5320435, MPFR_RNDN);
        ;
        mpfr_set_d(r5320439, a, MPFR_RNDN);
        mpfr_set_d(r5320440, c, MPFR_RNDN);
        mpfr_mul(r5320441, r5320439, r5320440, MPFR_RNDN);
        mpfr_mul(r5320442, r5320438, r5320441, MPFR_RNDN);
        mpfr_sub(r5320443, r5320437, r5320442, MPFR_RNDN);
        mpfr_sqrt(r5320444, r5320443, MPFR_RNDN);
        mpfr_sub(r5320445, r5320436, r5320444, MPFR_RNDN);
        ;
        mpfr_mul(r5320447, r5320446, r5320439, MPFR_RNDN);
        mpfr_div(r5320448, r5320445, r5320447, MPFR_RNDN);
        return mpfr_get_d(r5320448, MPFR_RNDN);
}

static mpfr_t r5320449, r5320450, r5320451, r5320452, r5320453, r5320454, r5320455, r5320456, r5320457, r5320458, r5320459, r5320460, r5320461, r5320462, r5320463, r5320464, r5320465, r5320466, r5320467, r5320468, r5320469, r5320470, r5320471, r5320472, r5320473, r5320474, r5320475, r5320476, r5320477, r5320478, r5320479;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320449);
        mpfr_init_set_str(r5320450, "-1.8681440687605764e-97", 10, MPFR_RNDN);
        mpfr_init(r5320451);
        mpfr_init(r5320452);
        mpfr_init(r5320453);
        mpfr_init_set_str(r5320454, "2", 10, MPFR_RNDN);
        mpfr_init(r5320455);
        mpfr_init(r5320456);
        mpfr_init(r5320457);
        mpfr_init(r5320458);
        mpfr_init(r5320459);
        mpfr_init(r5320460);
        mpfr_init_set_str(r5320461, "1.4221487181389516e+74", 10, MPFR_RNDN);
        mpfr_init(r5320462);
        mpfr_init(r5320463);
        mpfr_init_set_str(r5320464, "4", 10, MPFR_RNDN);
        mpfr_init(r5320465);
        mpfr_init(r5320466);
        mpfr_init(r5320467);
        mpfr_init(r5320468);
        mpfr_init(r5320469);
        mpfr_init_set_str(r5320470, "1", 10, MPFR_RNDN);
        mpfr_init(r5320471);
        mpfr_init(r5320472);
        mpfr_init(r5320473);
        mpfr_init(r5320474);
        mpfr_init(r5320475);
        mpfr_init(r5320476);
        mpfr_init(r5320477);
        mpfr_init(r5320478);
        mpfr_init(r5320479);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r5320449, b, MPFR_RNDN);
        ;
        mpfr_set_si(r5320451, mpfr_cmp(r5320449, r5320450) <= 0, MPFR_RNDN);
        mpfr_neg(r5320452, r5320449, MPFR_RNDN);
        mpfr_add(r5320453, r5320449, r5320452, MPFR_RNDN);
        ;
        mpfr_set_d(r5320455, a, MPFR_RNDN);
        mpfr_mul(r5320456, r5320454, r5320455, MPFR_RNDN);
        mpfr_div(r5320457, r5320453, r5320456, MPFR_RNDN);
        mpfr_set_d(r5320458, c, MPFR_RNDN);
        mpfr_div(r5320459, r5320458, r5320449, MPFR_RNDN);
        mpfr_sub(r5320460, r5320457, r5320459, MPFR_RNDN);
        ;
        mpfr_set_si(r5320462, mpfr_cmp(r5320449, r5320461) <= 0, MPFR_RNDN);
        mpfr_sqr(r5320463, r5320449, MPFR_RNDN);
        ;
        mpfr_mul(r5320465, r5320455, r5320458, MPFR_RNDN);
        mpfr_mul(r5320466, r5320464, r5320465, MPFR_RNDN);
        mpfr_sub(r5320467, r5320463, r5320466, MPFR_RNDN);
        mpfr_sqrt(r5320468, r5320467, MPFR_RNDN);
        mpfr_sub(r5320469, r5320452, r5320468, MPFR_RNDN);
        ;
        mpfr_div(r5320471, r5320470, r5320456, MPFR_RNDN);
        mpfr_mul(r5320472, r5320469, r5320471, MPFR_RNDN);
        mpfr_div(r5320473, r5320458, r5320454, MPFR_RNDN);
        mpfr_div(r5320474, r5320454, r5320449, MPFR_RNDN);
        mpfr_mul(r5320475, r5320473, r5320474, MPFR_RNDN);
        mpfr_div(r5320476, r5320449, r5320455, MPFR_RNDN);
        mpfr_sub(r5320477, r5320475, r5320476, MPFR_RNDN);
        if (mpfr_get_si(r5320462, MPFR_RNDN)) { mpfr_set(r5320478, r5320472, MPFR_RNDN); } else { mpfr_set(r5320478, r5320477, MPFR_RNDN); };
        if (mpfr_get_si(r5320451, MPFR_RNDN)) { mpfr_set(r5320479, r5320460, MPFR_RNDN); } else { mpfr_set(r5320479, r5320478, MPFR_RNDN); };
        return mpfr_get_d(r5320479, MPFR_RNDN);
}

static mpfr_t r5320480, r5320481, r5320482, r5320483, r5320484, r5320485, r5320486, r5320487, r5320488, r5320489, r5320490, r5320491, r5320492, r5320493, r5320494, r5320495, r5320496, r5320497, r5320498, r5320499, r5320500, r5320501, r5320502, r5320503, r5320504, r5320505, r5320506, r5320507, r5320508, r5320509, r5320510;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320480);
        mpfr_init_set_str(r5320481, "-1.8681440687605764e-97", 10, MPFR_RNDN);
        mpfr_init(r5320482);
        mpfr_init(r5320483);
        mpfr_init(r5320484);
        mpfr_init_set_str(r5320485, "2", 10, MPFR_RNDN);
        mpfr_init(r5320486);
        mpfr_init(r5320487);
        mpfr_init(r5320488);
        mpfr_init(r5320489);
        mpfr_init(r5320490);
        mpfr_init(r5320491);
        mpfr_init_set_str(r5320492, "1.4221487181389516e+74", 10, MPFR_RNDN);
        mpfr_init(r5320493);
        mpfr_init(r5320494);
        mpfr_init_set_str(r5320495, "4", 10, MPFR_RNDN);
        mpfr_init(r5320496);
        mpfr_init(r5320497);
        mpfr_init(r5320498);
        mpfr_init(r5320499);
        mpfr_init(r5320500);
        mpfr_init_set_str(r5320501, "1", 10, MPFR_RNDN);
        mpfr_init(r5320502);
        mpfr_init(r5320503);
        mpfr_init(r5320504);
        mpfr_init(r5320505);
        mpfr_init(r5320506);
        mpfr_init(r5320507);
        mpfr_init(r5320508);
        mpfr_init(r5320509);
        mpfr_init(r5320510);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r5320480, b, MPFR_RNDN);
        ;
        mpfr_set_si(r5320482, mpfr_cmp(r5320480, r5320481) <= 0, MPFR_RNDN);
        mpfr_neg(r5320483, r5320480, MPFR_RNDN);
        mpfr_add(r5320484, r5320480, r5320483, MPFR_RNDN);
        ;
        mpfr_set_d(r5320486, a, MPFR_RNDN);
        mpfr_mul(r5320487, r5320485, r5320486, MPFR_RNDN);
        mpfr_div(r5320488, r5320484, r5320487, MPFR_RNDN);
        mpfr_set_d(r5320489, c, MPFR_RNDN);
        mpfr_div(r5320490, r5320489, r5320480, MPFR_RNDN);
        mpfr_sub(r5320491, r5320488, r5320490, MPFR_RNDN);
        ;
        mpfr_set_si(r5320493, mpfr_cmp(r5320480, r5320492) <= 0, MPFR_RNDN);
        mpfr_sqr(r5320494, r5320480, MPFR_RNDN);
        ;
        mpfr_mul(r5320496, r5320486, r5320489, MPFR_RNDN);
        mpfr_mul(r5320497, r5320495, r5320496, MPFR_RNDN);
        mpfr_sub(r5320498, r5320494, r5320497, MPFR_RNDN);
        mpfr_sqrt(r5320499, r5320498, MPFR_RNDN);
        mpfr_sub(r5320500, r5320483, r5320499, MPFR_RNDN);
        ;
        mpfr_div(r5320502, r5320501, r5320487, MPFR_RNDN);
        mpfr_mul(r5320503, r5320500, r5320502, MPFR_RNDN);
        mpfr_div(r5320504, r5320489, r5320485, MPFR_RNDN);
        mpfr_div(r5320505, r5320485, r5320480, MPFR_RNDN);
        mpfr_mul(r5320506, r5320504, r5320505, MPFR_RNDN);
        mpfr_div(r5320507, r5320480, r5320486, MPFR_RNDN);
        mpfr_sub(r5320508, r5320506, r5320507, MPFR_RNDN);
        if (mpfr_get_si(r5320493, MPFR_RNDN)) { mpfr_set(r5320509, r5320503, MPFR_RNDN); } else { mpfr_set(r5320509, r5320508, MPFR_RNDN); };
        if (mpfr_get_si(r5320482, MPFR_RNDN)) { mpfr_set(r5320510, r5320491, MPFR_RNDN); } else { mpfr_set(r5320510, r5320509, MPFR_RNDN); };
        return mpfr_get_d(r5320510, MPFR_RNDN);
}

