#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 r10104 = b;
        float r10105 = -r10104;
        float r10106 = r10104 * r10104;
        float r10107 = 3;
        float r10108 = a;
        float r10109 = r10107 * r10108;
        float r10110 = c;
        float r10111 = r10109 * r10110;
        float r10112 = r10106 - r10111;
        float r10113 = sqrt(r10112);
        float r10114 = r10105 + r10113;
        float r10115 = r10114 / r10109;
        return r10115;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r10116 = b;
        double r10117 = -r10116;
        double r10118 = r10116 * r10116;
        double r10119 = 3;
        double r10120 = a;
        double r10121 = r10119 * r10120;
        double r10122 = c;
        double r10123 = r10121 * r10122;
        double r10124 = r10118 - r10123;
        double r10125 = sqrt(r10124);
        double r10126 = r10117 + r10125;
        double r10127 = r10126 / r10121;
        return r10127;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r10128 = b;
        float r10129 = -1.9758144017797662e+81;
        bool r10130 = r10128 <= r10129;
        float r10131 = -3/2;
        float r10132 = a;
        float r10133 = r10131 * r10132;
        float r10134 = r10128 / r10133;
        float r10135 = -1.1200099492796014e-308;
        bool r10136 = r10128 <= r10135;
        float r10137 = r10128 * r10128;
        float r10138 = 3;
        float r10139 = c;
        float r10140 = r10138 * r10139;
        float r10141 = r10140 * r10132;
        float r10142 = r10137 - r10141;
        float r10143 = sqrt(r10142);
        float r10144 = r10143 - r10128;
        float r10145 = r10144 / r10138;
        float r10146 = r10145 / r10132;
        float r10147 = 2.0644225467610084e+18;
        bool r10148 = r10128 <= r10147;
        float r10149 = r10138 / r10138;
        float r10150 = -r10128;
        float r10151 = r10139 * r10138;
        float r10152 = r10151 * r10132;
        float r10153 = r10137 - r10152;
        float r10154 = sqrt(r10153);
        float r10155 = r10150 - r10154;
        float r10156 = r10139 / r10155;
        float r10157 = r10149 * r10156;
        float r10158 = 3/2;
        float r10159 = r10139 * r10158;
        float r10160 = r10132 / r10128;
        float r10161 = r10159 * r10160;
        float r10162 = 2;
        float r10163 = r10162 * r10128;
        float r10164 = r10161 - r10163;
        float r10165 = r10139 / r10164;
        float r10166 = r10148 ? r10157 : r10165;
        float r10167 = r10136 ? r10146 : r10166;
        float r10168 = r10130 ? r10134 : r10167;
        return r10168;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r10169 = b;
        double r10170 = -1.9758144017797662e+81;
        bool r10171 = r10169 <= r10170;
        double r10172 = -3/2;
        double r10173 = a;
        double r10174 = r10172 * r10173;
        double r10175 = r10169 / r10174;
        double r10176 = -1.1200099492796014e-308;
        bool r10177 = r10169 <= r10176;
        double r10178 = r10169 * r10169;
        double r10179 = 3;
        double r10180 = c;
        double r10181 = r10179 * r10180;
        double r10182 = r10181 * r10173;
        double r10183 = r10178 - r10182;
        double r10184 = sqrt(r10183);
        double r10185 = r10184 - r10169;
        double r10186 = r10185 / r10179;
        double r10187 = r10186 / r10173;
        double r10188 = 2.0644225467610084e+18;
        bool r10189 = r10169 <= r10188;
        double r10190 = r10179 / r10179;
        double r10191 = -r10169;
        double r10192 = r10180 * r10179;
        double r10193 = r10192 * r10173;
        double r10194 = r10178 - r10193;
        double r10195 = sqrt(r10194);
        double r10196 = r10191 - r10195;
        double r10197 = r10180 / r10196;
        double r10198 = r10190 * r10197;
        double r10199 = 3/2;
        double r10200 = r10180 * r10199;
        double r10201 = r10173 / r10169;
        double r10202 = r10200 * r10201;
        double r10203 = 2;
        double r10204 = r10203 * r10169;
        double r10205 = r10202 - r10204;
        double r10206 = r10180 / r10205;
        double r10207 = r10189 ? r10198 : r10206;
        double r10208 = r10177 ? r10187 : r10207;
        double r10209 = r10171 ? r10175 : r10208;
        return r10209;
}

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 r10210, r10211, r10212, r10213, r10214, r10215, r10216, r10217, r10218, r10219, r10220, r10221;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10210);
        mpfr_init(r10211);
        mpfr_init(r10212);
        mpfr_init_set_str(r10213, "3", 10, MPFR_RNDN);
        mpfr_init(r10214);
        mpfr_init(r10215);
        mpfr_init(r10216);
        mpfr_init(r10217);
        mpfr_init(r10218);
        mpfr_init(r10219);
        mpfr_init(r10220);
        mpfr_init(r10221);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10210, b, MPFR_RNDN);
        mpfr_neg(r10211, r10210, MPFR_RNDN);
        mpfr_mul(r10212, r10210, r10210, MPFR_RNDN);
        ;
        mpfr_set_d(r10214, a, MPFR_RNDN);
        mpfr_mul(r10215, r10213, r10214, MPFR_RNDN);
        mpfr_set_d(r10216, c, MPFR_RNDN);
        mpfr_mul(r10217, r10215, r10216, MPFR_RNDN);
        mpfr_sub(r10218, r10212, r10217, MPFR_RNDN);
        mpfr_sqrt(r10219, r10218, MPFR_RNDN);
        mpfr_add(r10220, r10211, r10219, MPFR_RNDN);
        mpfr_div(r10221, r10220, r10215, MPFR_RNDN);
        return mpfr_get_d(r10221, MPFR_RNDN);
}

