#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, H";

double f_if(float x, float y, float z, float t) {
        float r54171 = x;
        float r54172 = y;
        float r54173 = z;
        float r54174 = 3.0;
        float r54175 = r54173 * r54174;
        float r54176 = r54172 / r54175;
        float r54177 = r54171 - r54176;
        float r54178 = t;
        float r54179 = r54175 * r54172;
        float r54180 = r54178 / r54179;
        float r54181 = r54177 + r54180;
        return r54181;
}

double f_id(double x, double y, double z, double t) {
        double r54182 = x;
        double r54183 = y;
        double r54184 = z;
        double r54185 = 3.0;
        double r54186 = r54184 * r54185;
        double r54187 = r54183 / r54186;
        double r54188 = r54182 - r54187;
        double r54189 = t;
        double r54190 = r54186 * r54183;
        double r54191 = r54189 / r54190;
        double r54192 = r54188 + r54191;
        return r54192;
}


double f_of(float x, float y, float z, float t) {
        float r54193 = z;
        float r54194 = -1.2018128981968222e-61;
        bool r54195 = r54193 <= r54194;
        float r54196 = x;
        float r54197 = y;
        float r54198 = r54197 / r54193;
        float r54199 = 3.0;
        float r54200 = r54198 / r54199;
        float r54201 = r54196 - r54200;
        float r54202 = t;
        float r54203 = r54193 * r54199;
        float r54204 = r54203 * r54197;
        float r54205 = r54202 / r54204;
        float r54206 = r54201 + r54205;
        float r54207 = 1.0607797663860536e-27;
        bool r54208 = r54193 <= r54207;
        float r54209 = 0.3333333333333333;
        float r54210 = r54209 / r54193;
        float r54211 = r54202 / r54197;
        float r54212 = r54197 - r54211;
        float r54213 = r54210 * r54212;
        float r54214 = r54196 - r54213;
        float r54215 = r54209 * r54198;
        float r54216 = r54196 - r54215;
        float r54217 = r54216 + r54205;
        float r54218 = r54208 ? r54214 : r54217;
        float r54219 = r54195 ? r54206 : r54218;
        return r54219;
}

double f_od(double x, double y, double z, double t) {
        double r54220 = z;
        double r54221 = -1.2018128981968222e-61;
        bool r54222 = r54220 <= r54221;
        double r54223 = x;
        double r54224 = y;
        double r54225 = r54224 / r54220;
        double r54226 = 3.0;
        double r54227 = r54225 / r54226;
        double r54228 = r54223 - r54227;
        double r54229 = t;
        double r54230 = r54220 * r54226;
        double r54231 = r54230 * r54224;
        double r54232 = r54229 / r54231;
        double r54233 = r54228 + r54232;
        double r54234 = 1.0607797663860536e-27;
        bool r54235 = r54220 <= r54234;
        double r54236 = 0.3333333333333333;
        double r54237 = r54236 / r54220;
        double r54238 = r54229 / r54224;
        double r54239 = r54224 - r54238;
        double r54240 = r54237 * r54239;
        double r54241 = r54223 - r54240;
        double r54242 = r54236 * r54225;
        double r54243 = r54223 - r54242;
        double r54244 = r54243 + r54232;
        double r54245 = r54235 ? r54241 : r54244;
        double r54246 = r54222 ? r54233 : r54245;
        return r54246;
}

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 r54247, r54248, r54249, r54250, r54251, r54252, r54253, r54254, r54255, r54256, r54257;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54247);
        mpfr_init(r54248);
        mpfr_init(r54249);
        mpfr_init_set_str(r54250, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54251);
        mpfr_init(r54252);
        mpfr_init(r54253);
        mpfr_init(r54254);
        mpfr_init(r54255);
        mpfr_init(r54256);
        mpfr_init(r54257);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r54247, x, MPFR_RNDN);
        mpfr_set_d(r54248, y, MPFR_RNDN);
        mpfr_set_d(r54249, z, MPFR_RNDN);
        ;
        mpfr_mul(r54251, r54249, r54250, MPFR_RNDN);
        mpfr_div(r54252, r54248, r54251, MPFR_RNDN);
        mpfr_sub(r54253, r54247, r54252, MPFR_RNDN);
        mpfr_set_d(r54254, t, MPFR_RNDN);
        mpfr_mul(r54255, r54251, r54248, MPFR_RNDN);
        mpfr_div(r54256, r54254, r54255, MPFR_RNDN);
        mpfr_add(r54257, r54253, r54256, MPFR_RNDN);
        return mpfr_get_d(r54257, MPFR_RNDN);
}

