#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 r9791 = b;
        float r9792 = -r9791;
        float r9793 = r9791 * r9791;
        float r9794 = 3.0f;
        float r9795 = a;
        float r9796 = r9794 * r9795;
        float r9797 = c;
        float r9798 = r9796 * r9797;
        float r9799 = r9793 - r9798;
        float r9800 = sqrt(r9799);
        float r9801 = r9792 + r9800;
        float r9802 = r9801 / r9796;
        return r9802;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9803 = b;
        double r9804 = -r9803;
        double r9805 = r9803 * r9803;
        double r9806 = 3.0;
        double r9807 = a;
        double r9808 = r9806 * r9807;
        double r9809 = c;
        double r9810 = r9808 * r9809;
        double r9811 = r9805 - r9810;
        double r9812 = sqrt(r9811);
        double r9813 = r9804 + r9812;
        double r9814 = r9813 / r9808;
        return r9814;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9815 = c;
        float r9816 = b;
        float r9817 = -r9816;
        float r9818 = 3.0f;
        float r9819 = -r9818;
        float r9820 = a;
        float r9821 = r9820 * r9815;
        float r9822 = r9816 * r9816;
        float r9823 = fma(r9819, r9821, r9822);
        float r9824 = sqrt(r9823);
        float r9825 = r9817 - r9824;
        float r9826 = r9815 / r9825;
        return r9826;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9827 = c;
        double r9828 = b;
        double r9829 = -r9828;
        double r9830 = 3.0;
        double r9831 = -r9830;
        double r9832 = a;
        double r9833 = r9832 * r9827;
        double r9834 = r9828 * r9828;
        double r9835 = fma(r9831, r9833, r9834);
        double r9836 = sqrt(r9835);
        double r9837 = r9829 - r9836;
        double r9838 = r9827 / r9837;
        return r9838;
}

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 r9839, r9840, r9841, r9842, r9843, r9844, r9845, r9846, r9847, r9848, r9849, r9850;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9839);
        mpfr_init(r9840);
        mpfr_init(r9841);
        mpfr_init_set_str(r9842, "3", 10, MPFR_RNDN);
        mpfr_init(r9843);
        mpfr_init(r9844);
        mpfr_init(r9845);
        mpfr_init(r9846);
        mpfr_init(r9847);
        mpfr_init(r9848);
        mpfr_init(r9849);
        mpfr_init(r9850);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9839, b, MPFR_RNDN);
        mpfr_neg(r9840, r9839, MPFR_RNDN);
        mpfr_mul(r9841, r9839, r9839, MPFR_RNDN);
        ;
        mpfr_set_d(r9843, a, MPFR_RNDN);
        mpfr_mul(r9844, r9842, r9843, MPFR_RNDN);
        mpfr_set_d(r9845, c, MPFR_RNDN);
        mpfr_mul(r9846, r9844, r9845, MPFR_RNDN);
        mpfr_sub(r9847, r9841, r9846, MPFR_RNDN);
        mpfr_sqrt(r9848, r9847, MPFR_RNDN);
        mpfr_add(r9849, r9840, r9848, MPFR_RNDN);
        mpfr_div(r9850, r9849, r9844, MPFR_RNDN);
        return mpfr_get_d(r9850, MPFR_RNDN);
}

static mpfr_t r9851, r9852, r9853, r9854, r9855, r9856, r9857, r9858, r9859, r9860, r9861, r9862;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9851);
        mpfr_init(r9852);
        mpfr_init(r9853);
        mpfr_init_set_str(r9854, "3", 10, MPFR_RNDN);
        mpfr_init(r9855);
        mpfr_init(r9856);
        mpfr_init(r9857);
        mpfr_init(r9858);
        mpfr_init(r9859);
        mpfr_init(r9860);
        mpfr_init(r9861);
        mpfr_init(r9862);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9851, c, MPFR_RNDN);
        mpfr_set_d(r9852, b, MPFR_RNDN);
        mpfr_neg(r9853, r9852, MPFR_RNDN);
        ;
        mpfr_neg(r9855, r9854, MPFR_RNDN);
        mpfr_set_d(r9856, a, MPFR_RNDN);
        mpfr_mul(r9857, r9856, r9851, MPFR_RNDN);
        mpfr_mul(r9858, r9852, r9852, MPFR_RNDN);
        mpfr_fma(r9859, r9855, r9857, r9858, MPFR_RNDN);
        mpfr_sqrt(r9860, r9859, MPFR_RNDN);
        mpfr_sub(r9861, r9853, r9860, MPFR_RNDN);
        mpfr_div(r9862, r9851, r9861, MPFR_RNDN);
        return mpfr_get_d(r9862, MPFR_RNDN);
}

static mpfr_t r9863, r9864, r9865, r9866, r9867, r9868, r9869, r9870, r9871, r9872, r9873, r9874;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9863);
        mpfr_init(r9864);
        mpfr_init(r9865);
        mpfr_init_set_str(r9866, "3", 10, MPFR_RNDN);
        mpfr_init(r9867);
        mpfr_init(r9868);
        mpfr_init(r9869);
        mpfr_init(r9870);
        mpfr_init(r9871);
        mpfr_init(r9872);
        mpfr_init(r9873);
        mpfr_init(r9874);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9863, c, MPFR_RNDN);
        mpfr_set_d(r9864, b, MPFR_RNDN);
        mpfr_neg(r9865, r9864, MPFR_RNDN);
        ;
        mpfr_neg(r9867, r9866, MPFR_RNDN);
        mpfr_set_d(r9868, a, MPFR_RNDN);
        mpfr_mul(r9869, r9868, r9863, MPFR_RNDN);
        mpfr_mul(r9870, r9864, r9864, MPFR_RNDN);
        mpfr_fma(r9871, r9867, r9869, r9870, MPFR_RNDN);
        mpfr_sqrt(r9872, r9871, MPFR_RNDN);
        mpfr_sub(r9873, r9865, r9872, MPFR_RNDN);
        mpfr_div(r9874, r9863, r9873, MPFR_RNDN);
        return mpfr_get_d(r9874, MPFR_RNDN);
}

