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

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

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r9679 = b;
        float r9680 = -r9679;
        float r9681 = r9679 * r9679;
        float r9682 = 3.0f;
        float r9683 = a;
        float r9684 = r9682 * r9683;
        float r9685 = c;
        float r9686 = r9684 * r9685;
        float r9687 = r9681 - r9686;
        float r9688 = sqrt(r9687);
        float r9689 = r9680 + r9688;
        float r9690 = r9689 / r9684;
        return r9690;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9691 = b;
        double r9692 = -r9691;
        double r9693 = r9691 * r9691;
        double r9694 = 3.0;
        double r9695 = a;
        double r9696 = r9694 * r9695;
        double r9697 = c;
        double r9698 = r9696 * r9697;
        double r9699 = r9693 - r9698;
        double r9700 = sqrt(r9699);
        double r9701 = r9692 + r9700;
        double r9702 = r9701 / r9696;
        return r9702;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9703 = c;
        float r9704 = -r9703;
        float r9705 = b;
        float r9706 = r9705 * r9705;
        float r9707 = 3.0f;
        float r9708 = a;
        float r9709 = r9708 * r9703;
        float r9710 = r9707 * r9709;
        float r9711 = r9706 - r9710;
        float r9712 = sqrt(r9711);
        float r9713 = r9712 + r9705;
        float r9714 = r9704 / r9713;
        return r9714;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9715 = c;
        double r9716 = -r9715;
        double r9717 = b;
        double r9718 = r9717 * r9717;
        double r9719 = 3.0;
        double r9720 = a;
        double r9721 = r9720 * r9715;
        double r9722 = r9719 * r9721;
        double r9723 = r9718 - r9722;
        double r9724 = sqrt(r9723);
        double r9725 = r9724 + r9717;
        double r9726 = r9716 / r9725;
        return r9726;
}

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 r9727, r9728, r9729, r9730, r9731, r9732, r9733, r9734, r9735, r9736, r9737, r9738;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9727);
        mpfr_init(r9728);
        mpfr_init(r9729);
        mpfr_init_set_str(r9730, "3", 10, MPFR_RNDN);
        mpfr_init(r9731);
        mpfr_init(r9732);
        mpfr_init(r9733);
        mpfr_init(r9734);
        mpfr_init(r9735);
        mpfr_init(r9736);
        mpfr_init(r9737);
        mpfr_init(r9738);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9727, b, MPFR_RNDN);
        mpfr_neg(r9728, r9727, MPFR_RNDN);
        mpfr_mul(r9729, r9727, r9727, MPFR_RNDN);
        ;
        mpfr_set_d(r9731, a, MPFR_RNDN);
        mpfr_mul(r9732, r9730, r9731, MPFR_RNDN);
        mpfr_set_d(r9733, c, MPFR_RNDN);
        mpfr_mul(r9734, r9732, r9733, MPFR_RNDN);
        mpfr_sub(r9735, r9729, r9734, MPFR_RNDN);
        mpfr_sqrt(r9736, r9735, MPFR_RNDN);
        mpfr_add(r9737, r9728, r9736, MPFR_RNDN);
        mpfr_div(r9738, r9737, r9732, MPFR_RNDN);
        return mpfr_get_d(r9738, MPFR_RNDN);
}

static mpfr_t r9739, r9740, r9741, r9742, r9743, r9744, r9745, r9746, r9747, r9748, r9749, r9750;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9739);
        mpfr_init(r9740);
        mpfr_init(r9741);
        mpfr_init(r9742);
        mpfr_init_set_str(r9743, "3", 10, MPFR_RNDN);
        mpfr_init(r9744);
        mpfr_init(r9745);
        mpfr_init(r9746);
        mpfr_init(r9747);
        mpfr_init(r9748);
        mpfr_init(r9749);
        mpfr_init(r9750);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9739, c, MPFR_RNDN);
        mpfr_neg(r9740, r9739, MPFR_RNDN);
        mpfr_set_d(r9741, b, MPFR_RNDN);
        mpfr_mul(r9742, r9741, r9741, MPFR_RNDN);
        ;
        mpfr_set_d(r9744, a, MPFR_RNDN);
        mpfr_mul(r9745, r9744, r9739, MPFR_RNDN);
        mpfr_mul(r9746, r9743, r9745, MPFR_RNDN);
        mpfr_sub(r9747, r9742, r9746, MPFR_RNDN);
        mpfr_sqrt(r9748, r9747, MPFR_RNDN);
        mpfr_add(r9749, r9748, r9741, MPFR_RNDN);
        mpfr_div(r9750, r9740, r9749, MPFR_RNDN);
        return mpfr_get_d(r9750, MPFR_RNDN);
}

static mpfr_t r9751, r9752, r9753, r9754, r9755, r9756, r9757, r9758, r9759, r9760, r9761, r9762;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9751);
        mpfr_init(r9752);
        mpfr_init(r9753);
        mpfr_init(r9754);
        mpfr_init_set_str(r9755, "3", 10, MPFR_RNDN);
        mpfr_init(r9756);
        mpfr_init(r9757);
        mpfr_init(r9758);
        mpfr_init(r9759);
        mpfr_init(r9760);
        mpfr_init(r9761);
        mpfr_init(r9762);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9751, c, MPFR_RNDN);
        mpfr_neg(r9752, r9751, MPFR_RNDN);
        mpfr_set_d(r9753, b, MPFR_RNDN);
        mpfr_mul(r9754, r9753, r9753, MPFR_RNDN);
        ;
        mpfr_set_d(r9756, a, MPFR_RNDN);
        mpfr_mul(r9757, r9756, r9751, MPFR_RNDN);
        mpfr_mul(r9758, r9755, r9757, MPFR_RNDN);
        mpfr_sub(r9759, r9754, r9758, MPFR_RNDN);
        mpfr_sqrt(r9760, r9759, MPFR_RNDN);
        mpfr_add(r9761, r9760, r9753, MPFR_RNDN);
        mpfr_div(r9762, r9752, r9761, MPFR_RNDN);
        return mpfr_get_d(r9762, MPFR_RNDN);
}

