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

char *name = "Cubic critical";

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r10180 = b;
        float r10181 = -r10180;
        float r10182 = r10180 * r10180;
        float r10183 = 3;
        float r10184 = a;
        float r10185 = r10183 * r10184;
        float r10186 = c;
        float r10187 = r10185 * r10186;
        float r10188 = r10182 - r10187;
        float r10189 = sqrt(r10188);
        float r10190 = r10181 + r10189;
        float r10191 = r10190 / r10185;
        return r10191;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r10192 = b;
        double r10193 = -r10192;
        double r10194 = r10192 * r10192;
        double r10195 = 3;
        double r10196 = a;
        double r10197 = r10195 * r10196;
        double r10198 = c;
        double r10199 = r10197 * r10198;
        double r10200 = r10194 - r10199;
        double r10201 = sqrt(r10200);
        double r10202 = r10193 + r10201;
        double r10203 = r10202 / r10197;
        return r10203;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r10204 = b;
        float r10205 = -3/2;
        float r10206 = r10204 / r10205;
        float r10207 = -1.1215798919922517e+126;
        bool r10208 = r10206 <= r10207;
        float r10209 = -1/2;
        float r10210 = c;
        float r10211 = r10210 / r10204;
        float r10212 = r10209 * r10211;
        float r10213 = 9.353121169670643e-306;
        bool r10214 = r10206 <= r10213;
        float r10215 = 1;
        float r10216 = -r10204;
        float r10217 = 3;
        float r10218 = a;
        float r10219 = r10217 * r10218;
        float r10220 = -r10210;
        float r10221 = r10204 * r10204;
        float r10222 = fma(r10219, r10220, r10221);
        float r10223 = sqrt(r10222);
        float r10224 = r10216 - r10223;
        float r10225 = r10215 / r10224;
        float r10226 = r10210 * r10225;
        float r10227 = 2.586818699748715e+67;
        bool r10228 = r10206 <= r10227;
        float r10229 = r10218 * r10217;
        float r10230 = fma(r10220, r10229, r10221);
        float r10231 = sqrt(r10230);
        float r10232 = r10231 - r10204;
        float r10233 = r10232 / r10217;
        float r10234 = r10233 / r10218;
        float r10235 = r10206 / r10218;
        float r10236 = r10228 ? r10234 : r10235;
        float r10237 = r10214 ? r10226 : r10236;
        float r10238 = r10208 ? r10212 : r10237;
        return r10238;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r10239 = b;
        double r10240 = -3/2;
        double r10241 = r10239 / r10240;
        double r10242 = -1.1215798919922517e+126;
        bool r10243 = r10241 <= r10242;
        double r10244 = -1/2;
        double r10245 = c;
        double r10246 = r10245 / r10239;
        double r10247 = r10244 * r10246;
        double r10248 = 9.353121169670643e-306;
        bool r10249 = r10241 <= r10248;
        double r10250 = 1;
        double r10251 = -r10239;
        double r10252 = 3;
        double r10253 = a;
        double r10254 = r10252 * r10253;
        double r10255 = -r10245;
        double r10256 = r10239 * r10239;
        double r10257 = fma(r10254, r10255, r10256);
        double r10258 = sqrt(r10257);
        double r10259 = r10251 - r10258;
        double r10260 = r10250 / r10259;
        double r10261 = r10245 * r10260;
        double r10262 = 2.586818699748715e+67;
        bool r10263 = r10241 <= r10262;
        double r10264 = r10253 * r10252;
        double r10265 = fma(r10255, r10264, r10256);
        double r10266 = sqrt(r10265);
        double r10267 = r10266 - r10239;
        double r10268 = r10267 / r10252;
        double r10269 = r10268 / r10253;
        double r10270 = r10241 / r10253;
        double r10271 = r10263 ? r10269 : r10270;
        double r10272 = r10249 ? r10261 : r10271;
        double r10273 = r10243 ? r10247 : r10272;
        return r10273;
}

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 r10274, r10275, r10276, r10277, r10278, r10279, r10280, r10281, r10282, r10283, r10284, r10285;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10274);
        mpfr_init(r10275);
        mpfr_init(r10276);
        mpfr_init_set_str(r10277, "3", 10, MPFR_RNDN);
        mpfr_init(r10278);
        mpfr_init(r10279);
        mpfr_init(r10280);
        mpfr_init(r10281);
        mpfr_init(r10282);
        mpfr_init(r10283);
        mpfr_init(r10284);
        mpfr_init(r10285);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10274, b, MPFR_RNDN);
        mpfr_neg(r10275, r10274, MPFR_RNDN);
        mpfr_mul(r10276, r10274, r10274, MPFR_RNDN);
        ;
        mpfr_set_d(r10278, a, MPFR_RNDN);
        mpfr_mul(r10279, r10277, r10278, MPFR_RNDN);
        mpfr_set_d(r10280, c, MPFR_RNDN);
        mpfr_mul(r10281, r10279, r10280, MPFR_RNDN);
        mpfr_sub(r10282, r10276, r10281, MPFR_RNDN);
        mpfr_sqrt(r10283, r10282, MPFR_RNDN);
        mpfr_add(r10284, r10275, r10283, MPFR_RNDN);
        mpfr_div(r10285, r10284, r10279, MPFR_RNDN);
        return mpfr_get_d(r10285, MPFR_RNDN);
}

