#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 r5353373 = b_2F2;
        float r5353374 = -r5353373;
        float r5353375 = r5353373 * r5353373;
        float r5353376 = a;
        float r5353377 = c;
        float r5353378 = r5353376 * r5353377;
        float r5353379 = r5353375 - r5353378;
        float r5353380 = sqrt(r5353379);
        float r5353381 = r5353374 - r5353380;
        float r5353382 = r5353381 / r5353376;
        return r5353382;
}

double f_id(double a, double b_2F2, double c) {
        double r5353383 = b_2F2;
        double r5353384 = -r5353383;
        double r5353385 = r5353383 * r5353383;
        double r5353386 = a;
        double r5353387 = c;
        double r5353388 = r5353386 * r5353387;
        double r5353389 = r5353385 - r5353388;
        double r5353390 = sqrt(r5353389);
        double r5353391 = r5353384 - r5353390;
        double r5353392 = r5353391 / r5353386;
        return r5353392;
}


double f_of(float a, float b_2F2, float c) {
        float r5353393 = b_2F2;
        float r5353394 = -9.117517880804678e+140f;
        bool r5353395 = r5353393 <= r5353394;
        float r5353396 = c;
        float r5353397 = r5353396 / r5353393;
        float r5353398 = -0.5f;
        float r5353399 = r5353397 * r5353398;
        float r5353400 = 3.131324707375834e-52f;
        bool r5353401 = r5353393 <= r5353400;
        float r5353402 = 1.0f;
        float r5353403 = r5353393 * r5353393;
        float r5353404 = a;
        float r5353405 = r5353396 * r5353404;
        float r5353406 = r5353403 - r5353405;
        float r5353407 = sqrt(r5353406);
        float r5353408 = -r5353393;
        float r5353409 = r5353407 + r5353408;
        float r5353410 = r5353409 / r5353396;
        float r5353411 = r5353402 / r5353410;
        float r5353412 = 0.5f;
        float r5353413 = r5353393 / r5353412;
        float r5353414 = r5353396 / r5353413;
        float r5353415 = 2.0f;
        float r5353416 = r5353415 / r5353404;
        float r5353417 = r5353393 * r5353416;
        float r5353418 = r5353414 - r5353417;
        float r5353419 = r5353401 ? r5353411 : r5353418;
        float r5353420 = r5353395 ? r5353399 : r5353419;
        return r5353420;
}

double f_od(double a, double b_2F2, double c) {
        double r5353421 = b_2F2;
        double r5353422 = -9.117517880804678e+140;
        bool r5353423 = r5353421 <= r5353422;
        double r5353424 = c;
        double r5353425 = r5353424 / r5353421;
        double r5353426 = -0.5;
        double r5353427 = r5353425 * r5353426;
        double r5353428 = 3.131324707375834e-52;
        bool r5353429 = r5353421 <= r5353428;
        double r5353430 = 1.0;
        double r5353431 = r5353421 * r5353421;
        double r5353432 = a;
        double r5353433 = r5353424 * r5353432;
        double r5353434 = r5353431 - r5353433;
        double r5353435 = sqrt(r5353434);
        double r5353436 = -r5353421;
        double r5353437 = r5353435 + r5353436;
        double r5353438 = r5353437 / r5353424;
        double r5353439 = r5353430 / r5353438;
        double r5353440 = 0.5;
        double r5353441 = r5353421 / r5353440;
        double r5353442 = r5353424 / r5353441;
        double r5353443 = 2.0;
        double r5353444 = r5353443 / r5353432;
        double r5353445 = r5353421 * r5353444;
        double r5353446 = r5353442 - r5353445;
        double r5353447 = r5353429 ? r5353439 : r5353446;
        double r5353448 = r5353423 ? r5353427 : r5353447;
        return r5353448;
}

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 r5353449, r5353450, r5353451, r5353452, r5353453, r5353454, r5353455, r5353456, r5353457, r5353458;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353449);
        mpfr_init(r5353450);
        mpfr_init(r5353451);
        mpfr_init(r5353452);
        mpfr_init(r5353453);
        mpfr_init(r5353454);
        mpfr_init(r5353455);
        mpfr_init(r5353456);
        mpfr_init(r5353457);
        mpfr_init(r5353458);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r5353449, b_2F2, MPFR_RNDN);
        mpfr_neg(r5353450, r5353449, MPFR_RNDN);
        mpfr_sqr(r5353451, r5353449, MPFR_RNDN);
        mpfr_set_d(r5353452, a, MPFR_RNDN);
        mpfr_set_d(r5353453, c, MPFR_RNDN);
        mpfr_mul(r5353454, r5353452, r5353453, MPFR_RNDN);
        mpfr_sub(r5353455, r5353451, r5353454, MPFR_RNDN);
        mpfr_sqrt(r5353456, r5353455, MPFR_RNDN);
        mpfr_sub(r5353457, r5353450, r5353456, MPFR_RNDN);
        mpfr_div(r5353458, r5353457, r5353452, MPFR_RNDN);
        return mpfr_get_d(r5353458, MPFR_RNDN);
}

