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

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

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r9916 = b;
        float r9917 = -r9916;
        float r9918 = r9916 * r9916;
        float r9919 = 3;
        float r9920 = a;
        float r9921 = r9919 * r9920;
        float r9922 = c;
        float r9923 = r9921 * r9922;
        float r9924 = r9918 - r9923;
        float r9925 = sqrt(r9924);
        float r9926 = r9917 + r9925;
        float r9927 = r9926 / r9921;
        return r9927;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9928 = b;
        double r9929 = -r9928;
        double r9930 = r9928 * r9928;
        double r9931 = 3;
        double r9932 = a;
        double r9933 = r9931 * r9932;
        double r9934 = c;
        double r9935 = r9933 * r9934;
        double r9936 = r9930 - r9935;
        double r9937 = sqrt(r9936);
        double r9938 = r9929 + r9937;
        double r9939 = r9938 / r9933;
        return r9939;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9940 = a;
        float r9941 = c;
        float r9942 = r9940 * r9941;
        float r9943 = b;
        float r9944 = -r9943;
        float r9945 = r9943 * r9943;
        float r9946 = 3;
        float r9947 = r9942 * r9946;
        float r9948 = r9945 - r9947;
        float r9949 = sqrt(r9948);
        float r9950 = r9944 - r9949;
        float r9951 = r9942 / r9950;
        float r9952 = r9951 / r9940;
        return r9952;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9953 = a;
        double r9954 = c;
        double r9955 = r9953 * r9954;
        double r9956 = b;
        double r9957 = -r9956;
        double r9958 = r9956 * r9956;
        double r9959 = 3;
        double r9960 = r9955 * r9959;
        double r9961 = r9958 - r9960;
        double r9962 = sqrt(r9961);
        double r9963 = r9957 - r9962;
        double r9964 = r9955 / r9963;
        double r9965 = r9964 / r9953;
        return r9965;
}

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 r9966, r9967, r9968, r9969, r9970, r9971, r9972, r9973, r9974, r9975, r9976, r9977;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9966);
        mpfr_init(r9967);
        mpfr_init(r9968);
        mpfr_init_set_str(r9969, "3", 10, MPFR_RNDN);
        mpfr_init(r9970);
        mpfr_init(r9971);
        mpfr_init(r9972);
        mpfr_init(r9973);
        mpfr_init(r9974);
        mpfr_init(r9975);
        mpfr_init(r9976);
        mpfr_init(r9977);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9966, b, MPFR_RNDN);
        mpfr_neg(r9967, r9966, MPFR_RNDN);
        mpfr_mul(r9968, r9966, r9966, MPFR_RNDN);
        ;
        mpfr_set_d(r9970, a, MPFR_RNDN);
        mpfr_mul(r9971, r9969, r9970, MPFR_RNDN);
        mpfr_set_d(r9972, c, MPFR_RNDN);
        mpfr_mul(r9973, r9971, r9972, MPFR_RNDN);
        mpfr_sub(r9974, r9968, r9973, MPFR_RNDN);
        mpfr_sqrt(r9975, r9974, MPFR_RNDN);
        mpfr_add(r9976, r9967, r9975, MPFR_RNDN);
        mpfr_div(r9977, r9976, r9971, MPFR_RNDN);
        return mpfr_get_d(r9977, MPFR_RNDN);
}

static mpfr_t r9978, r9979, r9980, r9981, r9982, r9983, r9984, r9985, r9986, r9987, r9988, r9989, r9990;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9978);
        mpfr_init(r9979);
        mpfr_init(r9980);
        mpfr_init(r9981);
        mpfr_init(r9982);
        mpfr_init(r9983);
        mpfr_init_set_str(r9984, "3", 10, MPFR_RNDN);
        mpfr_init(r9985);
        mpfr_init(r9986);
        mpfr_init(r9987);
        mpfr_init(r9988);
        mpfr_init(r9989);
        mpfr_init(r9990);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9978, a, MPFR_RNDN);
        mpfr_set_d(r9979, c, MPFR_RNDN);
        mpfr_mul(r9980, r9978, r9979, MPFR_RNDN);
        mpfr_set_d(r9981, b, MPFR_RNDN);
        mpfr_neg(r9982, r9981, MPFR_RNDN);
        mpfr_mul(r9983, r9981, r9981, MPFR_RNDN);
        ;
        mpfr_mul(r9985, r9980, r9984, MPFR_RNDN);
        mpfr_sub(r9986, r9983, r9985, MPFR_RNDN);
        mpfr_sqrt(r9987, r9986, MPFR_RNDN);
        mpfr_sub(r9988, r9982, r9987, MPFR_RNDN);
        mpfr_div(r9989, r9980, r9988, MPFR_RNDN);
        mpfr_div(r9990, r9989, r9978, MPFR_RNDN);
        return mpfr_get_d(r9990, MPFR_RNDN);
}

static mpfr_t r9991, r9992, r9993, r9994, r9995, r9996, r9997, r9998, r9999, r10000, r10001, r10002, r10003;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9991);
        mpfr_init(r9992);
        mpfr_init(r9993);
        mpfr_init(r9994);
        mpfr_init(r9995);
        mpfr_init(r9996);
        mpfr_init_set_str(r9997, "3", 10, MPFR_RNDN);
        mpfr_init(r9998);
        mpfr_init(r9999);
        mpfr_init(r10000);
        mpfr_init(r10001);
        mpfr_init(r10002);
        mpfr_init(r10003);
}

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

