#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 r3911898 = b;
        float r3911899 = -r3911898;
        float r3911900 = r3911898 * r3911898;
        float r3911901 = 3;
        float r3911902 = a;
        float r3911903 = r3911901 * r3911902;
        float r3911904 = c;
        float r3911905 = r3911903 * r3911904;
        float r3911906 = r3911900 - r3911905;
        float r3911907 = sqrt(r3911906);
        float r3911908 = r3911899 + r3911907;
        float r3911909 = r3911908 / r3911903;
        return r3911909;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r3911910 = b;
        double r3911911 = -r3911910;
        double r3911912 = r3911910 * r3911910;
        double r3911913 = 3;
        double r3911914 = a;
        double r3911915 = r3911913 * r3911914;
        double r3911916 = c;
        double r3911917 = r3911915 * r3911916;
        double r3911918 = r3911912 - r3911917;
        double r3911919 = sqrt(r3911918);
        double r3911920 = r3911911 + r3911919;
        double r3911921 = r3911920 / r3911915;
        return r3911921;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r3911922 = 1;
        float r3911923 = b;
        float r3911924 = -r3911923;
        float r3911925 = r3911923 * r3911923;
        float r3911926 = c;
        float r3911927 = 3;
        float r3911928 = r3911926 * r3911927;
        float r3911929 = a;
        float r3911930 = r3911928 * r3911929;
        float r3911931 = r3911925 - r3911930;
        float r3911932 = sqrt(r3911931);
        float r3911933 = r3911924 - r3911932;
        float r3911934 = r3911933 / r3911926;
        float r3911935 = r3911922 / r3911934;
        return r3911935;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r3911936 = 1;
        double r3911937 = b;
        double r3911938 = -r3911937;
        double r3911939 = r3911937 * r3911937;
        double r3911940 = c;
        double r3911941 = 3;
        double r3911942 = r3911940 * r3911941;
        double r3911943 = a;
        double r3911944 = r3911942 * r3911943;
        double r3911945 = r3911939 - r3911944;
        double r3911946 = sqrt(r3911945);
        double r3911947 = r3911938 - r3911946;
        double r3911948 = r3911947 / r3911940;
        double r3911949 = r3911936 / r3911948;
        return r3911949;
}

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 r3911950, r3911951, r3911952, r3911953, r3911954, r3911955, r3911956, r3911957, r3911958, r3911959, r3911960, r3911961;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r3911950);
        mpfr_init(r3911951);
        mpfr_init(r3911952);
        mpfr_init_set_str(r3911953, "3", 10, MPFR_RNDN);
        mpfr_init(r3911954);
        mpfr_init(r3911955);
        mpfr_init(r3911956);
        mpfr_init(r3911957);
        mpfr_init(r3911958);
        mpfr_init(r3911959);
        mpfr_init(r3911960);
        mpfr_init(r3911961);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r3911950, b, MPFR_RNDN);
        mpfr_neg(r3911951, r3911950, MPFR_RNDN);
        mpfr_mul(r3911952, r3911950, r3911950, MPFR_RNDN);
        ;
        mpfr_set_d(r3911954, a, MPFR_RNDN);
        mpfr_mul(r3911955, r3911953, r3911954, MPFR_RNDN);
        mpfr_set_d(r3911956, c, MPFR_RNDN);
        mpfr_mul(r3911957, r3911955, r3911956, MPFR_RNDN);
        mpfr_sub(r3911958, r3911952, r3911957, MPFR_RNDN);
        mpfr_sqrt(r3911959, r3911958, MPFR_RNDN);
        mpfr_add(r3911960, r3911951, r3911959, MPFR_RNDN);
        mpfr_div(r3911961, r3911960, r3911955, MPFR_RNDN);
        return mpfr_get_d(r3911961, MPFR_RNDN);
}

static mpfr_t r3911962, r3911963, r3911964, r3911965, r3911966, r3911967, r3911968, r3911969, r3911970, r3911971, r3911972, r3911973, r3911974, r3911975;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r3911962, "1", 10, MPFR_RNDN);
        mpfr_init(r3911963);
        mpfr_init(r3911964);
        mpfr_init(r3911965);
        mpfr_init(r3911966);
        mpfr_init_set_str(r3911967, "3", 10, MPFR_RNDN);
        mpfr_init(r3911968);
        mpfr_init(r3911969);
        mpfr_init(r3911970);
        mpfr_init(r3911971);
        mpfr_init(r3911972);
        mpfr_init(r3911973);
        mpfr_init(r3911974);
        mpfr_init(r3911975);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_set_d(r3911963, b, MPFR_RNDN);
        mpfr_neg(r3911964, r3911963, MPFR_RNDN);
        mpfr_mul(r3911965, r3911963, r3911963, MPFR_RNDN);
        mpfr_set_d(r3911966, c, MPFR_RNDN);
        ;
        mpfr_mul(r3911968, r3911966, r3911967, MPFR_RNDN);
        mpfr_set_d(r3911969, a, MPFR_RNDN);
        mpfr_mul(r3911970, r3911968, r3911969, MPFR_RNDN);
        mpfr_sub(r3911971, r3911965, r3911970, MPFR_RNDN);
        mpfr_sqrt(r3911972, r3911971, MPFR_RNDN);
        mpfr_sub(r3911973, r3911964, r3911972, MPFR_RNDN);
        mpfr_div(r3911974, r3911973, r3911966, MPFR_RNDN);
        mpfr_div(r3911975, r3911962, r3911974, MPFR_RNDN);
        return mpfr_get_d(r3911975, MPFR_RNDN);
}

static mpfr_t r3911976, r3911977, r3911978, r3911979, r3911980, r3911981, r3911982, r3911983, r3911984, r3911985, r3911986, r3911987, r3911988, r3911989;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r3911976, "1", 10, MPFR_RNDN);
        mpfr_init(r3911977);
        mpfr_init(r3911978);
        mpfr_init(r3911979);
        mpfr_init(r3911980);
        mpfr_init_set_str(r3911981, "3", 10, MPFR_RNDN);
        mpfr_init(r3911982);
        mpfr_init(r3911983);
        mpfr_init(r3911984);
        mpfr_init(r3911985);
        mpfr_init(r3911986);
        mpfr_init(r3911987);
        mpfr_init(r3911988);
        mpfr_init(r3911989);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_set_d(r3911977, b, MPFR_RNDN);
        mpfr_neg(r3911978, r3911977, MPFR_RNDN);
        mpfr_mul(r3911979, r3911977, r3911977, MPFR_RNDN);
        mpfr_set_d(r3911980, c, MPFR_RNDN);
        ;
        mpfr_mul(r3911982, r3911980, r3911981, MPFR_RNDN);
        mpfr_set_d(r3911983, a, MPFR_RNDN);
        mpfr_mul(r3911984, r3911982, r3911983, MPFR_RNDN);
        mpfr_sub(r3911985, r3911979, r3911984, MPFR_RNDN);
        mpfr_sqrt(r3911986, r3911985, MPFR_RNDN);
        mpfr_sub(r3911987, r3911978, r3911986, MPFR_RNDN);
        mpfr_div(r3911988, r3911987, r3911980, MPFR_RNDN);
        mpfr_div(r3911989, r3911976, r3911988, MPFR_RNDN);
        return mpfr_get_d(r3911989, MPFR_RNDN);
}

