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

char *name = "Quadratic roots, full range";

double f_if(float a, float b, float c) {
        float r18360570 = b;
        float r18360571 = -r18360570;
        float r18360572 = r18360570 * r18360570;
        float r18360573 = 4;
        float r18360574 = a;
        float r18360575 = r18360573 * r18360574;
        float r18360576 = c;
        float r18360577 = r18360575 * r18360576;
        float r18360578 = r18360572 - r18360577;
        float r18360579 = sqrt(r18360578);
        float r18360580 = r18360571 + r18360579;
        float r18360581 = 2;
        float r18360582 = r18360581 * r18360574;
        float r18360583 = r18360580 / r18360582;
        return r18360583;
}

double f_id(double a, double b, double c) {
        double r18360584 = b;
        double r18360585 = -r18360584;
        double r18360586 = r18360584 * r18360584;
        double r18360587 = 4;
        double r18360588 = a;
        double r18360589 = r18360587 * r18360588;
        double r18360590 = c;
        double r18360591 = r18360589 * r18360590;
        double r18360592 = r18360586 - r18360591;
        double r18360593 = sqrt(r18360592);
        double r18360594 = r18360585 + r18360593;
        double r18360595 = 2;
        double r18360596 = r18360595 * r18360588;
        double r18360597 = r18360594 / r18360596;
        return r18360597;
}


double f_of(float a, float b, float c) {
        float r18360598 = b;
        float r18360599 = -3.4568206269163544e+152;
        bool r18360600 = r18360598 <= r18360599;
        float r18360601 = c;
        float r18360602 = r18360601 / r18360598;
        float r18360603 = 1;
        float r18360604 = r18360602 / r18360603;
        float r18360605 = a;
        float r18360606 = r18360598 / r18360605;
        float r18360607 = r18360604 - r18360606;
        float r18360608 = 9.942544796435686e-53;
        bool r18360609 = r18360598 <= r18360608;
        float r18360610 = -r18360598;
        float r18360611 = r18360598 * r18360598;
        float r18360612 = 4;
        float r18360613 = r18360612 * r18360605;
        float r18360614 = r18360613 * r18360601;
        float r18360615 = r18360611 - r18360614;
        float r18360616 = sqrt(r18360615);
        float r18360617 = r18360610 + r18360616;
        float r18360618 = 2;
        float r18360619 = r18360618 * r18360605;
        float r18360620 = r18360603 / r18360619;
        float r18360621 = r18360617 * r18360620;
        float r18360622 = -2;
        float r18360623 = r18360622 / r18360618;
        float r18360624 = r18360602 * r18360623;
        float r18360625 = r18360609 ? r18360621 : r18360624;
        float r18360626 = r18360600 ? r18360607 : r18360625;
        return r18360626;
}

double f_od(double a, double b, double c) {
        double r18360627 = b;
        double r18360628 = -3.4568206269163544e+152;
        bool r18360629 = r18360627 <= r18360628;
        double r18360630 = c;
        double r18360631 = r18360630 / r18360627;
        double r18360632 = 1;
        double r18360633 = r18360631 / r18360632;
        double r18360634 = a;
        double r18360635 = r18360627 / r18360634;
        double r18360636 = r18360633 - r18360635;
        double r18360637 = 9.942544796435686e-53;
        bool r18360638 = r18360627 <= r18360637;
        double r18360639 = -r18360627;
        double r18360640 = r18360627 * r18360627;
        double r18360641 = 4;
        double r18360642 = r18360641 * r18360634;
        double r18360643 = r18360642 * r18360630;
        double r18360644 = r18360640 - r18360643;
        double r18360645 = sqrt(r18360644);
        double r18360646 = r18360639 + r18360645;
        double r18360647 = 2;
        double r18360648 = r18360647 * r18360634;
        double r18360649 = r18360632 / r18360648;
        double r18360650 = r18360646 * r18360649;
        double r18360651 = -2;
        double r18360652 = r18360651 / r18360647;
        double r18360653 = r18360631 * r18360652;
        double r18360654 = r18360638 ? r18360650 : r18360653;
        double r18360655 = r18360629 ? r18360636 : r18360654;
        return r18360655;
}

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 r18360656, r18360657, r18360658, r18360659, r18360660, r18360661, r18360662, r18360663, r18360664, r18360665, r18360666, r18360667, r18360668, r18360669;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3472);
        mpfr_init(r18360656);
        mpfr_init(r18360657);
        mpfr_init(r18360658);
        mpfr_init_set_str(r18360659, "4", 10, MPFR_RNDN);
        mpfr_init(r18360660);
        mpfr_init(r18360661);
        mpfr_init(r18360662);
        mpfr_init(r18360663);
        mpfr_init(r18360664);
        mpfr_init(r18360665);
        mpfr_init(r18360666);
        mpfr_init_set_str(r18360667, "2", 10, MPFR_RNDN);
        mpfr_init(r18360668);
        mpfr_init(r18360669);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r18360656, b, MPFR_RNDN);
        mpfr_neg(r18360657, r18360656, MPFR_RNDN);
        mpfr_mul(r18360658, r18360656, r18360656, MPFR_RNDN);
        ;
        mpfr_set_d(r18360660, a, MPFR_RNDN);
        mpfr_mul(r18360661, r18360659, r18360660, MPFR_RNDN);
        mpfr_set_d(r18360662, c, MPFR_RNDN);
        mpfr_mul(r18360663, r18360661, r18360662, MPFR_RNDN);
        mpfr_sub(r18360664, r18360658, r18360663, MPFR_RNDN);
        mpfr_sqrt(r18360665, r18360664, MPFR_RNDN);
        mpfr_add(r18360666, r18360657, r18360665, MPFR_RNDN);
        ;
        mpfr_mul(r18360668, r18360667, r18360660, MPFR_RNDN);
        mpfr_div(r18360669, r18360666, r18360668, MPFR_RNDN);
        return mpfr_get_d(r18360669, MPFR_RNDN);
}

