#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 r9975 = b;
        float r9976 = -r9975;
        float r9977 = r9975 * r9975;
        float r9978 = 3;
        float r9979 = a;
        float r9980 = r9978 * r9979;
        float r9981 = c;
        float r9982 = r9980 * r9981;
        float r9983 = r9977 - r9982;
        float r9984 = sqrt(r9983);
        float r9985 = r9976 + r9984;
        float r9986 = r9985 / r9980;
        return r9986;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9987 = b;
        double r9988 = -r9987;
        double r9989 = r9987 * r9987;
        double r9990 = 3;
        double r9991 = a;
        double r9992 = r9990 * r9991;
        double r9993 = c;
        double r9994 = r9992 * r9993;
        double r9995 = r9989 - r9994;
        double r9996 = sqrt(r9995);
        double r9997 = r9988 + r9996;
        double r9998 = r9997 / r9992;
        return r9998;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9999 = c;
        float r10000 = -r9999;
        float r10001 = 3;
        float r10002 = a;
        float r10003 = r10001 * r10002;
        float r10004 = b;
        float r10005 = r10004 * r10004;
        float r10006 = fma(r10003, r10000, r10005);
        float r10007 = sqrt(r10006);
        float r10008 = r10007 + r10004;
        float r10009 = r10003 / r10008;
        float r10010 = r10000 * r10009;
        float r10011 = r10010 / r10003;
        return r10011;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r10012 = c;
        double r10013 = -r10012;
        double r10014 = 3;
        double r10015 = a;
        double r10016 = r10014 * r10015;
        double r10017 = b;
        double r10018 = r10017 * r10017;
        double r10019 = fma(r10016, r10013, r10018);
        double r10020 = sqrt(r10019);
        double r10021 = r10020 + r10017;
        double r10022 = r10016 / r10021;
        double r10023 = r10013 * r10022;
        double r10024 = r10023 / r10016;
        return r10024;
}

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 r10025, r10026, r10027, r10028, r10029, r10030, r10031, r10032, r10033, r10034, r10035, r10036;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10025);
        mpfr_init(r10026);
        mpfr_init(r10027);
        mpfr_init_set_str(r10028, "3", 10, MPFR_RNDN);
        mpfr_init(r10029);
        mpfr_init(r10030);
        mpfr_init(r10031);
        mpfr_init(r10032);
        mpfr_init(r10033);
        mpfr_init(r10034);
        mpfr_init(r10035);
        mpfr_init(r10036);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10025, b, MPFR_RNDN);
        mpfr_neg(r10026, r10025, MPFR_RNDN);
        mpfr_mul(r10027, r10025, r10025, MPFR_RNDN);
        ;
        mpfr_set_d(r10029, a, MPFR_RNDN);
        mpfr_mul(r10030, r10028, r10029, MPFR_RNDN);
        mpfr_set_d(r10031, c, MPFR_RNDN);
        mpfr_mul(r10032, r10030, r10031, MPFR_RNDN);
        mpfr_sub(r10033, r10027, r10032, MPFR_RNDN);
        mpfr_sqrt(r10034, r10033, MPFR_RNDN);
        mpfr_add(r10035, r10026, r10034, MPFR_RNDN);
        mpfr_div(r10036, r10035, r10030, MPFR_RNDN);
        return mpfr_get_d(r10036, MPFR_RNDN);
}

static mpfr_t r10037, r10038, r10039, r10040, r10041, r10042, r10043, r10044, r10045, r10046, r10047, r10048, r10049;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10037);
        mpfr_init(r10038);
        mpfr_init_set_str(r10039, "3", 10, MPFR_RNDN);
        mpfr_init(r10040);
        mpfr_init(r10041);
        mpfr_init(r10042);
        mpfr_init(r10043);
        mpfr_init(r10044);
        mpfr_init(r10045);
        mpfr_init(r10046);
        mpfr_init(r10047);
        mpfr_init(r10048);
        mpfr_init(r10049);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10037, c, MPFR_RNDN);
        mpfr_neg(r10038, r10037, MPFR_RNDN);
        ;
        mpfr_set_d(r10040, a, MPFR_RNDN);
        mpfr_mul(r10041, r10039, r10040, MPFR_RNDN);
        mpfr_set_d(r10042, b, MPFR_RNDN);
        mpfr_mul(r10043, r10042, r10042, MPFR_RNDN);
        mpfr_fma(r10044, r10041, r10038, r10043, MPFR_RNDN);
        mpfr_sqrt(r10045, r10044, MPFR_RNDN);
        mpfr_add(r10046, r10045, r10042, MPFR_RNDN);
        mpfr_div(r10047, r10041, r10046, MPFR_RNDN);
        mpfr_mul(r10048, r10038, r10047, MPFR_RNDN);
        mpfr_div(r10049, r10048, r10041, MPFR_RNDN);
        return mpfr_get_d(r10049, MPFR_RNDN);
}

static mpfr_t r10050, r10051, r10052, r10053, r10054, r10055, r10056, r10057, r10058, r10059, r10060, r10061, r10062;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10050);
        mpfr_init(r10051);
        mpfr_init_set_str(r10052, "3", 10, MPFR_RNDN);
        mpfr_init(r10053);
        mpfr_init(r10054);
        mpfr_init(r10055);
        mpfr_init(r10056);
        mpfr_init(r10057);
        mpfr_init(r10058);
        mpfr_init(r10059);
        mpfr_init(r10060);
        mpfr_init(r10061);
        mpfr_init(r10062);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10050, c, MPFR_RNDN);
        mpfr_neg(r10051, r10050, MPFR_RNDN);
        ;
        mpfr_set_d(r10053, a, MPFR_RNDN);
        mpfr_mul(r10054, r10052, r10053, MPFR_RNDN);
        mpfr_set_d(r10055, b, MPFR_RNDN);
        mpfr_mul(r10056, r10055, r10055, MPFR_RNDN);
        mpfr_fma(r10057, r10054, r10051, r10056, MPFR_RNDN);
        mpfr_sqrt(r10058, r10057, MPFR_RNDN);
        mpfr_add(r10059, r10058, r10055, MPFR_RNDN);
        mpfr_div(r10060, r10054, r10059, MPFR_RNDN);
        mpfr_mul(r10061, r10051, r10060, MPFR_RNDN);
        mpfr_div(r10062, r10061, r10054, MPFR_RNDN);
        return mpfr_get_d(r10062, MPFR_RNDN);
}