static mpfr_t r10222, r10223, r10224, r10225, r10226, r10227, r10228, r10229, r10230, r10231, r10232, r10233, r10234, r10235, r10236, r10237, r10238, r10239, r10240, r10241, r10242, r10243, r10244, r10245, r10246, r10247, r10248, r10249, r10250, r10251, r10252, r10253, r10254, r10255, r10256, r10257, r10258, r10259, r10260, r10261, r10262;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10222);
        mpfr_init_set_str(r10223, "-1.9758144017797662e+81", 10, MPFR_RNDN);
        mpfr_init(r10224);
        mpfr_init_set_str(r10225, "-3/2", 10, MPFR_RNDN);
        mpfr_init(r10226);
        mpfr_init(r10227);
        mpfr_init(r10228);
        mpfr_init_set_str(r10229, "-1.1200099492796014e-308", 10, MPFR_RNDN);
        mpfr_init(r10230);
        mpfr_init(r10231);
        mpfr_init_set_str(r10232, "3", 10, MPFR_RNDN);
        mpfr_init(r10233);
        mpfr_init(r10234);
        mpfr_init(r10235);
        mpfr_init(r10236);
        mpfr_init(r10237);
        mpfr_init(r10238);
        mpfr_init(r10239);
        mpfr_init(r10240);
        mpfr_init_set_str(r10241, "2.0644225467610084e+18", 10, MPFR_RNDN);
        mpfr_init(r10242);
        mpfr_init(r10243);
        mpfr_init(r10244);
        mpfr_init(r10245);
        mpfr_init(r10246);
        mpfr_init(r10247);
        mpfr_init(r10248);
        mpfr_init(r10249);
        mpfr_init(r10250);
        mpfr_init(r10251);
        mpfr_init_set_str(r10252, "3/2", 10, MPFR_RNDN);
        mpfr_init(r10253);
        mpfr_init(r10254);
        mpfr_init(r10255);
        mpfr_init_set_str(r10256, "2", 10, MPFR_RNDN);
        mpfr_init(r10257);
        mpfr_init(r10258);
        mpfr_init(r10259);
        mpfr_init(r10260);
        mpfr_init(r10261);
        mpfr_init(r10262);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10222, b, MPFR_RNDN);
        ;
        mpfr_set_si(r10224, mpfr_cmp(r10222, r10223) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r10226, a, MPFR_RNDN);
        mpfr_mul(r10227, r10225, r10226, MPFR_RNDN);
        mpfr_div(r10228, r10222, r10227, MPFR_RNDN);
        ;
        mpfr_set_si(r10230, mpfr_cmp(r10222, r10229) <= 0, MPFR_RNDN);
        mpfr_mul(r10231, r10222, r10222, MPFR_RNDN);
        ;
        mpfr_set_d(r10233, c, MPFR_RNDN);
        mpfr_mul(r10234, r10232, r10233, MPFR_RNDN);
        mpfr_mul(r10235, r10234, r10226, MPFR_RNDN);
        mpfr_sub(r10236, r10231, r10235, MPFR_RNDN);
        mpfr_sqrt(r10237, r10236, MPFR_RNDN);
        mpfr_sub(r10238, r10237, r10222, MPFR_RNDN);
        mpfr_div(r10239, r10238, r10232, MPFR_RNDN);
        mpfr_div(r10240, r10239, r10226, MPFR_RNDN);
        ;
        mpfr_set_si(r10242, mpfr_cmp(r10222, r10241) <= 0, MPFR_RNDN);
        mpfr_div(r10243, r10232, r10232, MPFR_RNDN);
        mpfr_neg(r10244, r10222, MPFR_RNDN);
        mpfr_mul(r10245, r10233, r10232, MPFR_RNDN);
        mpfr_mul(r10246, r10245, r10226, MPFR_RNDN);
        mpfr_sub(r10247, r10231, r10246, MPFR_RNDN);
        mpfr_sqrt(r10248, r10247, MPFR_RNDN);
        mpfr_sub(r10249, r10244, r10248, MPFR_RNDN);
        mpfr_div(r10250, r10233, r10249, MPFR_RNDN);
        mpfr_mul(r10251, r10243, r10250, MPFR_RNDN);
        ;
        mpfr_mul(r10253, r10233, r10252, MPFR_RNDN);
        mpfr_div(r10254, r10226, r10222, MPFR_RNDN);
        mpfr_mul(r10255, r10253, r10254, MPFR_RNDN);
        ;
        mpfr_mul(r10257, r10256, r10222, MPFR_RNDN);
        mpfr_sub(r10258, r10255, r10257, MPFR_RNDN);
        mpfr_div(r10259, r10233, r10258, MPFR_RNDN);
        if (mpfr_get_si(r10242, MPFR_RNDN)) { mpfr_set(r10260, r10251, MPFR_RNDN); } else { mpfr_set(r10260, r10259, MPFR_RNDN); };
        if (mpfr_get_si(r10230, MPFR_RNDN)) { mpfr_set(r10261, r10240, MPFR_RNDN); } else { mpfr_set(r10261, r10260, MPFR_RNDN); };
        if (mpfr_get_si(r10224, MPFR_RNDN)) { mpfr_set(r10262, r10228, MPFR_RNDN); } else { mpfr_set(r10262, r10261, MPFR_RNDN); };
        return mpfr_get_d(r10262, MPFR_RNDN);
}

