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

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

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r10004 = b;
        float r10005 = -r10004;
        float r10006 = r10004 * r10004;
        float r10007 = 3;
        float r10008 = a;
        float r10009 = r10007 * r10008;
        float r10010 = c;
        float r10011 = r10009 * r10010;
        float r10012 = r10006 - r10011;
        float r10013 = sqrt(r10012);
        float r10014 = r10005 + r10013;
        float r10015 = r10014 / r10009;
        return r10015;
}

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


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

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r10044 = 3;
        double r10045 = r10044 / r10044;
        double r10046 = c;
        double r10047 = b;
        double r10048 = -r10047;
        double r10049 = r10047 * r10047;
        double r10050 = a;
        double r10051 = r10046 * r10050;
        double r10052 = r10051 * r10044;
        double r10053 = r10049 - r10052;
        double r10054 = pow(r10053, r10044);
        double r10055 = cbrt(r10054);
        double r10056 = sqrt(r10055);
        double r10057 = r10048 - r10056;
        double r10058 = r10046 / r10057;
        double r10059 = r10045 * r10058;
        return r10059;
}

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 r10060, r10061, r10062, r10063, r10064, r10065, r10066, r10067, r10068, r10069, r10070, r10071;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10060);
        mpfr_init(r10061);
        mpfr_init(r10062);
        mpfr_init_set_str(r10063, "3", 10, MPFR_RNDN);
        mpfr_init(r10064);
        mpfr_init(r10065);
        mpfr_init(r10066);
        mpfr_init(r10067);
        mpfr_init(r10068);
        mpfr_init(r10069);
        mpfr_init(r10070);
        mpfr_init(r10071);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10060, b, MPFR_RNDN);
        mpfr_neg(r10061, r10060, MPFR_RNDN);
        mpfr_mul(r10062, r10060, r10060, MPFR_RNDN);
        ;
        mpfr_set_d(r10064, a, MPFR_RNDN);
        mpfr_mul(r10065, r10063, r10064, MPFR_RNDN);
        mpfr_set_d(r10066, c, MPFR_RNDN);
        mpfr_mul(r10067, r10065, r10066, MPFR_RNDN);
        mpfr_sub(r10068, r10062, r10067, MPFR_RNDN);
        mpfr_sqrt(r10069, r10068, MPFR_RNDN);
        mpfr_add(r10070, r10061, r10069, MPFR_RNDN);
        mpfr_div(r10071, r10070, r10065, MPFR_RNDN);
        return mpfr_get_d(r10071, MPFR_RNDN);
}

static mpfr_t r10072, r10073, r10074, r10075, r10076, r10077, r10078, r10079, r10080, r10081, r10082, r10083, r10084, r10085, r10086, r10087;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10072, "3", 10, MPFR_RNDN);
        mpfr_init(r10073);
        mpfr_init(r10074);
        mpfr_init(r10075);
        mpfr_init(r10076);
        mpfr_init(r10077);
        mpfr_init(r10078);
        mpfr_init(r10079);
        mpfr_init(r10080);
        mpfr_init(r10081);
        mpfr_init(r10082);
        mpfr_init(r10083);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init(r10087);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r10073, r10072, r10072, MPFR_RNDN);
        mpfr_set_d(r10074, c, MPFR_RNDN);
        mpfr_set_d(r10075, b, MPFR_RNDN);
        mpfr_neg(r10076, r10075, MPFR_RNDN);
        mpfr_mul(r10077, r10075, r10075, MPFR_RNDN);
        mpfr_set_d(r10078, a, MPFR_RNDN);
        mpfr_mul(r10079, r10074, r10078, MPFR_RNDN);
        mpfr_mul(r10080, r10079, r10072, MPFR_RNDN);
        mpfr_sub(r10081, r10077, r10080, MPFR_RNDN);
        mpfr_pow(r10082, r10081, r10072, MPFR_RNDN);
        mpfr_cbrt(r10083, r10082, MPFR_RNDN);
        mpfr_sqrt(r10084, r10083, MPFR_RNDN);
        mpfr_sub(r10085, r10076, r10084, MPFR_RNDN);
        mpfr_div(r10086, r10074, r10085, MPFR_RNDN);
        mpfr_mul(r10087, r10073, r10086, MPFR_RNDN);
        return mpfr_get_d(r10087, MPFR_RNDN);
}

static mpfr_t r10088, r10089, r10090, r10091, r10092, r10093, r10094, r10095, r10096, r10097, r10098, r10099, r10100, r10101, r10102, r10103;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10088, "3", 10, MPFR_RNDN);
        mpfr_init(r10089);
        mpfr_init(r10090);
        mpfr_init(r10091);
        mpfr_init(r10092);
        mpfr_init(r10093);
        mpfr_init(r10094);
        mpfr_init(r10095);
        mpfr_init(r10096);
        mpfr_init(r10097);
        mpfr_init(r10098);
        mpfr_init(r10099);
        mpfr_init(r10100);
        mpfr_init(r10101);
        mpfr_init(r10102);
        mpfr_init(r10103);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r10089, r10088, r10088, MPFR_RNDN);
        mpfr_set_d(r10090, c, MPFR_RNDN);
        mpfr_set_d(r10091, b, MPFR_RNDN);
        mpfr_neg(r10092, r10091, MPFR_RNDN);
        mpfr_mul(r10093, r10091, r10091, MPFR_RNDN);
        mpfr_set_d(r10094, a, MPFR_RNDN);
        mpfr_mul(r10095, r10090, r10094, MPFR_RNDN);
        mpfr_mul(r10096, r10095, r10088, MPFR_RNDN);
        mpfr_sub(r10097, r10093, r10096, MPFR_RNDN);
        mpfr_pow(r10098, r10097, r10088, MPFR_RNDN);
        mpfr_cbrt(r10099, r10098, MPFR_RNDN);
        mpfr_sqrt(r10100, r10099, MPFR_RNDN);
        mpfr_sub(r10101, r10092, r10100, MPFR_RNDN);
        mpfr_div(r10102, r10090, r10101, MPFR_RNDN);
        mpfr_mul(r10103, r10089, r10102, MPFR_RNDN);
        return mpfr_get_d(r10103, MPFR_RNDN);
}

