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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2, float c) {
        float r25565 = b_2;
        float r25566 = -r25565;
        float r25567 = r25565 * r25565;
        float r25568 = a;
        float r25569 = c;
        float r25570 = r25568 * r25569;
        float r25571 = r25567 - r25570;
        float r25572 = sqrt(r25571);
        float r25573 = r25566 - r25572;
        float r25574 = r25573 / r25568;
        return r25574;
}

double f_id(double a, double b_2, double c) {
        double r25575 = b_2;
        double r25576 = -r25575;
        double r25577 = r25575 * r25575;
        double r25578 = a;
        double r25579 = c;
        double r25580 = r25578 * r25579;
        double r25581 = r25577 - r25580;
        double r25582 = sqrt(r25581);
        double r25583 = r25576 - r25582;
        double r25584 = r25583 / r25578;
        return r25584;
}


double f_of(float a, float b_2, float c) {
        float r25585 = 1/2;
        float r25586 = b_2;
        float r25587 = r25585 / r25586;
        float r25588 = -0.13359450180270938;
        bool r25589 = r25587 <= r25588;
        float r25590 = c;
        float r25591 = a;
        float r25592 = r25590 * r25591;
        float r25593 = r25586 * r25586;
        float r25594 = r25591 * r25590;
        float r25595 = r25593 - r25594;
        float r25596 = sqrt(r25595);
        float r25597 = r25596 - r25586;
        float r25598 = r25592 / r25597;
        float r25599 = r25598 / r25591;
        float r25600 = -8.751770165129513e-306;
        bool r25601 = r25587 <= r25600;
        float r25602 = r25585 * r25590;
        float r25603 = r25586 / r25591;
        float r25604 = r25602 / r25603;
        float r25605 = r25586 + r25586;
        float r25606 = r25604 - r25605;
        float r25607 = r25590 / r25606;
        float r25608 = 5.862680853548771e-115;
        bool r25609 = r25587 <= r25608;
        float r25610 = -2;
        float r25611 = r25610 * r25603;
        float r25612 = 1;
        float r25613 = -r25586;
        float r25614 = r25613 - r25596;
        float r25615 = r25591 / r25614;
        float r25616 = r25612 / r25615;
        float r25617 = r25609 ? r25611 : r25616;
        float r25618 = r25601 ? r25607 : r25617;
        float r25619 = r25589 ? r25599 : r25618;
        return r25619;
}

double f_od(double a, double b_2, double c) {
        double r25620 = 1/2;
        double r25621 = b_2;
        double r25622 = r25620 / r25621;
        double r25623 = -0.13359450180270938;
        bool r25624 = r25622 <= r25623;
        double r25625 = c;
        double r25626 = a;
        double r25627 = r25625 * r25626;
        double r25628 = r25621 * r25621;
        double r25629 = r25626 * r25625;
        double r25630 = r25628 - r25629;
        double r25631 = sqrt(r25630);
        double r25632 = r25631 - r25621;
        double r25633 = r25627 / r25632;
        double r25634 = r25633 / r25626;
        double r25635 = -8.751770165129513e-306;
        bool r25636 = r25622 <= r25635;
        double r25637 = r25620 * r25625;
        double r25638 = r25621 / r25626;
        double r25639 = r25637 / r25638;
        double r25640 = r25621 + r25621;
        double r25641 = r25639 - r25640;
        double r25642 = r25625 / r25641;
        double r25643 = 5.862680853548771e-115;
        bool r25644 = r25622 <= r25643;
        double r25645 = -2;
        double r25646 = r25645 * r25638;
        double r25647 = 1;
        double r25648 = -r25621;
        double r25649 = r25648 - r25631;
        double r25650 = r25626 / r25649;
        double r25651 = r25647 / r25650;
        double r25652 = r25644 ? r25646 : r25651;
        double r25653 = r25636 ? r25642 : r25652;
        double r25654 = r25624 ? r25634 : r25653;
        return r25654;
}

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 r25655, r25656, r25657, r25658, r25659, r25660, r25661, r25662, r25663, r25664;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25655);
        mpfr_init(r25656);
        mpfr_init(r25657);
        mpfr_init(r25658);
        mpfr_init(r25659);
        mpfr_init(r25660);
        mpfr_init(r25661);
        mpfr_init(r25662);
        mpfr_init(r25663);
        mpfr_init(r25664);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r25655, b_2, MPFR_RNDN);
        mpfr_neg(r25656, r25655, MPFR_RNDN);
        mpfr_mul(r25657, r25655, r25655, MPFR_RNDN);
        mpfr_set_d(r25658, a, MPFR_RNDN);
        mpfr_set_d(r25659, c, MPFR_RNDN);
        mpfr_mul(r25660, r25658, r25659, MPFR_RNDN);
        mpfr_sub(r25661, r25657, r25660, MPFR_RNDN);
        mpfr_sqrt(r25662, r25661, MPFR_RNDN);
        mpfr_sub(r25663, r25656, r25662, MPFR_RNDN);
        mpfr_div(r25664, r25663, r25658, MPFR_RNDN);
        return mpfr_get_d(r25664, MPFR_RNDN);
}