static mpfr_t r10263, r10264, r10265, r10266, r10267, r10268, r10269, r10270, r10271, r10272, r10273, r10274, r10275, r10276, r10277, r10278, r10279, r10280, r10281, r10282, r10283, r10284, r10285, r10286, r10287, r10288, r10289, r10290, r10291, r10292, r10293, r10294, r10295, r10296, r10297, r10298, r10299, r10300, r10301, r10302, r10303;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10263);
        mpfr_init_set_str(r10264, "-1.9758144017797662e+81", 10, MPFR_RNDN);
        mpfr_init(r10265);
        mpfr_init_set_str(r10266, "-3/2", 10, MPFR_RNDN);
        mpfr_init(r10267);
        mpfr_init(r10268);
        mpfr_init(r10269);
        mpfr_init_set_str(r10270, "-1.1200099492796014e-308", 10, MPFR_RNDN);
        mpfr_init(r10271);
        mpfr_init(r10272);
        mpfr_init_set_str(r10273, "3", 10, MPFR_RNDN);
        mpfr_init(r10274);
        mpfr_init(r10275);
        mpfr_init(r10276);
        mpfr_init(r10277);
        mpfr_init(r10278);
        mpfr_init(r10279);
        mpfr_init(r10280);
        mpfr_init(r10281);
        mpfr_init_set_str(r10282, "2.0644225467610084e+18", 10, MPFR_RNDN);
        mpfr_init(r10283);
        mpfr_init(r10284);
        mpfr_init(r10285);
        mpfr_init(r10286);
        mpfr_init(r10287);
        mpfr_init(r10288);
        mpfr_init(r10289);
        mpfr_init(r10290);
        mpfr_init(r10291);
        mpfr_init(r10292);
        mpfr_init_set_str(r10293, "3/2", 10, MPFR_RNDN);
        mpfr_init(r10294);
        mpfr_init(r10295);
        mpfr_init(r10296);
        mpfr_init_set_str(r10297, "2", 10, MPFR_RNDN);
        mpfr_init(r10298);
        mpfr_init(r10299);
        mpfr_init(r10300);
        mpfr_init(r10301);
        mpfr_init(r10302);
        mpfr_init(r10303);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r10263, b, MPFR_RNDN);
        ;
        mpfr_set_si(r10265, mpfr_cmp(r10263, r10264) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r10267, a, MPFR_RNDN);
        mpfr_mul(r10268, r10266, r10267, MPFR_RNDN);
        mpfr_div(r10269, r10263, r10268, MPFR_RNDN);
        ;
        mpfr_set_si(r10271, mpfr_cmp(r10263, r10270) <= 0, MPFR_RNDN);
        mpfr_mul(r10272, r10263, r10263, MPFR_RNDN);
        ;
        mpfr_set_d(r10274, c, MPFR_RNDN);
        mpfr_mul(r10275, r10273, r10274, MPFR_RNDN);
        mpfr_mul(r10276, r10275, r10267, MPFR_RNDN);
        mpfr_sub(r10277, r10272, r10276, MPFR_RNDN);
        mpfr_sqrt(r10278, r10277, MPFR_RNDN);
        mpfr_sub(r10279, r10278, r10263, MPFR_RNDN);
        mpfr_div(r10280, r10279, r10273, MPFR_RNDN);
        mpfr_div(r10281, r10280, r10267, MPFR_RNDN);
        ;
        mpfr_set_si(r10283, mpfr_cmp(r10263, r10282) <= 0, MPFR_RNDN);
        mpfr_div(r10284, r10273, r10273, MPFR_RNDN);
        mpfr_neg(r10285, r10263, MPFR_RNDN);
        mpfr_mul(r10286, r10274, r10273, MPFR_RNDN);
        mpfr_mul(r10287, r10286, r10267, MPFR_RNDN);
        mpfr_sub(r10288, r10272, r10287, MPFR_RNDN);
        mpfr_sqrt(r10289, r10288, MPFR_RNDN);
        mpfr_sub(r10290, r10285, r10289, MPFR_RNDN);
        mpfr_div(r10291, r10274, r10290, MPFR_RNDN);
        mpfr_mul(r10292, r10284, r10291, MPFR_RNDN);
        ;
        mpfr_mul(r10294, r10274, r10293, MPFR_RNDN);
        mpfr_div(r10295, r10267, r10263, MPFR_RNDN);
        mpfr_mul(r10296, r10294, r10295, MPFR_RNDN);
        ;
        mpfr_mul(r10298, r10297, r10263, MPFR_RNDN);
        mpfr_sub(r10299, r10296, r10298, MPFR_RNDN);
        mpfr_div(r10300, r10274, r10299, MPFR_RNDN);
        if (mpfr_get_si(r10283, MPFR_RNDN)) { mpfr_set(r10301, r10292, MPFR_RNDN); } else { mpfr_set(r10301, r10300, MPFR_RNDN); };
        if (mpfr_get_si(r10271, MPFR_RNDN)) { mpfr_set(r10302, r10281, MPFR_RNDN); } else { mpfr_set(r10302, r10301, MPFR_RNDN); };
        if (mpfr_get_si(r10265, MPFR_RNDN)) { mpfr_set(r10303, r10269, MPFR_RNDN); } else { mpfr_set(r10303, r10302, MPFR_RNDN); };
        return mpfr_get_d(r10303, MPFR_RNDN);
}