static mpfr_t r18360670, r18360671, r18360672, r18360673, r18360674, r18360675, r18360676, r18360677, r18360678, r18360679, r18360680, r18360681, r18360682, r18360683, r18360684, r18360685, r18360686, r18360687, r18360688, r18360689, r18360690, r18360691, r18360692, r18360693, r18360694, r18360695, r18360696, r18360697, r18360698;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3472);
        mpfr_init(r18360670);
        mpfr_init_set_str(r18360671, "-3.4568206269163544e+152", 10, MPFR_RNDN);
        mpfr_init(r18360672);
        mpfr_init(r18360673);
        mpfr_init(r18360674);
        mpfr_init_set_str(r18360675, "1", 10, MPFR_RNDN);
        mpfr_init(r18360676);
        mpfr_init(r18360677);
        mpfr_init(r18360678);
        mpfr_init(r18360679);
        mpfr_init_set_str(r18360680, "9.942544796435686e-53", 10, MPFR_RNDN);
        mpfr_init(r18360681);
        mpfr_init(r18360682);
        mpfr_init(r18360683);
        mpfr_init_set_str(r18360684, "4", 10, MPFR_RNDN);
        mpfr_init(r18360685);
        mpfr_init(r18360686);
        mpfr_init(r18360687);
        mpfr_init(r18360688);
        mpfr_init(r18360689);
        mpfr_init_set_str(r18360690, "2", 10, MPFR_RNDN);
        mpfr_init(r18360691);
        mpfr_init(r18360692);
        mpfr_init(r18360693);
        mpfr_init_set_str(r18360694, "-2", 10, MPFR_RNDN);
        mpfr_init(r18360695);
        mpfr_init(r18360696);
        mpfr_init(r18360697);
        mpfr_init(r18360698);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r18360670, b, MPFR_RNDN);
        ;
        mpfr_set_si(r18360672, mpfr_cmp(r18360670, r18360671) <= 0, MPFR_RNDN);
        mpfr_set_d(r18360673, c, MPFR_RNDN);
        mpfr_div(r18360674, r18360673, r18360670, MPFR_RNDN);
        ;
        mpfr_div(r18360676, r18360674, r18360675, MPFR_RNDN);
        mpfr_set_d(r18360677, a, MPFR_RNDN);
        mpfr_div(r18360678, r18360670, r18360677, MPFR_RNDN);
        mpfr_sub(r18360679, r18360676, r18360678, MPFR_RNDN);
        ;
        mpfr_set_si(r18360681, mpfr_cmp(r18360670, r18360680) <= 0, MPFR_RNDN);
        mpfr_neg(r18360682, r18360670, MPFR_RNDN);
        mpfr_mul(r18360683, r18360670, r18360670, MPFR_RNDN);
        ;
        mpfr_mul(r18360685, r18360684, r18360677, MPFR_RNDN);
        mpfr_mul(r18360686, r18360685, r18360673, MPFR_RNDN);
        mpfr_sub(r18360687, r18360683, r18360686, MPFR_RNDN);
        mpfr_sqrt(r18360688, r18360687, MPFR_RNDN);
        mpfr_add(r18360689, r18360682, r18360688, MPFR_RNDN);
        ;
        mpfr_mul(r18360691, r18360690, r18360677, MPFR_RNDN);
        mpfr_div(r18360692, r18360675, r18360691, MPFR_RNDN);
        mpfr_mul(r18360693, r18360689, r18360692, MPFR_RNDN);
        ;
        mpfr_div(r18360695, r18360694, r18360690, MPFR_RNDN);
        mpfr_mul(r18360696, r18360674, r18360695, MPFR_RNDN);
        if (mpfr_get_si(r18360681, MPFR_RNDN)) { mpfr_set(r18360697, r18360693, MPFR_RNDN); } else { mpfr_set(r18360697, r18360696, MPFR_RNDN); };
        if (mpfr_get_si(r18360672, MPFR_RNDN)) { mpfr_set(r18360698, r18360679, MPFR_RNDN); } else { mpfr_set(r18360698, r18360697, MPFR_RNDN); };
        return mpfr_get_d(r18360698, MPFR_RNDN);
}