static mpfr_t r25665, r25666, r25667, r25668, r25669, r25670, r25671, r25672, r25673, r25674, r25675, r25676, r25677, r25678, r25679, r25680, r25681, r25682, r25683, r25684, r25685, r25686, r25687, r25688, r25689, r25690, r25691, r25692, r25693, r25694, r25695, r25696, r25697, r25698, r25699;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init_set_str(r25665, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25666);
        mpfr_init(r25667);
        mpfr_init_set_str(r25668, "-0.13359450180270938", 10, MPFR_RNDN);
        mpfr_init(r25669);
        mpfr_init(r25670);
        mpfr_init(r25671);
        mpfr_init(r25672);
        mpfr_init(r25673);
        mpfr_init(r25674);
        mpfr_init(r25675);
        mpfr_init(r25676);
        mpfr_init(r25677);
        mpfr_init(r25678);
        mpfr_init(r25679);
        mpfr_init_set_str(r25680, "-8.751770165129513e-306", 10, MPFR_RNDN);
        mpfr_init(r25681);
        mpfr_init(r25682);
        mpfr_init(r25683);
        mpfr_init(r25684);
        mpfr_init(r25685);
        mpfr_init(r25686);
        mpfr_init(r25687);
        mpfr_init_set_str(r25688, "5.862680853548771e-115", 10, MPFR_RNDN);
        mpfr_init(r25689);
        mpfr_init_set_str(r25690, "-2", 10, MPFR_RNDN);
        mpfr_init(r25691);
        mpfr_init_set_str(r25692, "1", 10, MPFR_RNDN);
        mpfr_init(r25693);
        mpfr_init(r25694);
        mpfr_init(r25695);
        mpfr_init(r25696);
        mpfr_init(r25697);
        mpfr_init(r25698);
        mpfr_init(r25699);
}

double f_fm(double a, double b_2, double c) {
        ;
        mpfr_set_d(r25666, b_2, MPFR_RNDN);
        mpfr_div(r25667, r25665, r25666, MPFR_RNDN);
        ;
        mpfr_set_si(r25669, mpfr_cmp(r25667, r25668) <= 0, MPFR_RNDN);
        mpfr_set_d(r25670, c, MPFR_RNDN);
        mpfr_set_d(r25671, a, MPFR_RNDN);
        mpfr_mul(r25672, r25670, r25671, MPFR_RNDN);
        mpfr_mul(r25673, r25666, r25666, MPFR_RNDN);
        mpfr_mul(r25674, r25671, r25670, MPFR_RNDN);
        mpfr_sub(r25675, r25673, r25674, MPFR_RNDN);
        mpfr_sqrt(r25676, r25675, MPFR_RNDN);
        mpfr_sub(r25677, r25676, r25666, MPFR_RNDN);
        mpfr_div(r25678, r25672, r25677, MPFR_RNDN);
        mpfr_div(r25679, r25678, r25671, MPFR_RNDN);
        ;
        mpfr_set_si(r25681, mpfr_cmp(r25667, r25680) <= 0, MPFR_RNDN);
        mpfr_mul(r25682, r25665, r25670, MPFR_RNDN);
        mpfr_div(r25683, r25666, r25671, MPFR_RNDN);
        mpfr_div(r25684, r25682, r25683, MPFR_RNDN);
        mpfr_add(r25685, r25666, r25666, MPFR_RNDN);
        mpfr_sub(r25686, r25684, r25685, MPFR_RNDN);
        mpfr_div(r25687, r25670, r25686, MPFR_RNDN);
        ;
        mpfr_set_si(r25689, mpfr_cmp(r25667, r25688) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r25691, r25690, r25683, MPFR_RNDN);
        ;
        mpfr_neg(r25693, r25666, MPFR_RNDN);
        mpfr_sub(r25694, r25693, r25676, MPFR_RNDN);
        mpfr_div(r25695, r25671, r25694, MPFR_RNDN);
        mpfr_div(r25696, r25692, r25695, MPFR_RNDN);
        if (mpfr_get_si(r25689, MPFR_RNDN)) { mpfr_set(r25697, r25691, MPFR_RNDN); } else { mpfr_set(r25697, r25696, MPFR_RNDN); };
        if (mpfr_get_si(r25681, MPFR_RNDN)) { mpfr_set(r25698, r25687, MPFR_RNDN); } else { mpfr_set(r25698, r25697, MPFR_RNDN); };
        if (mpfr_get_si(r25669, MPFR_RNDN)) { mpfr_set(r25699, r25679, MPFR_RNDN); } else { mpfr_set(r25699, r25698, MPFR_RNDN); };
        return mpfr_get_d(r25699, MPFR_RNDN);
}

