#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 r3911990 = b;
        float r3911991 = -r3911990;
        float r3911992 = r3911990 * r3911990;
        float r3911993 = 3;
        float r3911994 = a;
        float r3911995 = r3911993 * r3911994;
        float r3911996 = c;
        float r3911997 = r3911995 * r3911996;
        float r3911998 = r3911992 - r3911997;
        float r3911999 = sqrt(r3911998);
        float r3912000 = r3911991 + r3911999;
        float r3912001 = r3912000 / r3911995;
        return r3912001;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r3912002 = b;
        double r3912003 = -r3912002;
        double r3912004 = r3912002 * r3912002;
        double r3912005 = 3;
        double r3912006 = a;
        double r3912007 = r3912005 * r3912006;
        double r3912008 = c;
        double r3912009 = r3912007 * r3912008;
        double r3912010 = r3912004 - r3912009;
        double r3912011 = sqrt(r3912010);
        double r3912012 = r3912003 + r3912011;
        double r3912013 = r3912012 / r3912007;
        return r3912013;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r3912014 = 3;
        float r3912015 = r3912014 / r3912014;
        float r3912016 = c;
        float r3912017 = b;
        float r3912018 = -r3912017;
        float r3912019 = r3912017 * r3912017;
        float r3912020 = a;
        float r3912021 = r3912016 * r3912020;
        float r3912022 = r3912021 * r3912014;
        float r3912023 = r3912019 - r3912022;
        float r3912024 = sqrt(r3912023);
        float r3912025 = r3912018 - r3912024;
        float r3912026 = r3912016 / r3912025;
        float r3912027 = r3912015 * r3912026;
        return r3912027;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r3912028 = 3;
        double r3912029 = r3912028 / r3912028;
        double r3912030 = c;
        double r3912031 = b;
        double r3912032 = -r3912031;
        double r3912033 = r3912031 * r3912031;
        double r3912034 = a;
        double r3912035 = r3912030 * r3912034;
        double r3912036 = r3912035 * r3912028;
        double r3912037 = r3912033 - r3912036;
        double r3912038 = sqrt(r3912037);
        double r3912039 = r3912032 - r3912038;
        double r3912040 = r3912030 / r3912039;
        double r3912041 = r3912029 * r3912040;
        return r3912041;
}

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 r3912042, r3912043, r3912044, r3912045, r3912046, r3912047, r3912048, r3912049, r3912050, r3912051, r3912052, r3912053;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r3912042);
        mpfr_init(r3912043);
        mpfr_init(r3912044);
        mpfr_init_set_str(r3912045, "3", 10, MPFR_RNDN);
        mpfr_init(r3912046);
        mpfr_init(r3912047);
        mpfr_init(r3912048);
        mpfr_init(r3912049);
        mpfr_init(r3912050);
        mpfr_init(r3912051);
        mpfr_init(r3912052);
        mpfr_init(r3912053);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r3912042, b, MPFR_RNDN);
        mpfr_neg(r3912043, r3912042, MPFR_RNDN);
        mpfr_mul(r3912044, r3912042, r3912042, MPFR_RNDN);
        ;
        mpfr_set_d(r3912046, a, MPFR_RNDN);
        mpfr_mul(r3912047, r3912045, r3912046, MPFR_RNDN);
        mpfr_set_d(r3912048, c, MPFR_RNDN);
        mpfr_mul(r3912049, r3912047, r3912048, MPFR_RNDN);
        mpfr_sub(r3912050, r3912044, r3912049, MPFR_RNDN);
        mpfr_sqrt(r3912051, r3912050, MPFR_RNDN);
        mpfr_add(r3912052, r3912043, r3912051, MPFR_RNDN);
        mpfr_div(r3912053, r3912052, r3912047, MPFR_RNDN);
        return mpfr_get_d(r3912053, MPFR_RNDN);
}

static mpfr_t r3912054, r3912055, r3912056, r3912057, r3912058, r3912059, r3912060, r3912061, r3912062, r3912063, r3912064, r3912065, r3912066, r3912067;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r3912054, "3", 10, MPFR_RNDN);
        mpfr_init(r3912055);
        mpfr_init(r3912056);
        mpfr_init(r3912057);
        mpfr_init(r3912058);
        mpfr_init(r3912059);
        mpfr_init(r3912060);
        mpfr_init(r3912061);
        mpfr_init(r3912062);
        mpfr_init(r3912063);
        mpfr_init(r3912064);
        mpfr_init(r3912065);
        mpfr_init(r3912066);
        mpfr_init(r3912067);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r3912055, r3912054, r3912054, MPFR_RNDN);
        mpfr_set_d(r3912056, c, MPFR_RNDN);
        mpfr_set_d(r3912057, b, MPFR_RNDN);
        mpfr_neg(r3912058, r3912057, MPFR_RNDN);
        mpfr_mul(r3912059, r3912057, r3912057, MPFR_RNDN);
        mpfr_set_d(r3912060, a, MPFR_RNDN);
        mpfr_mul(r3912061, r3912056, r3912060, MPFR_RNDN);
        mpfr_mul(r3912062, r3912061, r3912054, MPFR_RNDN);
        mpfr_sub(r3912063, r3912059, r3912062, MPFR_RNDN);
        mpfr_sqrt(r3912064, r3912063, MPFR_RNDN);
        mpfr_sub(r3912065, r3912058, r3912064, MPFR_RNDN);
        mpfr_div(r3912066, r3912056, r3912065, MPFR_RNDN);
        mpfr_mul(r3912067, r3912055, r3912066, MPFR_RNDN);
        return mpfr_get_d(r3912067, MPFR_RNDN);
}

static mpfr_t r3912068, r3912069, r3912070, r3912071, r3912072, r3912073, r3912074, r3912075, r3912076, r3912077, r3912078, r3912079, r3912080, r3912081;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r3912068, "3", 10, MPFR_RNDN);
        mpfr_init(r3912069);
        mpfr_init(r3912070);
        mpfr_init(r3912071);
        mpfr_init(r3912072);
        mpfr_init(r3912073);
        mpfr_init(r3912074);
        mpfr_init(r3912075);
        mpfr_init(r3912076);
        mpfr_init(r3912077);
        mpfr_init(r3912078);
        mpfr_init(r3912079);
        mpfr_init(r3912080);
        mpfr_init(r3912081);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r3912069, r3912068, r3912068, MPFR_RNDN);
        mpfr_set_d(r3912070, c, MPFR_RNDN);
        mpfr_set_d(r3912071, b, MPFR_RNDN);
        mpfr_neg(r3912072, r3912071, MPFR_RNDN);
        mpfr_mul(r3912073, r3912071, r3912071, MPFR_RNDN);
        mpfr_set_d(r3912074, a, MPFR_RNDN);
        mpfr_mul(r3912075, r3912070, r3912074, MPFR_RNDN);
        mpfr_mul(r3912076, r3912075, r3912068, MPFR_RNDN);
        mpfr_sub(r3912077, r3912073, r3912076, MPFR_RNDN);
        mpfr_sqrt(r3912078, r3912077, MPFR_RNDN);
        mpfr_sub(r3912079, r3912072, r3912078, MPFR_RNDN);
        mpfr_div(r3912080, r3912070, r3912079, MPFR_RNDN);
        mpfr_mul(r3912081, r3912069, r3912080, MPFR_RNDN);
        return mpfr_get_d(r3912081, MPFR_RNDN);
}

