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

char *name = "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1, J";

double f_if(float x, float y, float z, float t, float a, float b, float c) {
        float r54086 = x;
        float r54087 = 9.0;
        float r54088 = r54086 * r54087;
        float r54089 = y;
        float r54090 = r54088 * r54089;
        float r54091 = z;
        float r54092 = 4.0;
        float r54093 = r54091 * r54092;
        float r54094 = t;
        float r54095 = r54093 * r54094;
        float r54096 = a;
        float r54097 = r54095 * r54096;
        float r54098 = r54090 - r54097;
        float r54099 = b;
        float r54100 = r54098 + r54099;
        float r54101 = c;
        float r54102 = r54091 * r54101;
        float r54103 = r54100 / r54102;
        return r54103;
}

double f_id(double x, double y, double z, double t, double a, double b, double c) {
        double r54104 = x;
        double r54105 = 9.0;
        double r54106 = r54104 * r54105;
        double r54107 = y;
        double r54108 = r54106 * r54107;
        double r54109 = z;
        double r54110 = 4.0;
        double r54111 = r54109 * r54110;
        double r54112 = t;
        double r54113 = r54111 * r54112;
        double r54114 = a;
        double r54115 = r54113 * r54114;
        double r54116 = r54108 - r54115;
        double r54117 = b;
        double r54118 = r54116 + r54117;
        double r54119 = c;
        double r54120 = r54109 * r54119;
        double r54121 = r54118 / r54120;
        return r54121;
}


double f_of(float x, float y, float z, float t, float a, float b, float c) {
        float r54122 = z;
        float r54123 = -1.3963869683562098e+52;
        bool r54124 = r54122 <= r54123;
        float r54125 = b;
        float r54126 = c;
        float r54127 = r54122 * r54126;
        float r54128 = r54125 / r54127;
        float r54129 = 9.0;
        float r54130 = y;
        float r54131 = r54130 / r54122;
        float r54132 = x;
        float r54133 = r54132 / r54126;
        float r54134 = r54131 * r54133;
        float r54135 = r54129 * r54134;
        float r54136 = r54128 + r54135;
        float r54137 = 4.0;
        float r54138 = a;
        float r54139 = t;
        float r54140 = r54126 / r54139;
        float r54141 = r54138 / r54140;
        float r54142 = r54137 * r54141;
        float r54143 = r54136 - r54142;
        float r54144 = 2.182646810625668e-18;
        bool r54145 = r54122 <= r54144;
        float r54146 = r54129 * r54130;
        float r54147 = r54132 * r54146;
        float r54148 = r54122 * r54137;
        float r54149 = r54148 * r54139;
        float r54150 = r54149 * r54138;
        float r54151 = r54147 - r54150;
        float r54152 = r54151 + r54125;
        float r54153 = r54152 / r54127;
        float r54154 = r54145 ? r54153 : r54143;
        float r54155 = r54124 ? r54143 : r54154;
        return r54155;
}

double f_od(double x, double y, double z, double t, double a, double b, double c) {
        double r54156 = z;
        double r54157 = -1.3963869683562098e+52;
        bool r54158 = r54156 <= r54157;
        double r54159 = b;
        double r54160 = c;
        double r54161 = r54156 * r54160;
        double r54162 = r54159 / r54161;
        double r54163 = 9.0;
        double r54164 = y;
        double r54165 = r54164 / r54156;
        double r54166 = x;
        double r54167 = r54166 / r54160;
        double r54168 = r54165 * r54167;
        double r54169 = r54163 * r54168;
        double r54170 = r54162 + r54169;
        double r54171 = 4.0;
        double r54172 = a;
        double r54173 = t;
        double r54174 = r54160 / r54173;
        double r54175 = r54172 / r54174;
        double r54176 = r54171 * r54175;
        double r54177 = r54170 - r54176;
        double r54178 = 2.182646810625668e-18;
        bool r54179 = r54156 <= r54178;
        double r54180 = r54163 * r54164;
        double r54181 = r54166 * r54180;
        double r54182 = r54156 * r54171;
        double r54183 = r54182 * r54173;
        double r54184 = r54183 * r54172;
        double r54185 = r54181 - r54184;
        double r54186 = r54185 + r54159;
        double r54187 = r54186 / r54161;
        double r54188 = r54179 ? r54187 : r54177;
        double r54189 = r54158 ? r54177 : r54188;
        return r54189;
}

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 r54190, r54191, r54192, r54193, r54194, r54195, r54196, r54197, r54198, r54199, r54200, r54201, r54202, r54203, r54204, r54205, r54206, r54207;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54190);
        mpfr_init_set_str(r54191, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54192);
        mpfr_init(r54193);
        mpfr_init(r54194);
        mpfr_init(r54195);
        mpfr_init_set_str(r54196, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54197);
        mpfr_init(r54198);
        mpfr_init(r54199);
        mpfr_init(r54200);
        mpfr_init(r54201);
        mpfr_init(r54202);
        mpfr_init(r54203);
        mpfr_init(r54204);
        mpfr_init(r54205);
        mpfr_init(r54206);
        mpfr_init(r54207);
}

