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

char *name = "Cubic critical";

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r23636 = b;
        float r23637 = -r23636;
        float r23638 = r23636 * r23636;
        float r23639 = 3;
        float r23640 = a;
        float r23641 = r23639 * r23640;
        float r23642 = c;
        float r23643 = r23641 * r23642;
        float r23644 = r23638 - r23643;
        float r23645 = sqrt(r23644);
        float r23646 = r23637 + r23645;
        float r23647 = r23646 / r23641;
        return r23647;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r23648 = b;
        double r23649 = -r23648;
        double r23650 = r23648 * r23648;
        double r23651 = 3;
        double r23652 = a;
        double r23653 = r23651 * r23652;
        double r23654 = c;
        double r23655 = r23653 * r23654;
        double r23656 = r23650 - r23655;
        double r23657 = sqrt(r23656);
        double r23658 = r23649 + r23657;
        double r23659 = r23658 / r23653;
        return r23659;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r23660 = b;
        float r23661 = -1.6424038809365114e-07;
        bool r23662 = r23660 <= r23661;
        float r23663 = c;
        float r23664 = 3/2;
        float r23665 = r23663 * r23664;
        float r23666 = a;
        float r23667 = r23666 / r23660;
        float r23668 = r23665 * r23667;
        float r23669 = r23660 + r23660;
        float r23670 = r23668 - r23669;
        float r23671 = 3;
        float r23672 = r23666 * r23671;
        float r23673 = r23670 / r23672;
        float r23674 = 1.6532775834371295e-59;
        bool r23675 = r23660 <= r23674;
        float r23676 = -r23660;
        float r23677 = r23660 * r23660;
        float r23678 = r23663 * r23672;
        float r23679 = r23677 - r23678;
        float r23680 = sqrt(r23679);
        float r23681 = r23676 + r23680;
        float r23682 = 1;
        float r23683 = r23682 / r23672;
        float r23684 = r23681 * r23683;
        float r23685 = r23663 / r23660;
        float r23686 = -3/2;
        float r23687 = r23686 / r23671;
        float r23688 = r23685 * r23687;
        float r23689 = r23675 ? r23684 : r23688;
        float r23690 = r23662 ? r23673 : r23689;
        return r23690;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r23691 = b;
        double r23692 = -1.6424038809365114e-07;
        bool r23693 = r23691 <= r23692;
        double r23694 = c;
        double r23695 = 3/2;
        double r23696 = r23694 * r23695;
        double r23697 = a;
        double r23698 = r23697 / r23691;
        double r23699 = r23696 * r23698;
        double r23700 = r23691 + r23691;
        double r23701 = r23699 - r23700;
        double r23702 = 3;
        double r23703 = r23697 * r23702;
        double r23704 = r23701 / r23703;
        double r23705 = 1.6532775834371295e-59;
        bool r23706 = r23691 <= r23705;
        double r23707 = -r23691;
        double r23708 = r23691 * r23691;
        double r23709 = r23694 * r23703;
        double r23710 = r23708 - r23709;
        double r23711 = sqrt(r23710);
        double r23712 = r23707 + r23711;
        double r23713 = 1;
        double r23714 = r23713 / r23703;
        double r23715 = r23712 * r23714;
        double r23716 = r23694 / r23691;
        double r23717 = -3/2;
        double r23718 = r23717 / r23702;
        double r23719 = r23716 * r23718;
        double r23720 = r23706 ? r23715 : r23719;
        double r23721 = r23693 ? r23704 : r23720;
        return r23721;
}

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 r23722, r23723, r23724, r23725, r23726, r23727, r23728, r23729, r23730, r23731, r23732, r23733;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r23722);
        mpfr_init(r23723);
        mpfr_init(r23724);
        mpfr_init_set_str(r23725, "3", 10, MPFR_RNDN);
        mpfr_init(r23726);
        mpfr_init(r23727);
        mpfr_init(r23728);
        mpfr_init(r23729);
        mpfr_init(r23730);
        mpfr_init(r23731);
        mpfr_init(r23732);
        mpfr_init(r23733);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r23722, b, MPFR_RNDN);
        mpfr_neg(r23723, r23722, MPFR_RNDN);
        mpfr_mul(r23724, r23722, r23722, MPFR_RNDN);
        ;
        mpfr_set_d(r23726, a, MPFR_RNDN);
        mpfr_mul(r23727, r23725, r23726, MPFR_RNDN);
        mpfr_set_d(r23728, c, MPFR_RNDN);
        mpfr_mul(r23729, r23727, r23728, MPFR_RNDN);
        mpfr_sub(r23730, r23724, r23729, MPFR_RNDN);
        mpfr_sqrt(r23731, r23730, MPFR_RNDN);
        mpfr_add(r23732, r23723, r23731, MPFR_RNDN);
        mpfr_div(r23733, r23732, r23727, MPFR_RNDN);
        return mpfr_get_d(r23733, MPFR_RNDN);
}

