#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 r4775352 = b;
        float r4775353 = -r4775352;
        float r4775354 = r4775352 * r4775352;
        float r4775355 = 4.0f;
        float r4775356 = a;
        float r4775357 = c;
        float r4775358 = r4775356 * r4775357;
        float r4775359 = r4775355 * r4775358;
        float r4775360 = r4775354 - r4775359;
        float r4775361 = sqrt(r4775360);
        float r4775362 = r4775353 - r4775361;
        float r4775363 = 2.0f;
        float r4775364 = r4775363 * r4775356;
        float r4775365 = r4775362 / r4775364;
        return r4775365;
}

double f_id(double a, double b, double c) {
        double r4775366 = b;
        double r4775367 = -r4775366;
        double r4775368 = r4775366 * r4775366;
        double r4775369 = 4.0;
        double r4775370 = a;
        double r4775371 = c;
        double r4775372 = r4775370 * r4775371;
        double r4775373 = r4775369 * r4775372;
        double r4775374 = r4775368 - r4775373;
        double r4775375 = sqrt(r4775374);
        double r4775376 = r4775367 - r4775375;
        double r4775377 = 2.0;
        double r4775378 = r4775377 * r4775370;
        double r4775379 = r4775376 / r4775378;
        return r4775379;
}


double f_of(float a, float b, float c) {
        float r4775380 = b;
        float r4775381 = -4.531827883994214e-14f;
        bool r4775382 = r4775380 <= r4775381;
        float r4775383 = c;
        float r4775384 = 2.0f;
        float r4775385 = r4775383 / r4775384;
        float r4775386 = 4.0f;
        float r4775387 = r4775385 * r4775386;
        float r4775388 = r4775383 + r4775383;
        float r4775389 = a;
        float r4775390 = r4775380 / r4775389;
        float r4775391 = r4775388 / r4775390;
        float r4775392 = -r4775380;
        float r4775393 = r4775380 - r4775392;
        float r4775394 = r4775391 - r4775393;
        float r4775395 = r4775387 / r4775394;
        float r4775396 = 1438490.0801097094f;
        bool r4775397 = r4775380 <= r4775396;
        float r4775398 = r4775380 * r4775380;
        float r4775399 = r4775389 * r4775383;
        float r4775400 = r4775386 * r4775399;
        float r4775401 = r4775398 - r4775400;
        float r4775402 = sqrt(r4775401);
        float r4775403 = r4775392 - r4775402;
        float r4775404 = 1.0f;
        float r4775405 = r4775384 * r4775389;
        float r4775406 = r4775404 / r4775405;
        float r4775407 = r4775403 * r4775406;
        float r4775408 = r4775383 / r4775380;
        float r4775409 = r4775408 - r4775390;
        float r4775410 = r4775397 ? r4775407 : r4775409;
        float r4775411 = r4775382 ? r4775395 : r4775410;
        return r4775411;
}

double f_od(double a, double b, double c) {
        double r4775412 = b;
        double r4775413 = -4.531827883994214e-14;
        bool r4775414 = r4775412 <= r4775413;
        double r4775415 = c;
        double r4775416 = 2.0;
        double r4775417 = r4775415 / r4775416;
        double r4775418 = 4.0;
        double r4775419 = r4775417 * r4775418;
        double r4775420 = r4775415 + r4775415;
        double r4775421 = a;
        double r4775422 = r4775412 / r4775421;
        double r4775423 = r4775420 / r4775422;
        double r4775424 = -r4775412;
        double r4775425 = r4775412 - r4775424;
        double r4775426 = r4775423 - r4775425;
        double r4775427 = r4775419 / r4775426;
        double r4775428 = 1438490.0801097094;
        bool r4775429 = r4775412 <= r4775428;
        double r4775430 = r4775412 * r4775412;
        double r4775431 = r4775421 * r4775415;
        double r4775432 = r4775418 * r4775431;
        double r4775433 = r4775430 - r4775432;
        double r4775434 = sqrt(r4775433);
        double r4775435 = r4775424 - r4775434;
        double r4775436 = 1.0;
        double r4775437 = r4775416 * r4775421;
        double r4775438 = r4775436 / r4775437;
        double r4775439 = r4775435 * r4775438;
        double r4775440 = r4775415 / r4775412;
        double r4775441 = r4775440 - r4775422;
        double r4775442 = r4775429 ? r4775439 : r4775441;
        double r4775443 = r4775414 ? r4775427 : r4775442;
        return r4775443;
}

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 r4775444, r4775445, r4775446, r4775447, r4775448, r4775449, r4775450, r4775451, r4775452, r4775453, r4775454, r4775455, r4775456, r4775457;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775444);
        mpfr_init(r4775445);
        mpfr_init(r4775446);
        mpfr_init_set_str(r4775447, "4", 10, MPFR_RNDN);
        mpfr_init(r4775448);
        mpfr_init(r4775449);
        mpfr_init(r4775450);
        mpfr_init(r4775451);
        mpfr_init(r4775452);
        mpfr_init(r4775453);
        mpfr_init(r4775454);
        mpfr_init_set_str(r4775455, "2", 10, MPFR_RNDN);
        mpfr_init(r4775456);
        mpfr_init(r4775457);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r4775444, b, MPFR_RNDN);
        mpfr_neg(r4775445, r4775444, MPFR_RNDN);
        mpfr_sqr(r4775446, r4775444, MPFR_RNDN);
        ;
        mpfr_set_d(r4775448, a, MPFR_RNDN);
        mpfr_set_d(r4775449, c, MPFR_RNDN);
        mpfr_mul(r4775450, r4775448, r4775449, MPFR_RNDN);
        mpfr_mul(r4775451, r4775447, r4775450, MPFR_RNDN);
        mpfr_sub(r4775452, r4775446, r4775451, MPFR_RNDN);
        mpfr_sqrt(r4775453, r4775452, MPFR_RNDN);
        mpfr_sub(r4775454, r4775445, r4775453, MPFR_RNDN);
        ;
        mpfr_mul(r4775456, r4775455, r4775448, MPFR_RNDN);
        mpfr_div(r4775457, r4775454, r4775456, MPFR_RNDN);
        return mpfr_get_d(r4775457, MPFR_RNDN);
}