double f_im(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54190, x, MPFR_RNDN);
        ;
        mpfr_mul(r54192, r54190, r54191, MPFR_RNDN);
        mpfr_set_d(r54193, y, MPFR_RNDN);
        mpfr_mul(r54194, r54192, r54193, MPFR_RNDN);
        mpfr_set_d(r54195, z, MPFR_RNDN);
        ;
        mpfr_mul(r54197, r54195, r54196, MPFR_RNDN);
        mpfr_set_d(r54198, t, MPFR_RNDN);
        mpfr_mul(r54199, r54197, r54198, MPFR_RNDN);
        mpfr_set_d(r54200, a, MPFR_RNDN);
        mpfr_mul(r54201, r54199, r54200, MPFR_RNDN);
        mpfr_sub(r54202, r54194, r54201, MPFR_RNDN);
        mpfr_set_d(r54203, b, MPFR_RNDN);
        mpfr_add(r54204, r54202, r54203, MPFR_RNDN);
        mpfr_set_d(r54205, c, MPFR_RNDN);
        mpfr_mul(r54206, r54195, r54205, MPFR_RNDN);
        mpfr_div(r54207, r54204, r54206, MPFR_RNDN);
        return mpfr_get_d(r54207, MPFR_RNDN);
}

static mpfr_t r54208, r54209, r54210, r54211, r54212, r54213, r54214, r54215, r54216, r54217, r54218, r54219, r54220, r54221, r54222, r54223, r54224, r54225, r54226, r54227, r54228, r54229, r54230, r54231, r54232, r54233, r54234, r54235, r54236, r54237, r54238, r54239, r54240, r54241;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54208);
        mpfr_init_set_str(r54209, "-1.3963869683562098e+52", 10, MPFR_RNDN);
        mpfr_init(r54210);
        mpfr_init(r54211);
        mpfr_init(r54212);
        mpfr_init(r54213);
        mpfr_init(r54214);
        mpfr_init_set_str(r54215, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54216);
        mpfr_init(r54217);
        mpfr_init(r54218);
        mpfr_init(r54219);
        mpfr_init(r54220);
        mpfr_init(r54221);
        mpfr_init(r54222);
        mpfr_init_set_str(r54223, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54224);
        mpfr_init(r54225);
        mpfr_init(r54226);
        mpfr_init(r54227);
        mpfr_init(r54228);
        mpfr_init(r54229);
        mpfr_init_set_str(r54230, "2.182646810625668e-18", 10, MPFR_RNDN);
        mpfr_init(r54231);
        mpfr_init(r54232);
        mpfr_init(r54233);
        mpfr_init(r54234);
        mpfr_init(r54235);
        mpfr_init(r54236);
        mpfr_init(r54237);
        mpfr_init(r54238);
        mpfr_init(r54239);
        mpfr_init(r54240);
        mpfr_init(r54241);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54208, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54210, mpfr_cmp(r54208, r54209) <= 0, MPFR_RNDN);
        mpfr_set_d(r54211, b, MPFR_RNDN);
        mpfr_set_d(r54212, c, MPFR_RNDN);
        mpfr_mul(r54213, r54208, r54212, MPFR_RNDN);
        mpfr_div(r54214, r54211, r54213, MPFR_RNDN);
        ;
        mpfr_set_d(r54216, y, MPFR_RNDN);
        mpfr_div(r54217, r54216, r54208, MPFR_RNDN);
        mpfr_set_d(r54218, x, MPFR_RNDN);
        mpfr_div(r54219, r54218, r54212, MPFR_RNDN);
        mpfr_mul(r54220, r54217, r54219, MPFR_RNDN);
        mpfr_mul(r54221, r54215, r54220, MPFR_RNDN);
        mpfr_add(r54222, r54214, r54221, MPFR_RNDN);
        ;
        mpfr_set_d(r54224, a, MPFR_RNDN);
        mpfr_set_d(r54225, t, MPFR_RNDN);
        mpfr_div(r54226, r54212, r54225, MPFR_RNDN);
        mpfr_div(r54227, r54224, r54226, MPFR_RNDN);
        mpfr_mul(r54228, r54223, r54227, MPFR_RNDN);
        mpfr_sub(r54229, r54222, r54228, MPFR_RNDN);
        ;
        mpfr_set_si(r54231, mpfr_cmp(r54208, r54230) <= 0, MPFR_RNDN);
        mpfr_mul(r54232, r54215, r54216, MPFR_RNDN);
        mpfr_mul(r54233, r54218, r54232, MPFR_RNDN);
        mpfr_mul(r54234, r54208, r54223, MPFR_RNDN);
        mpfr_mul(r54235, r54234, r54225, MPFR_RNDN);
        mpfr_mul(r54236, r54235, r54224, MPFR_RNDN);
        mpfr_sub(r54237, r54233, r54236, MPFR_RNDN);
        mpfr_add(r54238, r54237, r54211, MPFR_RNDN);
        mpfr_div(r54239, r54238, r54213, MPFR_RNDN);
        if (mpfr_get_si(r54231, MPFR_RNDN)) { mpfr_set(r54240, r54239, MPFR_RNDN); } else { mpfr_set(r54240, r54229, MPFR_RNDN); };
        if (mpfr_get_si(r54210, MPFR_RNDN)) { mpfr_set(r54241, r54229, MPFR_RNDN); } else { mpfr_set(r54241, r54240, MPFR_RNDN); };
        return mpfr_get_d(r54241, MPFR_RNDN);
}