static mpfr_t r23734, r23735, r23736, r23737, r23738, r23739, r23740, r23741, r23742, r23743, r23744, r23745, r23746, r23747, r23748, r23749, r23750, r23751, r23752, r23753, r23754, r23755, r23756, r23757, r23758, r23759, r23760, r23761, r23762, r23763, r23764;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r23734);
        mpfr_init_set_str(r23735, "-1.6424038809365114e-07", 10, MPFR_RNDN);
        mpfr_init(r23736);
        mpfr_init(r23737);
        mpfr_init_set_str(r23738, "3/2", 10, MPFR_RNDN);
        mpfr_init(r23739);
        mpfr_init(r23740);
        mpfr_init(r23741);
        mpfr_init(r23742);
        mpfr_init(r23743);
        mpfr_init(r23744);
        mpfr_init_set_str(r23745, "3", 10, MPFR_RNDN);
        mpfr_init(r23746);
        mpfr_init(r23747);
        mpfr_init_set_str(r23748, "1.6532775834371295e-59", 10, MPFR_RNDN);
        mpfr_init(r23749);
        mpfr_init(r23750);
        mpfr_init(r23751);
        mpfr_init(r23752);
        mpfr_init(r23753);
        mpfr_init(r23754);
        mpfr_init(r23755);
        mpfr_init_set_str(r23756, "1", 10, MPFR_RNDN);
        mpfr_init(r23757);
        mpfr_init(r23758);
        mpfr_init(r23759);
        mpfr_init_set_str(r23760, "-3/2", 10, MPFR_RNDN);
        mpfr_init(r23761);
        mpfr_init(r23762);
        mpfr_init(r23763);
        mpfr_init(r23764);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r23734, b, MPFR_RNDN);
        ;
        mpfr_set_si(r23736, mpfr_cmp(r23734, r23735) <= 0, MPFR_RNDN);
        mpfr_set_d(r23737, c, MPFR_RNDN);
        ;
        mpfr_mul(r23739, r23737, r23738, MPFR_RNDN);
        mpfr_set_d(r23740, a, MPFR_RNDN);
        mpfr_div(r23741, r23740, r23734, MPFR_RNDN);
        mpfr_mul(r23742, r23739, r23741, MPFR_RNDN);
        mpfr_add(r23743, r23734, r23734, MPFR_RNDN);
        mpfr_sub(r23744, r23742, r23743, MPFR_RNDN);
        ;
        mpfr_mul(r23746, r23740, r23745, MPFR_RNDN);
        mpfr_div(r23747, r23744, r23746, MPFR_RNDN);
        ;
        mpfr_set_si(r23749, mpfr_cmp(r23734, r23748) <= 0, MPFR_RNDN);
        mpfr_neg(r23750, r23734, MPFR_RNDN);
        mpfr_mul(r23751, r23734, r23734, MPFR_RNDN);
        mpfr_mul(r23752, r23737, r23746, MPFR_RNDN);
        mpfr_sub(r23753, r23751, r23752, MPFR_RNDN);
        mpfr_sqrt(r23754, r23753, MPFR_RNDN);
        mpfr_add(r23755, r23750, r23754, MPFR_RNDN);
        ;
        mpfr_div(r23757, r23756, r23746, MPFR_RNDN);
        mpfr_mul(r23758, r23755, r23757, MPFR_RNDN);
        mpfr_div(r23759, r23737, r23734, MPFR_RNDN);
        ;
        mpfr_div(r23761, r23760, r23745, MPFR_RNDN);
        mpfr_mul(r23762, r23759, r23761, MPFR_RNDN);
        if (mpfr_get_si(r23749, MPFR_RNDN)) { mpfr_set(r23763, r23758, MPFR_RNDN); } else { mpfr_set(r23763, r23762, MPFR_RNDN); };
        if (mpfr_get_si(r23736, MPFR_RNDN)) { mpfr_set(r23764, r23747, MPFR_RNDN); } else { mpfr_set(r23764, r23763, MPFR_RNDN); };
        return mpfr_get_d(r23764, MPFR_RNDN);
}

