#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 r10032 = b;
        float r10033 = -r10032;
        float r10034 = r10032 * r10032;
        float r10035 = 3;
        float r10036 = a;
        float r10037 = r10035 * r10036;
        float r10038 = c;
        float r10039 = r10037 * r10038;
        float r10040 = r10034 - r10039;
        float r10041 = sqrt(r10040);
        float r10042 = r10033 + r10041;
        float r10043 = r10042 / r10037;
        return r10043;
}

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


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r10056 = 3;
        float r10057 = r10056 / r10056;
        float r10058 = c;
        float r10059 = b;
        float r10060 = -r10059;
        float r10061 = r10059 * r10059;
        float r10062 = r10058 * r10056;
        float r10063 = a;
        float r10064 = r10062 * r10063;
        float r10065 = r10061 - r10064;
        float r10066 = sqrt(r10065);
        float r10067 = r10060 - r10066;
        float r10068 = r10058 / r10067;
        float r10069 = r10057 * r10068;
        return r10069;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r10070 = 3;
        double r10071 = r10070 / r10070;
        double r10072 = c;
        double r10073 = b;
        double r10074 = -r10073;
        double r10075 = r10073 * r10073;
        double r10076 = r10072 * r10070;
        double r10077 = a;
        double r10078 = r10076 * r10077;
        double r10079 = r10075 - r10078;
        double r10080 = sqrt(r10079);
        double r10081 = r10074 - r10080;
        double r10082 = r10072 / r10081;
        double r10083 = r10071 * r10082;
        return r10083;
}

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 r10084, r10085, r10086, r10087, r10088, r10089, r10090, r10091, r10092, r10093, r10094, r10095;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init_set_str(r10087, "3", 10, MPFR_RNDN);
        mpfr_init(r10088);
        mpfr_init(r10089);
        mpfr_init(r10090);
        mpfr_init(r10091);
        mpfr_init(r10092);
        mpfr_init(r10093);
        mpfr_init(r10094);
        mpfr_init(r10095);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10084, b, MPFR_RNDN);
        mpfr_neg(r10085, r10084, MPFR_RNDN);
        mpfr_mul(r10086, r10084, r10084, MPFR_RNDN);
        ;
        mpfr_set_d(r10088, a, MPFR_RNDN);
        mpfr_mul(r10089, r10087, r10088, MPFR_RNDN);
        mpfr_set_d(r10090, c, MPFR_RNDN);
        mpfr_mul(r10091, r10089, r10090, MPFR_RNDN);
        mpfr_sub(r10092, r10086, r10091, MPFR_RNDN);
        mpfr_sqrt(r10093, r10092, MPFR_RNDN);
        mpfr_add(r10094, r10085, r10093, MPFR_RNDN);
        mpfr_div(r10095, r10094, r10089, MPFR_RNDN);
        return mpfr_get_d(r10095, MPFR_RNDN);
}

static mpfr_t r10096, r10097, r10098, r10099, r10100, r10101, r10102, r10103, r10104, r10105, r10106, r10107, r10108, r10109;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10096, "3", 10, MPFR_RNDN);
        mpfr_init(r10097);
        mpfr_init(r10098);
        mpfr_init(r10099);
        mpfr_init(r10100);
        mpfr_init(r10101);
        mpfr_init(r10102);
        mpfr_init(r10103);
        mpfr_init(r10104);
        mpfr_init(r10105);
        mpfr_init(r10106);
        mpfr_init(r10107);
        mpfr_init(r10108);
        mpfr_init(r10109);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r10097, r10096, r10096, MPFR_RNDN);
        mpfr_set_d(r10098, c, MPFR_RNDN);
        mpfr_set_d(r10099, b, MPFR_RNDN);
        mpfr_neg(r10100, r10099, MPFR_RNDN);
        mpfr_mul(r10101, r10099, r10099, MPFR_RNDN);
        mpfr_mul(r10102, r10098, r10096, MPFR_RNDN);
        mpfr_set_d(r10103, a, MPFR_RNDN);
        mpfr_mul(r10104, r10102, r10103, MPFR_RNDN);
        mpfr_sub(r10105, r10101, r10104, MPFR_RNDN);
        mpfr_sqrt(r10106, r10105, MPFR_RNDN);
        mpfr_sub(r10107, r10100, r10106, MPFR_RNDN);
        mpfr_div(r10108, r10098, r10107, MPFR_RNDN);
        mpfr_mul(r10109, r10097, r10108, MPFR_RNDN);
        return mpfr_get_d(r10109, MPFR_RNDN);
}

static mpfr_t r10110, r10111, r10112, r10113, r10114, r10115, r10116, r10117, r10118, r10119, r10120, r10121, r10122, r10123;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10110, "3", 10, MPFR_RNDN);
        mpfr_init(r10111);
        mpfr_init(r10112);
        mpfr_init(r10113);
        mpfr_init(r10114);
        mpfr_init(r10115);
        mpfr_init(r10116);
        mpfr_init(r10117);
        mpfr_init(r10118);
        mpfr_init(r10119);
        mpfr_init(r10120);
        mpfr_init(r10121);
        mpfr_init(r10122);
        mpfr_init(r10123);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r10111, r10110, r10110, MPFR_RNDN);
        mpfr_set_d(r10112, c, MPFR_RNDN);
        mpfr_set_d(r10113, b, MPFR_RNDN);
        mpfr_neg(r10114, r10113, MPFR_RNDN);
        mpfr_mul(r10115, r10113, r10113, MPFR_RNDN);
        mpfr_mul(r10116, r10112, r10110, MPFR_RNDN);
        mpfr_set_d(r10117, a, MPFR_RNDN);
        mpfr_mul(r10118, r10116, r10117, MPFR_RNDN);
        mpfr_sub(r10119, r10115, r10118, MPFR_RNDN);
        mpfr_sqrt(r10120, r10119, MPFR_RNDN);
        mpfr_sub(r10121, r10114, r10120, MPFR_RNDN);
        mpfr_div(r10122, r10112, r10121, MPFR_RNDN);
        mpfr_mul(r10123, r10111, r10122, MPFR_RNDN);
        return mpfr_get_d(r10123, MPFR_RNDN);
}

