#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 r10007 = b;
        float r10008 = -r10007;
        float r10009 = r10007 * r10007;
        float r10010 = 3;
        float r10011 = a;
        float r10012 = r10010 * r10011;
        float r10013 = c;
        float r10014 = r10012 * r10013;
        float r10015 = r10009 - r10014;
        float r10016 = sqrt(r10015);
        float r10017 = r10008 + r10016;
        float r10018 = r10017 / r10012;
        return r10018;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r10019 = b;
        double r10020 = -r10019;
        double r10021 = r10019 * r10019;
        double r10022 = 3;
        double r10023 = a;
        double r10024 = r10022 * r10023;
        double r10025 = c;
        double r10026 = r10024 * r10025;
        double r10027 = r10021 - r10026;
        double r10028 = sqrt(r10027);
        double r10029 = r10020 + r10028;
        double r10030 = r10029 / r10024;
        return r10030;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r10031 = b;
        float r10032 = -r10031;
        float r10033 = r10031 * r10031;
        float r10034 = 3;
        float r10035 = a;
        float r10036 = r10034 * r10035;
        float r10037 = c;
        float r10038 = r10036 * r10037;
        float r10039 = r10033 - r10038;
        float r10040 = sqrt(r10039);
        float r10041 = r10032 + r10040;
        float r10042 = r10041 / r10036;
        return r10042;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r10043 = b;
        double r10044 = -r10043;
        double r10045 = r10043 * r10043;
        double r10046 = 3;
        double r10047 = a;
        double r10048 = r10046 * r10047;
        double r10049 = c;
        double r10050 = r10048 * r10049;
        double r10051 = r10045 - r10050;
        double r10052 = sqrt(r10051);
        double r10053 = r10044 + r10052;
        double r10054 = r10053 / r10048;
        return r10054;
}

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 r10055, r10056, r10057, r10058, r10059, r10060, r10061, r10062, r10063, r10064, r10065, r10066;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10055);
        mpfr_init(r10056);
        mpfr_init(r10057);
        mpfr_init_set_str(r10058, "3", 10, MPFR_RNDN);
        mpfr_init(r10059);
        mpfr_init(r10060);
        mpfr_init(r10061);
        mpfr_init(r10062);
        mpfr_init(r10063);
        mpfr_init(r10064);
        mpfr_init(r10065);
        mpfr_init(r10066);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10055, b, MPFR_RNDN);
        mpfr_neg(r10056, r10055, MPFR_RNDN);
        mpfr_mul(r10057, r10055, r10055, MPFR_RNDN);
        ;
        mpfr_set_d(r10059, a, MPFR_RNDN);
        mpfr_mul(r10060, r10058, r10059, MPFR_RNDN);
        mpfr_set_d(r10061, c, MPFR_RNDN);
        mpfr_mul(r10062, r10060, r10061, MPFR_RNDN);
        mpfr_sub(r10063, r10057, r10062, MPFR_RNDN);
        mpfr_sqrt(r10064, r10063, MPFR_RNDN);
        mpfr_add(r10065, r10056, r10064, MPFR_RNDN);
        mpfr_div(r10066, r10065, r10060, MPFR_RNDN);
        return mpfr_get_d(r10066, MPFR_RNDN);
}

static mpfr_t r10067, r10068, r10069, r10070, r10071, r10072, r10073, r10074, r10075, r10076, r10077, r10078;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10067);
        mpfr_init(r10068);
        mpfr_init(r10069);
        mpfr_init_set_str(r10070, "3", 10, MPFR_RNDN);
        mpfr_init(r10071);
        mpfr_init(r10072);
        mpfr_init(r10073);
        mpfr_init(r10074);
        mpfr_init(r10075);
        mpfr_init(r10076);
        mpfr_init(r10077);
        mpfr_init(r10078);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10067, b, MPFR_RNDN);
        mpfr_neg(r10068, r10067, MPFR_RNDN);
        mpfr_mul(r10069, r10067, r10067, MPFR_RNDN);
        ;
        mpfr_set_d(r10071, a, MPFR_RNDN);
        mpfr_mul(r10072, r10070, r10071, MPFR_RNDN);
        mpfr_set_d(r10073, c, MPFR_RNDN);
        mpfr_mul(r10074, r10072, r10073, MPFR_RNDN);
        mpfr_sub(r10075, r10069, r10074, MPFR_RNDN);
        mpfr_sqrt(r10076, r10075, MPFR_RNDN);
        mpfr_add(r10077, r10068, r10076, MPFR_RNDN);
        mpfr_div(r10078, r10077, r10072, MPFR_RNDN);
        return mpfr_get_d(r10078, MPFR_RNDN);
}

static mpfr_t r10079, r10080, r10081, r10082, r10083, r10084, r10085, r10086, r10087, r10088, r10089, r10090;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10079);
        mpfr_init(r10080);
        mpfr_init(r10081);
        mpfr_init_set_str(r10082, "3", 10, MPFR_RNDN);
        mpfr_init(r10083);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init(r10087);
        mpfr_init(r10088);
        mpfr_init(r10089);
        mpfr_init(r10090);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10079, b, MPFR_RNDN);
        mpfr_neg(r10080, r10079, MPFR_RNDN);
        mpfr_mul(r10081, r10079, r10079, MPFR_RNDN);
        ;
        mpfr_set_d(r10083, a, MPFR_RNDN);
        mpfr_mul(r10084, r10082, r10083, MPFR_RNDN);
        mpfr_set_d(r10085, c, MPFR_RNDN);
        mpfr_mul(r10086, r10084, r10085, MPFR_RNDN);
        mpfr_sub(r10087, r10081, r10086, MPFR_RNDN);
        mpfr_sqrt(r10088, r10087, MPFR_RNDN);
        mpfr_add(r10089, r10080, r10088, MPFR_RNDN);
        mpfr_div(r10090, r10089, r10084, MPFR_RNDN);
        return mpfr_get_d(r10090, MPFR_RNDN);
}

