#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 r18362218 = b;
        float r18362219 = -r18362218;
        float r18362220 = r18362218 * r18362218;
        float r18362221 = 3;
        float r18362222 = a;
        float r18362223 = r18362221 * r18362222;
        float r18362224 = c;
        float r18362225 = r18362223 * r18362224;
        float r18362226 = r18362220 - r18362225;
        float r18362227 = sqrt(r18362226);
        float r18362228 = r18362219 + r18362227;
        float r18362229 = r18362228 / r18362223;
        return r18362229;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r18362230 = b;
        double r18362231 = -r18362230;
        double r18362232 = r18362230 * r18362230;
        double r18362233 = 3;
        double r18362234 = a;
        double r18362235 = r18362233 * r18362234;
        double r18362236 = c;
        double r18362237 = r18362235 * r18362236;
        double r18362238 = r18362232 - r18362237;
        double r18362239 = sqrt(r18362238);
        double r18362240 = r18362231 + r18362239;
        double r18362241 = r18362240 / r18362235;
        return r18362241;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r18362242 = 3;
        float r18362243 = r18362242 / r18362242;
        float r18362244 = c;
        float r18362245 = b;
        float r18362246 = -r18362245;
        float r18362247 = r18362245 * r18362245;
        float r18362248 = a;
        float r18362249 = r18362248 * r18362244;
        float r18362250 = r18362249 * r18362242;
        float r18362251 = r18362247 - r18362250;
        float r18362252 = sqrt(r18362251);
        float r18362253 = r18362246 - r18362252;
        float r18362254 = r18362244 / r18362253;
        float r18362255 = r18362243 * r18362254;
        return r18362255;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r18362256 = 3;
        double r18362257 = r18362256 / r18362256;
        double r18362258 = c;
        double r18362259 = b;
        double r18362260 = -r18362259;
        double r18362261 = r18362259 * r18362259;
        double r18362262 = a;
        double r18362263 = r18362262 * r18362258;
        double r18362264 = r18362263 * r18362256;
        double r18362265 = r18362261 - r18362264;
        double r18362266 = sqrt(r18362265);
        double r18362267 = r18362260 - r18362266;
        double r18362268 = r18362258 / r18362267;
        double r18362269 = r18362257 * r18362268;
        return r18362269;
}

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 r18362270, r18362271, r18362272, r18362273, r18362274, r18362275, r18362276, r18362277, r18362278, r18362279, r18362280, r18362281;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r18362270);
        mpfr_init(r18362271);
        mpfr_init(r18362272);
        mpfr_init_set_str(r18362273, "3", 10, MPFR_RNDN);
        mpfr_init(r18362274);
        mpfr_init(r18362275);
        mpfr_init(r18362276);
        mpfr_init(r18362277);
        mpfr_init(r18362278);
        mpfr_init(r18362279);
        mpfr_init(r18362280);
        mpfr_init(r18362281);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r18362270, b, MPFR_RNDN);
        mpfr_neg(r18362271, r18362270, MPFR_RNDN);
        mpfr_mul(r18362272, r18362270, r18362270, MPFR_RNDN);
        ;
        mpfr_set_d(r18362274, a, MPFR_RNDN);
        mpfr_mul(r18362275, r18362273, r18362274, MPFR_RNDN);
        mpfr_set_d(r18362276, c, MPFR_RNDN);
        mpfr_mul(r18362277, r18362275, r18362276, MPFR_RNDN);
        mpfr_sub(r18362278, r18362272, r18362277, MPFR_RNDN);
        mpfr_sqrt(r18362279, r18362278, MPFR_RNDN);
        mpfr_add(r18362280, r18362271, r18362279, MPFR_RNDN);
        mpfr_div(r18362281, r18362280, r18362275, MPFR_RNDN);
        return mpfr_get_d(r18362281, MPFR_RNDN);
}

static mpfr_t r18362282, r18362283, r18362284, r18362285, r18362286, r18362287, r18362288, r18362289, r18362290, r18362291, r18362292, r18362293, r18362294, r18362295;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r18362282, "3", 10, MPFR_RNDN);
        mpfr_init(r18362283);
        mpfr_init(r18362284);
        mpfr_init(r18362285);
        mpfr_init(r18362286);
        mpfr_init(r18362287);
        mpfr_init(r18362288);
        mpfr_init(r18362289);
        mpfr_init(r18362290);
        mpfr_init(r18362291);
        mpfr_init(r18362292);
        mpfr_init(r18362293);
        mpfr_init(r18362294);
        mpfr_init(r18362295);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r18362283, r18362282, r18362282, MPFR_RNDN);
        mpfr_set_d(r18362284, c, MPFR_RNDN);
        mpfr_set_d(r18362285, b, MPFR_RNDN);
        mpfr_neg(r18362286, r18362285, MPFR_RNDN);
        mpfr_mul(r18362287, r18362285, r18362285, MPFR_RNDN);
        mpfr_set_d(r18362288, a, MPFR_RNDN);
        mpfr_mul(r18362289, r18362288, r18362284, MPFR_RNDN);
        mpfr_mul(r18362290, r18362289, r18362282, MPFR_RNDN);
        mpfr_sub(r18362291, r18362287, r18362290, MPFR_RNDN);
        mpfr_sqrt(r18362292, r18362291, MPFR_RNDN);
        mpfr_sub(r18362293, r18362286, r18362292, MPFR_RNDN);
        mpfr_div(r18362294, r18362284, r18362293, MPFR_RNDN);
        mpfr_mul(r18362295, r18362283, r18362294, MPFR_RNDN);
        return mpfr_get_d(r18362295, MPFR_RNDN);
}

static mpfr_t r18362296, r18362297, r18362298, r18362299, r18362300, r18362301, r18362302, r18362303, r18362304, r18362305, r18362306, r18362307, r18362308, r18362309;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r18362296, "3", 10, MPFR_RNDN);
        mpfr_init(r18362297);
        mpfr_init(r18362298);
        mpfr_init(r18362299);
        mpfr_init(r18362300);
        mpfr_init(r18362301);
        mpfr_init(r18362302);
        mpfr_init(r18362303);
        mpfr_init(r18362304);
        mpfr_init(r18362305);
        mpfr_init(r18362306);
        mpfr_init(r18362307);
        mpfr_init(r18362308);
        mpfr_init(r18362309);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r18362297, r18362296, r18362296, MPFR_RNDN);
        mpfr_set_d(r18362298, c, MPFR_RNDN);
        mpfr_set_d(r18362299, b, MPFR_RNDN);
        mpfr_neg(r18362300, r18362299, MPFR_RNDN);
        mpfr_mul(r18362301, r18362299, r18362299, MPFR_RNDN);
        mpfr_set_d(r18362302, a, MPFR_RNDN);
        mpfr_mul(r18362303, r18362302, r18362298, MPFR_RNDN);
        mpfr_mul(r18362304, r18362303, r18362296, MPFR_RNDN);
        mpfr_sub(r18362305, r18362301, r18362304, MPFR_RNDN);
        mpfr_sqrt(r18362306, r18362305, MPFR_RNDN);
        mpfr_sub(r18362307, r18362300, r18362306, MPFR_RNDN);
        mpfr_div(r18362308, r18362298, r18362307, MPFR_RNDN);
        mpfr_mul(r18362309, r18362297, r18362308, MPFR_RNDN);
        return mpfr_get_d(r18362309, MPFR_RNDN);
}