static mpfr_t r5353459, r5353460, r5353461, r5353462, r5353463, r5353464, r5353465, r5353466, r5353467, r5353468, r5353469, r5353470, r5353471, r5353472, r5353473, r5353474, r5353475, r5353476, r5353477, r5353478, r5353479, r5353480, r5353481, r5353482, r5353483, r5353484, r5353485, r5353486;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353459);
        mpfr_init_set_str(r5353460, "-9.117517880804678e+140", 10, MPFR_RNDN);
        mpfr_init(r5353461);
        mpfr_init(r5353462);
        mpfr_init(r5353463);
        mpfr_init_set_str(r5353464, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r5353465);
        mpfr_init_set_str(r5353466, "3.131324707375834e-52", 10, MPFR_RNDN);
        mpfr_init(r5353467);
        mpfr_init_set_str(r5353468, "1", 10, MPFR_RNDN);
        mpfr_init(r5353469);
        mpfr_init(r5353470);
        mpfr_init(r5353471);
        mpfr_init(r5353472);
        mpfr_init(r5353473);
        mpfr_init(r5353474);
        mpfr_init(r5353475);
        mpfr_init(r5353476);
        mpfr_init(r5353477);
        mpfr_init_set_str(r5353478, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5353479);
        mpfr_init(r5353480);
        mpfr_init_set_str(r5353481, "2", 10, MPFR_RNDN);
        mpfr_init(r5353482);
        mpfr_init(r5353483);
        mpfr_init(r5353484);
        mpfr_init(r5353485);
        mpfr_init(r5353486);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r5353459, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5353461, mpfr_cmp(r5353459, r5353460) <= 0, MPFR_RNDN);
        mpfr_set_d(r5353462, c, MPFR_RNDN);
        mpfr_div(r5353463, r5353462, r5353459, MPFR_RNDN);
        ;
        mpfr_mul(r5353465, r5353463, r5353464, MPFR_RNDN);
        ;
        mpfr_set_si(r5353467, mpfr_cmp(r5353459, r5353466) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5353469, r5353459, r5353459, MPFR_RNDN);
        mpfr_set_d(r5353470, a, MPFR_RNDN);
        mpfr_mul(r5353471, r5353462, r5353470, MPFR_RNDN);
        mpfr_sub(r5353472, r5353469, r5353471, MPFR_RNDN);
        mpfr_sqrt(r5353473, r5353472, MPFR_RNDN);
        mpfr_neg(r5353474, r5353459, MPFR_RNDN);
        mpfr_add(r5353475, r5353473, r5353474, MPFR_RNDN);
        mpfr_div(r5353476, r5353475, r5353462, MPFR_RNDN);
        mpfr_div(r5353477, r5353468, r5353476, MPFR_RNDN);
        ;
        mpfr_div(r5353479, r5353459, r5353478, MPFR_RNDN);
        mpfr_div(r5353480, r5353462, r5353479, MPFR_RNDN);
        ;
        mpfr_div(r5353482, r5353481, r5353470, MPFR_RNDN);
        mpfr_mul(r5353483, r5353459, r5353482, MPFR_RNDN);
        mpfr_sub(r5353484, r5353480, r5353483, MPFR_RNDN);
        if (mpfr_get_si(r5353467, MPFR_RNDN)) { mpfr_set(r5353485, r5353477, MPFR_RNDN); } else { mpfr_set(r5353485, r5353484, MPFR_RNDN); };
        if (mpfr_get_si(r5353461, MPFR_RNDN)) { mpfr_set(r5353486, r5353465, MPFR_RNDN); } else { mpfr_set(r5353486, r5353485, MPFR_RNDN); };
        return mpfr_get_d(r5353486, MPFR_RNDN);
}