static mpfr_t r10286, r10287, r10288, r10289, r10290, r10291, r10292, r10293, r10294, r10295, r10296, r10297, r10298, r10299, r10300, r10301, r10302, r10303, r10304, r10305, r10306, r10307, r10308, r10309, r10310, r10311, r10312, r10313, r10314, r10315, r10316, r10317, r10318, r10319, r10320;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10286);
        mpfr_init_set_str(r10287, "-3/2", 10, MPFR_RNDN);
        mpfr_init(r10288);
        mpfr_init_set_str(r10289, "-1.1215798919922517e+126", 10, MPFR_RNDN);
        mpfr_init(r10290);
        mpfr_init_set_str(r10291, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r10292);
        mpfr_init(r10293);
        mpfr_init(r10294);
        mpfr_init_set_str(r10295, "9.353121169670643e-306", 10, MPFR_RNDN);
        mpfr_init(r10296);
        mpfr_init_set_str(r10297, "1", 10, MPFR_RNDN);
        mpfr_init(r10298);
        mpfr_init_set_str(r10299, "3", 10, MPFR_RNDN);
        mpfr_init(r10300);
        mpfr_init(r10301);
        mpfr_init(r10302);
        mpfr_init(r10303);
        mpfr_init(r10304);
        mpfr_init(r10305);
        mpfr_init(r10306);
        mpfr_init(r10307);
        mpfr_init(r10308);
        mpfr_init_set_str(r10309, "2.586818699748715e+67", 10, MPFR_RNDN);
        mpfr_init(r10310);
        mpfr_init(r10311);
        mpfr_init(r10312);
        mpfr_init(r10313);
        mpfr_init(r10314);
        mpfr_init(r10315);
        mpfr_init(r10316);
        mpfr_init(r10317);
        mpfr_init(r10318);
        mpfr_init(r10319);
        mpfr_init(r10320);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10286, b, MPFR_RNDN);
        ;
        mpfr_div(r10288, r10286, r10287, MPFR_RNDN);
        ;
        mpfr_set_si(r10290, mpfr_cmp(r10288, r10289) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r10292, c, MPFR_RNDN);
        mpfr_div(r10293, r10292, r10286, MPFR_RNDN);
        mpfr_mul(r10294, r10291, r10293, MPFR_RNDN);
        ;
        mpfr_set_si(r10296, mpfr_cmp(r10288, r10295) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10298, r10286, MPFR_RNDN);
        ;
        mpfr_set_d(r10300, a, MPFR_RNDN);
        mpfr_mul(r10301, r10299, r10300, MPFR_RNDN);
        mpfr_neg(r10302, r10292, MPFR_RNDN);
        mpfr_mul(r10303, r10286, r10286, MPFR_RNDN);
        mpfr_fma(r10304, r10301, r10302, r10303, MPFR_RNDN);
        mpfr_sqrt(r10305, r10304, MPFR_RNDN);
        mpfr_sub(r10306, r10298, r10305, MPFR_RNDN);
        mpfr_div(r10307, r10297, r10306, MPFR_RNDN);
        mpfr_mul(r10308, r10292, r10307, MPFR_RNDN);
        ;
        mpfr_set_si(r10310, mpfr_cmp(r10288, r10309) <= 0, MPFR_RNDN);
        mpfr_mul(r10311, r10300, r10299, MPFR_RNDN);
        mpfr_fma(r10312, r10302, r10311, r10303, MPFR_RNDN);
        mpfr_sqrt(r10313, r10312, MPFR_RNDN);
        mpfr_sub(r10314, r10313, r10286, MPFR_RNDN);
        mpfr_div(r10315, r10314, r10299, MPFR_RNDN);
        mpfr_div(r10316, r10315, r10300, MPFR_RNDN);
        mpfr_div(r10317, r10288, r10300, MPFR_RNDN);
        if (mpfr_get_si(r10310, MPFR_RNDN)) { mpfr_set(r10318, r10316, MPFR_RNDN); } else { mpfr_set(r10318, r10317, MPFR_RNDN); };
        if (mpfr_get_si(r10296, MPFR_RNDN)) { mpfr_set(r10319, r10308, MPFR_RNDN); } else { mpfr_set(r10319, r10318, MPFR_RNDN); };
        if (mpfr_get_si(r10290, MPFR_RNDN)) { mpfr_set(r10320, r10294, MPFR_RNDN); } else { mpfr_set(r10320, r10319, MPFR_RNDN); };
        return mpfr_get_d(r10320, MPFR_RNDN);
}