static mpfr_t r23765, r23766, r23767, r23768, r23769, r23770, r23771, r23772, r23773, r23774, r23775, r23776, r23777, r23778, r23779, r23780, r23781, r23782, r23783, r23784, r23785, r23786, r23787, r23788, r23789, r23790, r23791, r23792, r23793, r23794, r23795;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r23765);
        mpfr_init_set_str(r23766, "-1.6424038809365114e-07", 10, MPFR_RNDN);
        mpfr_init(r23767);
        mpfr_init(r23768);
        mpfr_init_set_str(r23769, "3/2", 10, MPFR_RNDN);
        mpfr_init(r23770);
        mpfr_init(r23771);
        mpfr_init(r23772);
        mpfr_init(r23773);
        mpfr_init(r23774);
        mpfr_init(r23775);
        mpfr_init_set_str(r23776, "3", 10, MPFR_RNDN);
        mpfr_init(r23777);
        mpfr_init(r23778);
        mpfr_init_set_str(r23779, "1.6532775834371295e-59", 10, MPFR_RNDN);
        mpfr_init(r23780);
        mpfr_init(r23781);
        mpfr_init(r23782);
        mpfr_init(r23783);
        mpfr_init(r23784);
        mpfr_init(r23785);
        mpfr_init(r23786);
        mpfr_init_set_str(r23787, "1", 10, MPFR_RNDN);
        mpfr_init(r23788);
        mpfr_init(r23789);
        mpfr_init(r23790);
        mpfr_init_set_str(r23791, "-3/2", 10, MPFR_RNDN);
        mpfr_init(r23792);
        mpfr_init(r23793);
        mpfr_init(r23794);
        mpfr_init(r23795);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r23765, b, MPFR_RNDN);
        ;
        mpfr_set_si(r23767, mpfr_cmp(r23765, r23766) <= 0, MPFR_RNDN);
        mpfr_set_d(r23768, c, MPFR_RNDN);
        ;
        mpfr_mul(r23770, r23768, r23769, MPFR_RNDN);
        mpfr_set_d(r23771, a, MPFR_RNDN);
        mpfr_div(r23772, r23771, r23765, MPFR_RNDN);
        mpfr_mul(r23773, r23770, r23772, MPFR_RNDN);
        mpfr_add(r23774, r23765, r23765, MPFR_RNDN);
        mpfr_sub(r23775, r23773, r23774, MPFR_RNDN);
        ;
        mpfr_mul(r23777, r23771, r23776, MPFR_RNDN);
        mpfr_div(r23778, r23775, r23777, MPFR_RNDN);
        ;
        mpfr_set_si(r23780, mpfr_cmp(r23765, r23779) <= 0, MPFR_RNDN);
        mpfr_neg(r23781, r23765, MPFR_RNDN);
        mpfr_mul(r23782, r23765, r23765, MPFR_RNDN);
        mpfr_mul(r23783, r23768, r23777, MPFR_RNDN);
        mpfr_sub(r23784, r23782, r23783, MPFR_RNDN);
        mpfr_sqrt(r23785, r23784, MPFR_RNDN);
        mpfr_add(r23786, r23781, r23785, MPFR_RNDN);
        ;
        mpfr_div(r23788, r23787, r23777, MPFR_RNDN);
        mpfr_mul(r23789, r23786, r23788, MPFR_RNDN);
        mpfr_div(r23790, r23768, r23765, MPFR_RNDN);
        ;
        mpfr_div(r23792, r23791, r23776, MPFR_RNDN);
        mpfr_mul(r23793, r23790, r23792, MPFR_RNDN);
        if (mpfr_get_si(r23780, MPFR_RNDN)) { mpfr_set(r23794, r23789, MPFR_RNDN); } else { mpfr_set(r23794, r23793, MPFR_RNDN); };
        if (mpfr_get_si(r23767, MPFR_RNDN)) { mpfr_set(r23795, r23778, MPFR_RNDN); } else { mpfr_set(r23795, r23794, MPFR_RNDN); };
        return mpfr_get_d(r23795, MPFR_RNDN);
}