static mpfr_t r25700, r25701, r25702, r25703, r25704, r25705, r25706, r25707, r25708, r25709, r25710, r25711, r25712, r25713, r25714, r25715, r25716, r25717, r25718, r25719, r25720, r25721, r25722, r25723, r25724, r25725, r25726, r25727, r25728, r25729, r25730, r25731, r25732, r25733, r25734;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init_set_str(r25700, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25701);
        mpfr_init(r25702);
        mpfr_init_set_str(r25703, "-0.13359450180270938", 10, MPFR_RNDN);
        mpfr_init(r25704);
        mpfr_init(r25705);
        mpfr_init(r25706);
        mpfr_init(r25707);
        mpfr_init(r25708);
        mpfr_init(r25709);
        mpfr_init(r25710);
        mpfr_init(r25711);
        mpfr_init(r25712);
        mpfr_init(r25713);
        mpfr_init(r25714);
        mpfr_init_set_str(r25715, "-8.751770165129513e-306", 10, MPFR_RNDN);
        mpfr_init(r25716);
        mpfr_init(r25717);
        mpfr_init(r25718);
        mpfr_init(r25719);
        mpfr_init(r25720);
        mpfr_init(r25721);
        mpfr_init(r25722);
        mpfr_init_set_str(r25723, "5.862680853548771e-115", 10, MPFR_RNDN);
        mpfr_init(r25724);
        mpfr_init_set_str(r25725, "-2", 10, MPFR_RNDN);
        mpfr_init(r25726);
        mpfr_init_set_str(r25727, "1", 10, MPFR_RNDN);
        mpfr_init(r25728);
        mpfr_init(r25729);
        mpfr_init(r25730);
        mpfr_init(r25731);
        mpfr_init(r25732);
        mpfr_init(r25733);
        mpfr_init(r25734);
}

double f_dm(double a, double b_2, double c) {
        ;
        mpfr_set_d(r25701, b_2, MPFR_RNDN);
        mpfr_div(r25702, r25700, r25701, MPFR_RNDN);
        ;
        mpfr_set_si(r25704, mpfr_cmp(r25702, r25703) <= 0, MPFR_RNDN);
        mpfr_set_d(r25705, c, MPFR_RNDN);
        mpfr_set_d(r25706, a, MPFR_RNDN);
        mpfr_mul(r25707, r25705, r25706, MPFR_RNDN);
        mpfr_mul(r25708, r25701, r25701, MPFR_RNDN);
        mpfr_mul(r25709, r25706, r25705, MPFR_RNDN);
        mpfr_sub(r25710, r25708, r25709, MPFR_RNDN);
        mpfr_sqrt(r25711, r25710, MPFR_RNDN);
        mpfr_sub(r25712, r25711, r25701, MPFR_RNDN);
        mpfr_div(r25713, r25707, r25712, MPFR_RNDN);
        mpfr_div(r25714, r25713, r25706, MPFR_RNDN);
        ;
        mpfr_set_si(r25716, mpfr_cmp(r25702, r25715) <= 0, MPFR_RNDN);
        mpfr_mul(r25717, r25700, r25705, MPFR_RNDN);
        mpfr_div(r25718, r25701, r25706, MPFR_RNDN);
        mpfr_div(r25719, r25717, r25718, MPFR_RNDN);
        mpfr_add(r25720, r25701, r25701, MPFR_RNDN);
        mpfr_sub(r25721, r25719, r25720, MPFR_RNDN);
        mpfr_div(r25722, r25705, r25721, MPFR_RNDN);
        ;
        mpfr_set_si(r25724, mpfr_cmp(r25702, r25723) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r25726, r25725, r25718, MPFR_RNDN);
        ;
        mpfr_neg(r25728, r25701, MPFR_RNDN);
        mpfr_sub(r25729, r25728, r25711, MPFR_RNDN);
        mpfr_div(r25730, r25706, r25729, MPFR_RNDN);
        mpfr_div(r25731, r25727, r25730, MPFR_RNDN);
        if (mpfr_get_si(r25724, MPFR_RNDN)) { mpfr_set(r25732, r25726, MPFR_RNDN); } else { mpfr_set(r25732, r25731, MPFR_RNDN); };
        if (mpfr_get_si(r25716, MPFR_RNDN)) { mpfr_set(r25733, r25722, MPFR_RNDN); } else { mpfr_set(r25733, r25732, MPFR_RNDN); };
        if (mpfr_get_si(r25704, MPFR_RNDN)) { mpfr_set(r25734, r25714, MPFR_RNDN); } else { mpfr_set(r25734, r25733, MPFR_RNDN); };
        return mpfr_get_d(r25734, MPFR_RNDN);
}