static mpfr_t r10321, r10322, r10323, r10324, r10325, r10326, r10327, r10328, r10329, r10330, r10331, r10332, r10333, r10334, r10335, r10336, r10337, r10338, r10339, r10340, r10341, r10342, r10343, r10344, r10345, r10346, r10347, r10348, r10349, r10350, r10351, r10352, r10353, r10354, r10355;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10321);
        mpfr_init_set_str(r10322, "-3/2", 10, MPFR_RNDN);
        mpfr_init(r10323);
        mpfr_init_set_str(r10324, "-1.1215798919922517e+126", 10, MPFR_RNDN);
        mpfr_init(r10325);
        mpfr_init_set_str(r10326, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r10327);
        mpfr_init(r10328);
        mpfr_init(r10329);
        mpfr_init_set_str(r10330, "9.353121169670643e-306", 10, MPFR_RNDN);
        mpfr_init(r10331);
        mpfr_init_set_str(r10332, "1", 10, MPFR_RNDN);
        mpfr_init(r10333);
        mpfr_init_set_str(r10334, "3", 10, MPFR_RNDN);
        mpfr_init(r10335);
        mpfr_init(r10336);
        mpfr_init(r10337);
        mpfr_init(r10338);
        mpfr_init(r10339);
        mpfr_init(r10340);
        mpfr_init(r10341);
        mpfr_init(r10342);
        mpfr_init(r10343);
        mpfr_init_set_str(r10344, "2.586818699748715e+67", 10, MPFR_RNDN);
        mpfr_init(r10345);
        mpfr_init(r10346);
        mpfr_init(r10347);
        mpfr_init(r10348);
        mpfr_init(r10349);
        mpfr_init(r10350);
        mpfr_init(r10351);
        mpfr_init(r10352);
        mpfr_init(r10353);
        mpfr_init(r10354);
        mpfr_init(r10355);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10321, b, MPFR_RNDN);
        ;
        mpfr_div(r10323, r10321, r10322, MPFR_RNDN);
        ;
        mpfr_set_si(r10325, mpfr_cmp(r10323, r10324) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r10327, c, MPFR_RNDN);
        mpfr_div(r10328, r10327, r10321, MPFR_RNDN);
        mpfr_mul(r10329, r10326, r10328, MPFR_RNDN);
        ;
        mpfr_set_si(r10331, mpfr_cmp(r10323, r10330) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10333, r10321, MPFR_RNDN);
        ;
        mpfr_set_d(r10335, a, MPFR_RNDN);
        mpfr_mul(r10336, r10334, r10335, MPFR_RNDN);
        mpfr_neg(r10337, r10327, MPFR_RNDN);
        mpfr_mul(r10338, r10321, r10321, MPFR_RNDN);
        mpfr_fma(r10339, r10336, r10337, r10338, MPFR_RNDN);
        mpfr_sqrt(r10340, r10339, MPFR_RNDN);
        mpfr_sub(r10341, r10333, r10340, MPFR_RNDN);
        mpfr_div(r10342, r10332, r10341, MPFR_RNDN);
        mpfr_mul(r10343, r10327, r10342, MPFR_RNDN);
        ;
        mpfr_set_si(r10345, mpfr_cmp(r10323, r10344) <= 0, MPFR_RNDN);
        mpfr_mul(r10346, r10335, r10334, MPFR_RNDN);
        mpfr_fma(r10347, r10337, r10346, r10338, MPFR_RNDN);
        mpfr_sqrt(r10348, r10347, MPFR_RNDN);
        mpfr_sub(r10349, r10348, r10321, MPFR_RNDN);
        mpfr_div(r10350, r10349, r10334, MPFR_RNDN);
        mpfr_div(r10351, r10350, r10335, MPFR_RNDN);
        mpfr_div(r10352, r10323, r10335, MPFR_RNDN);
        if (mpfr_get_si(r10345, MPFR_RNDN)) { mpfr_set(r10353, r10351, MPFR_RNDN); } else { mpfr_set(r10353, r10352, MPFR_RNDN); };
        if (mpfr_get_si(r10331, MPFR_RNDN)) { mpfr_set(r10354, r10343, MPFR_RNDN); } else { mpfr_set(r10354, r10353, MPFR_RNDN); };
        if (mpfr_get_si(r10325, MPFR_RNDN)) { mpfr_set(r10355, r10329, MPFR_RNDN); } else { mpfr_set(r10355, r10354, MPFR_RNDN); };
        return mpfr_get_d(r10355, MPFR_RNDN);
}

