#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 r9923 = b;
        float r9924 = -r9923;
        float r9925 = r9923 * r9923;
        float r9926 = 3;
        float r9927 = a;
        float r9928 = r9926 * r9927;
        float r9929 = c;
        float r9930 = r9928 * r9929;
        float r9931 = r9925 - r9930;
        float r9932 = sqrt(r9931);
        float r9933 = r9924 + r9932;
        float r9934 = r9933 / r9928;
        return r9934;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9935 = b;
        double r9936 = -r9935;
        double r9937 = r9935 * r9935;
        double r9938 = 3;
        double r9939 = a;
        double r9940 = r9938 * r9939;
        double r9941 = c;
        double r9942 = r9940 * r9941;
        double r9943 = r9937 - r9942;
        double r9944 = sqrt(r9943);
        double r9945 = r9936 + r9944;
        double r9946 = r9945 / r9940;
        return r9946;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9947 = b;
        float r9948 = -r9947;
        float r9949 = r9947 * r9947;
        float r9950 = 3;
        float r9951 = a;
        float r9952 = r9950 * r9951;
        float r9953 = c;
        float r9954 = r9952 * r9953;
        float r9955 = r9949 - r9954;
        float r9956 = sqrt(r9955);
        float r9957 = r9948 + r9956;
        float r9958 = r9957 / r9952;
        return r9958;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9959 = b;
        double r9960 = -r9959;
        double r9961 = r9959 * r9959;
        double r9962 = 3;
        double r9963 = a;
        double r9964 = r9962 * r9963;
        double r9965 = c;
        double r9966 = r9964 * r9965;
        double r9967 = r9961 - r9966;
        double r9968 = sqrt(r9967);
        double r9969 = r9960 + r9968;
        double r9970 = r9969 / r9964;
        return r9970;
}

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 r9971, r9972, r9973, r9974, r9975, r9976, r9977, r9978, r9979, r9980, r9981, r9982;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r9971);
        mpfr_init(r9972);
        mpfr_init(r9973);
        mpfr_init_set_str(r9974, "3", 10, MPFR_RNDN);
        mpfr_init(r9975);
        mpfr_init(r9976);
        mpfr_init(r9977);
        mpfr_init(r9978);
        mpfr_init(r9979);
        mpfr_init(r9980);
        mpfr_init(r9981);
        mpfr_init(r9982);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9971, b, MPFR_RNDN);
        mpfr_neg(r9972, r9971, MPFR_RNDN);
        mpfr_mul(r9973, r9971, r9971, MPFR_RNDN);
        ;
        mpfr_set_d(r9975, a, MPFR_RNDN);
        mpfr_mul(r9976, r9974, r9975, MPFR_RNDN);
        mpfr_set_d(r9977, c, MPFR_RNDN);
        mpfr_mul(r9978, r9976, r9977, MPFR_RNDN);
        mpfr_sub(r9979, r9973, r9978, MPFR_RNDN);
        mpfr_sqrt(r9980, r9979, MPFR_RNDN);
        mpfr_add(r9981, r9972, r9980, MPFR_RNDN);
        mpfr_div(r9982, r9981, r9976, MPFR_RNDN);
        return mpfr_get_d(r9982, MPFR_RNDN);
}

static mpfr_t r9983, r9984, r9985, r9986, r9987, r9988, r9989, r9990, r9991, r9992, r9993, r9994;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r9983);
        mpfr_init(r9984);
        mpfr_init(r9985);
        mpfr_init_set_str(r9986, "3", 10, MPFR_RNDN);
        mpfr_init(r9987);
        mpfr_init(r9988);
        mpfr_init(r9989);
        mpfr_init(r9990);
        mpfr_init(r9991);
        mpfr_init(r9992);
        mpfr_init(r9993);
        mpfr_init(r9994);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9983, b, MPFR_RNDN);
        mpfr_neg(r9984, r9983, MPFR_RNDN);
        mpfr_mul(r9985, r9983, r9983, MPFR_RNDN);
        ;
        mpfr_set_d(r9987, a, MPFR_RNDN);
        mpfr_mul(r9988, r9986, r9987, MPFR_RNDN);
        mpfr_set_d(r9989, c, MPFR_RNDN);
        mpfr_mul(r9990, r9988, r9989, MPFR_RNDN);
        mpfr_sub(r9991, r9985, r9990, MPFR_RNDN);
        mpfr_sqrt(r9992, r9991, MPFR_RNDN);
        mpfr_add(r9993, r9984, r9992, MPFR_RNDN);
        mpfr_div(r9994, r9993, r9988, MPFR_RNDN);
        return mpfr_get_d(r9994, MPFR_RNDN);
}

static mpfr_t r9995, r9996, r9997, r9998, r9999, r10000, r10001, r10002, r10003, r10004, r10005, r10006;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r9995);
        mpfr_init(r9996);
        mpfr_init(r9997);
        mpfr_init_set_str(r9998, "3", 10, MPFR_RNDN);
        mpfr_init(r9999);
        mpfr_init(r10000);
        mpfr_init(r10001);
        mpfr_init(r10002);
        mpfr_init(r10003);
        mpfr_init(r10004);
        mpfr_init(r10005);
        mpfr_init(r10006);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9995, b, MPFR_RNDN);
        mpfr_neg(r9996, r9995, MPFR_RNDN);
        mpfr_mul(r9997, r9995, r9995, MPFR_RNDN);
        ;
        mpfr_set_d(r9999, a, MPFR_RNDN);
        mpfr_mul(r10000, r9998, r9999, MPFR_RNDN);
        mpfr_set_d(r10001, c, MPFR_RNDN);
        mpfr_mul(r10002, r10000, r10001, MPFR_RNDN);
        mpfr_sub(r10003, r9997, r10002, MPFR_RNDN);
        mpfr_sqrt(r10004, r10003, MPFR_RNDN);
        mpfr_add(r10005, r9996, r10004, MPFR_RNDN);
        mpfr_div(r10006, r10005, r10000, MPFR_RNDN);
        return mpfr_get_d(r10006, MPFR_RNDN);
}