static mpfr_t r18360699, r18360700, r18360701, r18360702, r18360703, r18360704, r18360705, r18360706, r18360707, r18360708, r18360709, r18360710, r18360711, r18360712, r18360713, r18360714, r18360715, r18360716, r18360717, r18360718, r18360719, r18360720, r18360721, r18360722, r18360723, r18360724, r18360725, r18360726, r18360727;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3472);
        mpfr_init(r18360699);
        mpfr_init_set_str(r18360700, "-3.4568206269163544e+152", 10, MPFR_RNDN);
        mpfr_init(r18360701);
        mpfr_init(r18360702);
        mpfr_init(r18360703);
        mpfr_init_set_str(r18360704, "1", 10, MPFR_RNDN);
        mpfr_init(r18360705);
        mpfr_init(r18360706);
        mpfr_init(r18360707);
        mpfr_init(r18360708);
        mpfr_init_set_str(r18360709, "9.942544796435686e-53", 10, MPFR_RNDN);
        mpfr_init(r18360710);
        mpfr_init(r18360711);
        mpfr_init(r18360712);
        mpfr_init_set_str(r18360713, "4", 10, MPFR_RNDN);
        mpfr_init(r18360714);
        mpfr_init(r18360715);
        mpfr_init(r18360716);
        mpfr_init(r18360717);
        mpfr_init(r18360718);
        mpfr_init_set_str(r18360719, "2", 10, MPFR_RNDN);
        mpfr_init(r18360720);
        mpfr_init(r18360721);
        mpfr_init(r18360722);
        mpfr_init_set_str(r18360723, "-2", 10, MPFR_RNDN);
        mpfr_init(r18360724);
        mpfr_init(r18360725);
        mpfr_init(r18360726);
        mpfr_init(r18360727);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r18360699, b, MPFR_RNDN);
        ;
        mpfr_set_si(r18360701, mpfr_cmp(r18360699, r18360700) <= 0, MPFR_RNDN);
        mpfr_set_d(r18360702, c, MPFR_RNDN);
        mpfr_div(r18360703, r18360702, r18360699, MPFR_RNDN);
        ;
        mpfr_div(r18360705, r18360703, r18360704, MPFR_RNDN);
        mpfr_set_d(r18360706, a, MPFR_RNDN);
        mpfr_div(r18360707, r18360699, r18360706, MPFR_RNDN);
        mpfr_sub(r18360708, r18360705, r18360707, MPFR_RNDN);
        ;
        mpfr_set_si(r18360710, mpfr_cmp(r18360699, r18360709) <= 0, MPFR_RNDN);
        mpfr_neg(r18360711, r18360699, MPFR_RNDN);
        mpfr_mul(r18360712, r18360699, r18360699, MPFR_RNDN);
        ;
        mpfr_mul(r18360714, r18360713, r18360706, MPFR_RNDN);
        mpfr_mul(r18360715, r18360714, r18360702, MPFR_RNDN);
        mpfr_sub(r18360716, r18360712, r18360715, MPFR_RNDN);
        mpfr_sqrt(r18360717, r18360716, MPFR_RNDN);
        mpfr_add(r18360718, r18360711, r18360717, MPFR_RNDN);
        ;
        mpfr_mul(r18360720, r18360719, r18360706, MPFR_RNDN);
        mpfr_div(r18360721, r18360704, r18360720, MPFR_RNDN);
        mpfr_mul(r18360722, r18360718, r18360721, MPFR_RNDN);
        ;
        mpfr_div(r18360724, r18360723, r18360719, MPFR_RNDN);
        mpfr_mul(r18360725, r18360703, r18360724, MPFR_RNDN);
        if (mpfr_get_si(r18360710, MPFR_RNDN)) { mpfr_set(r18360726, r18360722, MPFR_RNDN); } else { mpfr_set(r18360726, r18360725, MPFR_RNDN); };
        if (mpfr_get_si(r18360701, MPFR_RNDN)) { mpfr_set(r18360727, r18360708, MPFR_RNDN); } else { mpfr_set(r18360727, r18360726, MPFR_RNDN); };
        return mpfr_get_d(r18360727, MPFR_RNDN);
}

