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

char *name = "Cubic critical, wide range";

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r9611 = b;
        float r9612 = -r9611;
        float r9613 = r9611 * r9611;
        float r9614 = 3.0f;
        float r9615 = a;
        float r9616 = r9614 * r9615;
        float r9617 = c;
        float r9618 = r9616 * r9617;
        float r9619 = r9613 - r9618;
        float r9620 = sqrt(r9619);
        float r9621 = r9612 + r9620;
        float r9622 = r9621 / r9616;
        return r9622;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9623 = b;
        double r9624 = -r9623;
        double r9625 = r9623 * r9623;
        double r9626 = 3.0;
        double r9627 = a;
        double r9628 = r9626 * r9627;
        double r9629 = c;
        double r9630 = r9628 * r9629;
        double r9631 = r9625 - r9630;
        double r9632 = sqrt(r9631);
        double r9633 = r9624 + r9632;
        double r9634 = r9633 / r9628;
        return r9634;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9635 = 1.0f;
        float r9636 = a;
        float r9637 = r9635 / r9636;
        float r9638 = c;
        float r9639 = r9638 * r9636;
        float r9640 = b;
        float r9641 = -r9640;
        float r9642 = r9640 * r9640;
        float r9643 = 3.0f;
        float r9644 = r9643 * r9636;
        float r9645 = r9638 * r9644;
        float r9646 = r9642 - r9645;
        float r9647 = sqrt(r9646);
        float r9648 = r9641 - r9647;
        float r9649 = r9639 / r9648;
        float r9650 = r9637 * r9649;
        return r9650;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9651 = 1.0;
        double r9652 = a;
        double r9653 = r9651 / r9652;
        double r9654 = c;
        double r9655 = r9654 * r9652;
        double r9656 = b;
        double r9657 = -r9656;
        double r9658 = r9656 * r9656;
        double r9659 = 3.0;
        double r9660 = r9659 * r9652;
        double r9661 = r9654 * r9660;
        double r9662 = r9658 - r9661;
        double r9663 = sqrt(r9662);
        double r9664 = r9657 - r9663;
        double r9665 = r9655 / r9664;
        double r9666 = r9653 * r9665;
        return r9666;
}

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 r9667, r9668, r9669, r9670, r9671, r9672, r9673, r9674, r9675, r9676, r9677, r9678;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r9667);
        mpfr_init(r9668);
        mpfr_init(r9669);
        mpfr_init_set_str(r9670, "3", 10, MPFR_RNDN);
        mpfr_init(r9671);
        mpfr_init(r9672);
        mpfr_init(r9673);
        mpfr_init(r9674);
        mpfr_init(r9675);
        mpfr_init(r9676);
        mpfr_init(r9677);
        mpfr_init(r9678);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9667, b, MPFR_RNDN);
        mpfr_neg(r9668, r9667, MPFR_RNDN);
        mpfr_mul(r9669, r9667, r9667, MPFR_RNDN);
        ;
        mpfr_set_d(r9671, a, MPFR_RNDN);
        mpfr_mul(r9672, r9670, r9671, MPFR_RNDN);
        mpfr_set_d(r9673, c, MPFR_RNDN);
        mpfr_mul(r9674, r9672, r9673, MPFR_RNDN);
        mpfr_sub(r9675, r9669, r9674, MPFR_RNDN);
        mpfr_sqrt(r9676, r9675, MPFR_RNDN);
        mpfr_add(r9677, r9668, r9676, MPFR_RNDN);
        mpfr_div(r9678, r9677, r9672, MPFR_RNDN);
        return mpfr_get_d(r9678, MPFR_RNDN);
}

static mpfr_t r9679, r9680, r9681, r9682, r9683, r9684, r9685, r9686, r9687, r9688, r9689, r9690, r9691, r9692, r9693, r9694;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r9679, "1", 10, MPFR_RNDN);
        mpfr_init(r9680);
        mpfr_init(r9681);
        mpfr_init(r9682);
        mpfr_init(r9683);
        mpfr_init(r9684);
        mpfr_init(r9685);
        mpfr_init(r9686);
        mpfr_init_set_str(r9687, "3", 10, MPFR_RNDN);
        mpfr_init(r9688);
        mpfr_init(r9689);
        mpfr_init(r9690);
        mpfr_init(r9691);
        mpfr_init(r9692);
        mpfr_init(r9693);
        mpfr_init(r9694);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_set_d(r9680, a, MPFR_RNDN);
        mpfr_div(r9681, r9679, r9680, MPFR_RNDN);
        mpfr_set_d(r9682, c, MPFR_RNDN);
        mpfr_mul(r9683, r9682, r9680, MPFR_RNDN);
        mpfr_set_d(r9684, b, MPFR_RNDN);
        mpfr_neg(r9685, r9684, MPFR_RNDN);
        mpfr_mul(r9686, r9684, r9684, MPFR_RNDN);
        ;
        mpfr_mul(r9688, r9687, r9680, MPFR_RNDN);
        mpfr_mul(r9689, r9682, r9688, MPFR_RNDN);
        mpfr_sub(r9690, r9686, r9689, MPFR_RNDN);
        mpfr_sqrt(r9691, r9690, MPFR_RNDN);
        mpfr_sub(r9692, r9685, r9691, MPFR_RNDN);
        mpfr_div(r9693, r9683, r9692, MPFR_RNDN);
        mpfr_mul(r9694, r9681, r9693, MPFR_RNDN);
        return mpfr_get_d(r9694, MPFR_RNDN);
}

static mpfr_t r9695, r9696, r9697, r9698, r9699, r9700, r9701, r9702, r9703, r9704, r9705, r9706, r9707, r9708, r9709, r9710;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r9695, "1", 10, MPFR_RNDN);
        mpfr_init(r9696);
        mpfr_init(r9697);
        mpfr_init(r9698);
        mpfr_init(r9699);
        mpfr_init(r9700);
        mpfr_init(r9701);
        mpfr_init(r9702);
        mpfr_init_set_str(r9703, "3", 10, MPFR_RNDN);
        mpfr_init(r9704);
        mpfr_init(r9705);
        mpfr_init(r9706);
        mpfr_init(r9707);
        mpfr_init(r9708);
        mpfr_init(r9709);
        mpfr_init(r9710);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_set_d(r9696, a, MPFR_RNDN);
        mpfr_div(r9697, r9695, r9696, MPFR_RNDN);
        mpfr_set_d(r9698, c, MPFR_RNDN);
        mpfr_mul(r9699, r9698, r9696, MPFR_RNDN);
        mpfr_set_d(r9700, b, MPFR_RNDN);
        mpfr_neg(r9701, r9700, MPFR_RNDN);
        mpfr_mul(r9702, r9700, r9700, MPFR_RNDN);
        ;
        mpfr_mul(r9704, r9703, r9696, MPFR_RNDN);
        mpfr_mul(r9705, r9698, r9704, MPFR_RNDN);
        mpfr_sub(r9706, r9702, r9705, MPFR_RNDN);
        mpfr_sqrt(r9707, r9706, MPFR_RNDN);
        mpfr_sub(r9708, r9701, r9707, MPFR_RNDN);
        mpfr_div(r9709, r9699, r9708, MPFR_RNDN);
        mpfr_mul(r9710, r9697, r9709, MPFR_RNDN);
        return mpfr_get_d(r9710, MPFR_RNDN);
}