static mpfr_t r54242, r54243, r54244, r54245, r54246, r54247, r54248, r54249, r54250, r54251, r54252, r54253, r54254, r54255, r54256, r54257, r54258, r54259, r54260, r54261, r54262, r54263, r54264, r54265, r54266, r54267, r54268, r54269, r54270, r54271, r54272, r54273, r54274, r54275;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54242);
        mpfr_init_set_str(r54243, "-1.3963869683562098e+52", 10, MPFR_RNDN);
        mpfr_init(r54244);
        mpfr_init(r54245);
        mpfr_init(r54246);
        mpfr_init(r54247);
        mpfr_init(r54248);
        mpfr_init_set_str(r54249, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54250);
        mpfr_init(r54251);
        mpfr_init(r54252);
        mpfr_init(r54253);
        mpfr_init(r54254);
        mpfr_init(r54255);
        mpfr_init(r54256);
        mpfr_init_set_str(r54257, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54258);
        mpfr_init(r54259);
        mpfr_init(r54260);
        mpfr_init(r54261);
        mpfr_init(r54262);
        mpfr_init(r54263);
        mpfr_init_set_str(r54264, "2.182646810625668e-18", 10, MPFR_RNDN);
        mpfr_init(r54265);
        mpfr_init(r54266);
        mpfr_init(r54267);
        mpfr_init(r54268);
        mpfr_init(r54269);
        mpfr_init(r54270);
        mpfr_init(r54271);
        mpfr_init(r54272);
        mpfr_init(r54273);
        mpfr_init(r54274);
        mpfr_init(r54275);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54242, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54244, mpfr_cmp(r54242, r54243) <= 0, MPFR_RNDN);
        mpfr_set_d(r54245, b, MPFR_RNDN);
        mpfr_set_d(r54246, c, MPFR_RNDN);
        mpfr_mul(r54247, r54242, r54246, MPFR_RNDN);
        mpfr_div(r54248, r54245, r54247, MPFR_RNDN);
        ;
        mpfr_set_d(r54250, y, MPFR_RNDN);
        mpfr_div(r54251, r54250, r54242, MPFR_RNDN);
        mpfr_set_d(r54252, x, MPFR_RNDN);
        mpfr_div(r54253, r54252, r54246, MPFR_RNDN);
        mpfr_mul(r54254, r54251, r54253, MPFR_RNDN);
        mpfr_mul(r54255, r54249, r54254, MPFR_RNDN);
        mpfr_add(r54256, r54248, r54255, MPFR_RNDN);
        ;
        mpfr_set_d(r54258, a, MPFR_RNDN);
        mpfr_set_d(r54259, t, MPFR_RNDN);
        mpfr_div(r54260, r54246, r54259, MPFR_RNDN);
        mpfr_div(r54261, r54258, r54260, MPFR_RNDN);
        mpfr_mul(r54262, r54257, r54261, MPFR_RNDN);
        mpfr_sub(r54263, r54256, r54262, MPFR_RNDN);
        ;
        mpfr_set_si(r54265, mpfr_cmp(r54242, r54264) <= 0, MPFR_RNDN);
        mpfr_mul(r54266, r54249, r54250, MPFR_RNDN);
        mpfr_mul(r54267, r54252, r54266, MPFR_RNDN);
        mpfr_mul(r54268, r54242, r54257, MPFR_RNDN);
        mpfr_mul(r54269, r54268, r54259, MPFR_RNDN);
        mpfr_mul(r54270, r54269, r54258, MPFR_RNDN);
        mpfr_sub(r54271, r54267, r54270, MPFR_RNDN);
        mpfr_add(r54272, r54271, r54245, MPFR_RNDN);
        mpfr_div(r54273, r54272, r54247, MPFR_RNDN);
        if (mpfr_get_si(r54265, MPFR_RNDN)) { mpfr_set(r54274, r54273, MPFR_RNDN); } else { mpfr_set(r54274, r54263, MPFR_RNDN); };
        if (mpfr_get_si(r54244, MPFR_RNDN)) { mpfr_set(r54275, r54263, MPFR_RNDN); } else { mpfr_set(r54275, r54274, MPFR_RNDN); };
        return mpfr_get_d(r54275, MPFR_RNDN);
}