static mpfr_t r4775458, r4775459, r4775460, r4775461, r4775462, r4775463, r4775464, r4775465, r4775466, r4775467, r4775468, r4775469, r4775470, r4775471, r4775472, r4775473, r4775474, r4775475, r4775476, r4775477, r4775478, r4775479, r4775480, r4775481, r4775482, r4775483, r4775484, r4775485, r4775486, r4775487, r4775488, r4775489;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775458);
        mpfr_init_set_str(r4775459, "-4.531827883994214e-14", 10, MPFR_RNDN);
        mpfr_init(r4775460);
        mpfr_init(r4775461);
        mpfr_init_set_str(r4775462, "2", 10, MPFR_RNDN);
        mpfr_init(r4775463);
        mpfr_init_set_str(r4775464, "4", 10, MPFR_RNDN);
        mpfr_init(r4775465);
        mpfr_init(r4775466);
        mpfr_init(r4775467);
        mpfr_init(r4775468);
        mpfr_init(r4775469);
        mpfr_init(r4775470);
        mpfr_init(r4775471);
        mpfr_init(r4775472);
        mpfr_init(r4775473);
        mpfr_init_set_str(r4775474, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4775475);
        mpfr_init(r4775476);
        mpfr_init(r4775477);
        mpfr_init(r4775478);
        mpfr_init(r4775479);
        mpfr_init(r4775480);
        mpfr_init(r4775481);
        mpfr_init_set_str(r4775482, "1", 10, MPFR_RNDN);
        mpfr_init(r4775483);
        mpfr_init(r4775484);
        mpfr_init(r4775485);
        mpfr_init(r4775486);
        mpfr_init(r4775487);
        mpfr_init(r4775488);
        mpfr_init(r4775489);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r4775458, b, MPFR_RNDN);
        ;
        mpfr_set_si(r4775460, mpfr_cmp(r4775458, r4775459) <= 0, MPFR_RNDN);
        mpfr_set_d(r4775461, c, MPFR_RNDN);
        ;
        mpfr_div(r4775463, r4775461, r4775462, MPFR_RNDN);
        ;
        mpfr_mul(r4775465, r4775463, r4775464, MPFR_RNDN);
        mpfr_add(r4775466, r4775461, r4775461, MPFR_RNDN);
        mpfr_set_d(r4775467, a, MPFR_RNDN);
        mpfr_div(r4775468, r4775458, r4775467, MPFR_RNDN);
        mpfr_div(r4775469, r4775466, r4775468, MPFR_RNDN);
        mpfr_neg(r4775470, r4775458, MPFR_RNDN);
        mpfr_sub(r4775471, r4775458, r4775470, MPFR_RNDN);
        mpfr_sub(r4775472, r4775469, r4775471, MPFR_RNDN);
        mpfr_div(r4775473, r4775465, r4775472, MPFR_RNDN);
        ;
        mpfr_set_si(r4775475, mpfr_cmp(r4775458, r4775474) <= 0, MPFR_RNDN);
        mpfr_sqr(r4775476, r4775458, MPFR_RNDN);
        mpfr_mul(r4775477, r4775467, r4775461, MPFR_RNDN);
        mpfr_mul(r4775478, r4775464, r4775477, MPFR_RNDN);
        mpfr_sub(r4775479, r4775476, r4775478, MPFR_RNDN);
        mpfr_sqrt(r4775480, r4775479, MPFR_RNDN);
        mpfr_sub(r4775481, r4775470, r4775480, MPFR_RNDN);
        ;
        mpfr_mul(r4775483, r4775462, r4775467, MPFR_RNDN);
        mpfr_div(r4775484, r4775482, r4775483, MPFR_RNDN);
        mpfr_mul(r4775485, r4775481, r4775484, MPFR_RNDN);
        mpfr_div(r4775486, r4775461, r4775458, MPFR_RNDN);
        mpfr_sub(r4775487, r4775486, r4775468, MPFR_RNDN);
        if (mpfr_get_si(r4775475, MPFR_RNDN)) { mpfr_set(r4775488, r4775485, MPFR_RNDN); } else { mpfr_set(r4775488, r4775487, MPFR_RNDN); };
        if (mpfr_get_si(r4775460, MPFR_RNDN)) { mpfr_set(r4775489, r4775473, MPFR_RNDN); } else { mpfr_set(r4775489, r4775488, MPFR_RNDN); };
        return mpfr_get_d(r4775489, MPFR_RNDN);
}