static mpfr_t r54258, r54259, r54260, r54261, r54262, r54263, r54264, r54265, r54266, r54267, r54268, r54269, r54270, r54271, r54272, r54273, r54274, r54275, r54276, r54277, r54278, r54279, r54280, r54281, r54282, r54283, r54284;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54258);
        mpfr_init_set_str(r54259, "-1.2018128981968222e-61", 10, MPFR_RNDN);
        mpfr_init(r54260);
        mpfr_init(r54261);
        mpfr_init(r54262);
        mpfr_init(r54263);
        mpfr_init_set_str(r54264, "3.0", 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_set_str(r54272, "1.0607797663860536e-27", 10, MPFR_RNDN);
        mpfr_init(r54273);
        mpfr_init_set_str(r54274, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54275);
        mpfr_init(r54276);
        mpfr_init(r54277);
        mpfr_init(r54278);
        mpfr_init(r54279);
        mpfr_init(r54280);
        mpfr_init(r54281);
        mpfr_init(r54282);
        mpfr_init(r54283);
        mpfr_init(r54284);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r54258, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54260, mpfr_cmp(r54258, r54259) <= 0, MPFR_RNDN);
        mpfr_set_d(r54261, x, MPFR_RNDN);
        mpfr_set_d(r54262, y, MPFR_RNDN);
        mpfr_div(r54263, r54262, r54258, MPFR_RNDN);
        ;
        mpfr_div(r54265, r54263, r54264, MPFR_RNDN);
        mpfr_sub(r54266, r54261, r54265, MPFR_RNDN);
        mpfr_set_d(r54267, t, MPFR_RNDN);
        mpfr_mul(r54268, r54258, r54264, MPFR_RNDN);
        mpfr_mul(r54269, r54268, r54262, MPFR_RNDN);
        mpfr_div(r54270, r54267, r54269, MPFR_RNDN);
        mpfr_add(r54271, r54266, r54270, MPFR_RNDN);
        ;
        mpfr_set_si(r54273, mpfr_cmp(r54258, r54272) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r54275, r54274, r54258, MPFR_RNDN);
        mpfr_div(r54276, r54267, r54262, MPFR_RNDN);
        mpfr_sub(r54277, r54262, r54276, MPFR_RNDN);
        mpfr_mul(r54278, r54275, r54277, MPFR_RNDN);
        mpfr_sub(r54279, r54261, r54278, MPFR_RNDN);
        mpfr_mul(r54280, r54274, r54263, MPFR_RNDN);
        mpfr_sub(r54281, r54261, r54280, MPFR_RNDN);
        mpfr_add(r54282, r54281, r54270, MPFR_RNDN);
        if (mpfr_get_si(r54273, MPFR_RNDN)) { mpfr_set(r54283, r54279, MPFR_RNDN); } else { mpfr_set(r54283, r54282, MPFR_RNDN); };
        if (mpfr_get_si(r54260, MPFR_RNDN)) { mpfr_set(r54284, r54271, MPFR_RNDN); } else { mpfr_set(r54284, r54283, MPFR_RNDN); };
        return mpfr_get_d(r54284, MPFR_RNDN);
}

static mpfr_t r54285, r54286, r54287, r54288, r54289, r54290, r54291, r54292, r54293, r54294, r54295, r54296, r54297, r54298, r54299, r54300, r54301, r54302, r54303, r54304, r54305, r54306, r54307, r54308, r54309, r54310, r54311;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54285);
        mpfr_init_set_str(r54286, "-1.2018128981968222e-61", 10, MPFR_RNDN);
        mpfr_init(r54287);
        mpfr_init(r54288);
        mpfr_init(r54289);
        mpfr_init(r54290);
        mpfr_init_set_str(r54291, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54292);
        mpfr_init(r54293);
        mpfr_init(r54294);
        mpfr_init(r54295);
        mpfr_init(r54296);
        mpfr_init(r54297);
        mpfr_init(r54298);
        mpfr_init_set_str(r54299, "1.0607797663860536e-27", 10, MPFR_RNDN);
        mpfr_init(r54300);
        mpfr_init_set_str(r54301, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54302);
        mpfr_init(r54303);
        mpfr_init(r54304);
        mpfr_init(r54305);
        mpfr_init(r54306);
        mpfr_init(r54307);
        mpfr_init(r54308);
        mpfr_init(r54309);
        mpfr_init(r54310);
        mpfr_init(r54311);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r54285, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54287, mpfr_cmp(r54285, r54286) <= 0, MPFR_RNDN);
        mpfr_set_d(r54288, x, MPFR_RNDN);
        mpfr_set_d(r54289, y, MPFR_RNDN);
        mpfr_div(r54290, r54289, r54285, MPFR_RNDN);
        ;
        mpfr_div(r54292, r54290, r54291, MPFR_RNDN);
        mpfr_sub(r54293, r54288, r54292, MPFR_RNDN);
        mpfr_set_d(r54294, t, MPFR_RNDN);
        mpfr_mul(r54295, r54285, r54291, MPFR_RNDN);
        mpfr_mul(r54296, r54295, r54289, MPFR_RNDN);
        mpfr_div(r54297, r54294, r54296, MPFR_RNDN);
        mpfr_add(r54298, r54293, r54297, MPFR_RNDN);
        ;
        mpfr_set_si(r54300, mpfr_cmp(r54285, r54299) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r54302, r54301, r54285, MPFR_RNDN);
        mpfr_div(r54303, r54294, r54289, MPFR_RNDN);
        mpfr_sub(r54304, r54289, r54303, MPFR_RNDN);
        mpfr_mul(r54305, r54302, r54304, MPFR_RNDN);
        mpfr_sub(r54306, r54288, r54305, MPFR_RNDN);
        mpfr_mul(r54307, r54301, r54290, MPFR_RNDN);
        mpfr_sub(r54308, r54288, r54307, MPFR_RNDN);
        mpfr_add(r54309, r54308, r54297, MPFR_RNDN);
        if (mpfr_get_si(r54300, MPFR_RNDN)) { mpfr_set(r54310, r54306, MPFR_RNDN); } else { mpfr_set(r54310, r54309, MPFR_RNDN); };
        if (mpfr_get_si(r54287, MPFR_RNDN)) { mpfr_set(r54311, r54298, MPFR_RNDN); } else { mpfr_set(r54311, r54310, MPFR_RNDN); };
        return mpfr_get_d(r54311, MPFR_RNDN);
}