static mpfr_t r5353487, r5353488, r5353489, r5353490, r5353491, r5353492, r5353493, r5353494, r5353495, r5353496, r5353497, r5353498, r5353499, r5353500, r5353501, r5353502, r5353503, r5353504, r5353505, r5353506, r5353507, r5353508, r5353509, r5353510, r5353511, r5353512, r5353513, r5353514;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353487);
        mpfr_init_set_str(r5353488, "-9.117517880804678e+140", 10, MPFR_RNDN);
        mpfr_init(r5353489);
        mpfr_init(r5353490);
        mpfr_init(r5353491);
        mpfr_init_set_str(r5353492, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r5353493);
        mpfr_init_set_str(r5353494, "3.131324707375834e-52", 10, MPFR_RNDN);
        mpfr_init(r5353495);
        mpfr_init_set_str(r5353496, "1", 10, MPFR_RNDN);
        mpfr_init(r5353497);
        mpfr_init(r5353498);
        mpfr_init(r5353499);
        mpfr_init(r5353500);
        mpfr_init(r5353501);
        mpfr_init(r5353502);
        mpfr_init(r5353503);
        mpfr_init(r5353504);
        mpfr_init(r5353505);
        mpfr_init_set_str(r5353506, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5353507);
        mpfr_init(r5353508);
        mpfr_init_set_str(r5353509, "2", 10, MPFR_RNDN);
        mpfr_init(r5353510);
        mpfr_init(r5353511);
        mpfr_init(r5353512);
        mpfr_init(r5353513);
        mpfr_init(r5353514);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r5353487, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5353489, mpfr_cmp(r5353487, r5353488) <= 0, MPFR_RNDN);
        mpfr_set_d(r5353490, c, MPFR_RNDN);
        mpfr_div(r5353491, r5353490, r5353487, MPFR_RNDN);
        ;
        mpfr_mul(r5353493, r5353491, r5353492, MPFR_RNDN);
        ;
        mpfr_set_si(r5353495, mpfr_cmp(r5353487, r5353494) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5353497, r5353487, r5353487, MPFR_RNDN);
        mpfr_set_d(r5353498, a, MPFR_RNDN);
        mpfr_mul(r5353499, r5353490, r5353498, MPFR_RNDN);
        mpfr_sub(r5353500, r5353497, r5353499, MPFR_RNDN);
        mpfr_sqrt(r5353501, r5353500, MPFR_RNDN);
        mpfr_neg(r5353502, r5353487, MPFR_RNDN);
        mpfr_add(r5353503, r5353501, r5353502, MPFR_RNDN);
        mpfr_div(r5353504, r5353503, r5353490, MPFR_RNDN);
        mpfr_div(r5353505, r5353496, r5353504, MPFR_RNDN);
        ;
        mpfr_div(r5353507, r5353487, r5353506, MPFR_RNDN);
        mpfr_div(r5353508, r5353490, r5353507, MPFR_RNDN);
        ;
        mpfr_div(r5353510, r5353509, r5353498, MPFR_RNDN);
        mpfr_mul(r5353511, r5353487, r5353510, MPFR_RNDN);
        mpfr_sub(r5353512, r5353508, r5353511, MPFR_RNDN);
        if (mpfr_get_si(r5353495, MPFR_RNDN)) { mpfr_set(r5353513, r5353505, MPFR_RNDN); } else { mpfr_set(r5353513, r5353512, MPFR_RNDN); };
        if (mpfr_get_si(r5353489, MPFR_RNDN)) { mpfr_set(r5353514, r5353493, MPFR_RNDN); } else { mpfr_set(r5353514, r5353513, MPFR_RNDN); };
        return mpfr_get_d(r5353514, MPFR_RNDN);
}