static mpfr_t r4775490, r4775491, r4775492, r4775493, r4775494, r4775495, r4775496, r4775497, r4775498, r4775499, r4775500, r4775501, r4775502, r4775503, r4775504, r4775505, r4775506, r4775507, r4775508, r4775509, r4775510, r4775511, r4775512, r4775513, r4775514, r4775515, r4775516, r4775517, r4775518, r4775519, r4775520, r4775521;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775490);
        mpfr_init_set_str(r4775491, "-4.531827883994214e-14", 10, MPFR_RNDN);
        mpfr_init(r4775492);
        mpfr_init(r4775493);
        mpfr_init_set_str(r4775494, "2", 10, MPFR_RNDN);
        mpfr_init(r4775495);
        mpfr_init_set_str(r4775496, "4", 10, MPFR_RNDN);
        mpfr_init(r4775497);
        mpfr_init(r4775498);
        mpfr_init(r4775499);
        mpfr_init(r4775500);
        mpfr_init(r4775501);
        mpfr_init(r4775502);
        mpfr_init(r4775503);
        mpfr_init(r4775504);
        mpfr_init(r4775505);
        mpfr_init_set_str(r4775506, "1438490.0801097094", 10, MPFR_RNDN);
        mpfr_init(r4775507);
        mpfr_init(r4775508);
        mpfr_init(r4775509);
        mpfr_init(r4775510);
        mpfr_init(r4775511);
        mpfr_init(r4775512);
        mpfr_init(r4775513);
        mpfr_init_set_str(r4775514, "1", 10, MPFR_RNDN);
        mpfr_init(r4775515);
        mpfr_init(r4775516);
        mpfr_init(r4775517);
        mpfr_init(r4775518);
        mpfr_init(r4775519);
        mpfr_init(r4775520);
        mpfr_init(r4775521);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r4775490, b, MPFR_RNDN);
        ;
        mpfr_set_si(r4775492, mpfr_cmp(r4775490, r4775491) <= 0, MPFR_RNDN);
        mpfr_set_d(r4775493, c, MPFR_RNDN);
        ;
        mpfr_div(r4775495, r4775493, r4775494, MPFR_RNDN);
        ;
        mpfr_mul(r4775497, r4775495, r4775496, MPFR_RNDN);
        mpfr_add(r4775498, r4775493, r4775493, MPFR_RNDN);
        mpfr_set_d(r4775499, a, MPFR_RNDN);
        mpfr_div(r4775500, r4775490, r4775499, MPFR_RNDN);
        mpfr_div(r4775501, r4775498, r4775500, MPFR_RNDN);
        mpfr_neg(r4775502, r4775490, MPFR_RNDN);
        mpfr_sub(r4775503, r4775490, r4775502, MPFR_RNDN);
        mpfr_sub(r4775504, r4775501, r4775503, MPFR_RNDN);
        mpfr_div(r4775505, r4775497, r4775504, MPFR_RNDN);
        ;
        mpfr_set_si(r4775507, mpfr_cmp(r4775490, r4775506) <= 0, MPFR_RNDN);
        mpfr_sqr(r4775508, r4775490, MPFR_RNDN);
        mpfr_mul(r4775509, r4775499, r4775493, MPFR_RNDN);
        mpfr_mul(r4775510, r4775496, r4775509, MPFR_RNDN);
        mpfr_sub(r4775511, r4775508, r4775510, MPFR_RNDN);
        mpfr_sqrt(r4775512, r4775511, MPFR_RNDN);
        mpfr_sub(r4775513, r4775502, r4775512, MPFR_RNDN);
        ;
        mpfr_mul(r4775515, r4775494, r4775499, MPFR_RNDN);
        mpfr_div(r4775516, r4775514, r4775515, MPFR_RNDN);
        mpfr_mul(r4775517, r4775513, r4775516, MPFR_RNDN);
        mpfr_div(r4775518, r4775493, r4775490, MPFR_RNDN);
        mpfr_sub(r4775519, r4775518, r4775500, MPFR_RNDN);
        if (mpfr_get_si(r4775507, MPFR_RNDN)) { mpfr_set(r4775520, r4775517, MPFR_RNDN); } else { mpfr_set(r4775520, r4775519, MPFR_RNDN); };
        if (mpfr_get_si(r4775492, MPFR_RNDN)) { mpfr_set(r4775521, r4775505, MPFR_RNDN); } else { mpfr_set(r4775521, r4775520, MPFR_RNDN); };
        return mpfr_get_d(r4775521, MPFR_RNDN);
}

