#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 r9692 = b;
        float r9693 = -r9692;
        float r9694 = r9692 * r9692;
        float r9695 = 3.0f;
        float r9696 = a;
        float r9697 = r9695 * r9696;
        float r9698 = c;
        float r9699 = r9697 * r9698;
        float r9700 = r9694 - r9699;
        float r9701 = sqrt(r9700);
        float r9702 = r9693 + r9701;
        float r9703 = r9702 / r9697;
        return r9703;
}

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


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9716 = c;
        float r9717 = b;
        float r9718 = -r9717;
        float r9719 = 3.0f;
        float r9720 = -r9719;
        float r9721 = a;
        float r9722 = r9721 * r9716;
        float r9723 = r9717 * r9717;
        float r9724 = fma(r9720, r9722, r9723);
        float r9725 = sqrt(r9724);
        float r9726 = r9718 - r9725;
        float r9727 = r9716 / r9726;
        return r9727;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9728 = c;
        double r9729 = b;
        double r9730 = -r9729;
        double r9731 = 3.0;
        double r9732 = -r9731;
        double r9733 = a;
        double r9734 = r9733 * r9728;
        double r9735 = r9729 * r9729;
        double r9736 = fma(r9732, r9734, r9735);
        double r9737 = sqrt(r9736);
        double r9738 = r9730 - r9737;
        double r9739 = r9728 / r9738;
        return r9739;
}

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 r9740, r9741, r9742, r9743, r9744, r9745, r9746, r9747, r9748, r9749, r9750, r9751;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        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);
        mpfr_init(r9751);
}

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

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        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);
        mpfr_init(r9763);
}

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

static mpfr_t r9764, r9765, r9766, r9767, r9768, r9769, r9770, r9771, r9772, r9773, r9774, r9775;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9764);
        mpfr_init(r9765);
        mpfr_init(r9766);
        mpfr_init_set_str(r9767, "3", 10, MPFR_RNDN);
        mpfr_init(r9768);
        mpfr_init(r9769);
        mpfr_init(r9770);
        mpfr_init(r9771);
        mpfr_init(r9772);
        mpfr_init(r9773);
        mpfr_init(r9774);
        mpfr_init(r9775);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9764, c, MPFR_RNDN);
        mpfr_set_d(r9765, b, MPFR_RNDN);
        mpfr_neg(r9766, r9765, MPFR_RNDN);
        ;
        mpfr_neg(r9768, r9767, MPFR_RNDN);
        mpfr_set_d(r9769, a, MPFR_RNDN);
        mpfr_mul(r9770, r9769, r9764, MPFR_RNDN);
        mpfr_mul(r9771, r9765, r9765, MPFR_RNDN);
        mpfr_fma(r9772, r9768, r9770, r9771, MPFR_RNDN);
        mpfr_sqrt(r9773, r9772, MPFR_RNDN);
        mpfr_sub(r9774, r9766, r9773, MPFR_RNDN);
        mpfr_div(r9775, r9764, r9774, MPFR_RNDN);
        return mpfr_get_d(r9775, MPFR_RNDN);
}

