#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 r54151 = x;
        float r54152 = y;
        float r54153 = z;
        float r54154 = 3.0;
        float r54155 = r54153 * r54154;
        float r54156 = r54152 / r54155;
        float r54157 = r54151 - r54156;
        float r54158 = t;
        float r54159 = r54155 * r54152;
        float r54160 = r54158 / r54159;
        float r54161 = r54157 + r54160;
        return r54161;
}

double f_id(double x, double y, double z, double t) {
        double r54162 = x;
        double r54163 = y;
        double r54164 = z;
        double r54165 = 3.0;
        double r54166 = r54164 * r54165;
        double r54167 = r54163 / r54166;
        double r54168 = r54162 - r54167;
        double r54169 = t;
        double r54170 = r54166 * r54163;
        double r54171 = r54169 / r54170;
        double r54172 = r54168 + r54171;
        return r54172;
}


double f_of(float x, float y, float z, float t) {
        float r54173 = z;
        float r54174 = -8.643245025974954e-54;
        bool r54175 = r54173 <= r54174;
        float r54176 = x;
        float r54177 = y;
        float r54178 = r54177 / r54173;
        float r54179 = 3.0;
        float r54180 = r54178 / r54179;
        float r54181 = r54176 - r54180;
        float r54182 = t;
        float r54183 = r54173 * r54179;
        float r54184 = r54183 * r54177;
        float r54185 = r54182 / r54184;
        float r54186 = r54181 + r54185;
        float r54187 = 9.281941309943775e-28;
        bool r54188 = r54173 <= r54187;
        float r54189 = 0.3333333333333333;
        float r54190 = r54189 / r54173;
        float r54191 = r54182 / r54177;
        float r54192 = r54177 - r54191;
        float r54193 = r54190 * r54192;
        float r54194 = r54176 - r54193;
        float r54195 = r54189 * r54178;
        float r54196 = r54176 - r54195;
        float r54197 = r54196 + r54185;
        float r54198 = r54188 ? r54194 : r54197;
        float r54199 = r54175 ? r54186 : r54198;
        return r54199;
}

double f_od(double x, double y, double z, double t) {
        double r54200 = z;
        double r54201 = -8.643245025974954e-54;
        bool r54202 = r54200 <= r54201;
        double r54203 = x;
        double r54204 = y;
        double r54205 = r54204 / r54200;
        double r54206 = 3.0;
        double r54207 = r54205 / r54206;
        double r54208 = r54203 - r54207;
        double r54209 = t;
        double r54210 = r54200 * r54206;
        double r54211 = r54210 * r54204;
        double r54212 = r54209 / r54211;
        double r54213 = r54208 + r54212;
        double r54214 = 9.281941309943775e-28;
        bool r54215 = r54200 <= r54214;
        double r54216 = 0.3333333333333333;
        double r54217 = r54216 / r54200;
        double r54218 = r54209 / r54204;
        double r54219 = r54204 - r54218;
        double r54220 = r54217 * r54219;
        double r54221 = r54203 - r54220;
        double r54222 = r54216 * r54205;
        double r54223 = r54203 - r54222;
        double r54224 = r54223 + r54212;
        double r54225 = r54215 ? r54221 : r54224;
        double r54226 = r54202 ? r54213 : r54225;
        return r54226;
}

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 r54227, r54228, r54229, r54230, r54231, r54232, r54233, r54234, r54235, r54236, r54237;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54227);
        mpfr_init(r54228);
        mpfr_init(r54229);
        mpfr_init_set_str(r54230, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54231);
        mpfr_init(r54232);
        mpfr_init(r54233);
        mpfr_init(r54234);
        mpfr_init(r54235);
        mpfr_init(r54236);
        mpfr_init(r54237);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r54227, x, MPFR_RNDN);
        mpfr_set_d(r54228, y, MPFR_RNDN);
        mpfr_set_d(r54229, z, MPFR_RNDN);
        ;
        mpfr_mul(r54231, r54229, r54230, MPFR_RNDN);
        mpfr_div(r54232, r54228, r54231, MPFR_RNDN);
        mpfr_sub(r54233, r54227, r54232, MPFR_RNDN);
        mpfr_set_d(r54234, t, MPFR_RNDN);
        mpfr_mul(r54235, r54231, r54228, MPFR_RNDN);
        mpfr_div(r54236, r54234, r54235, MPFR_RNDN);
        mpfr_add(r54237, r54233, r54236, MPFR_RNDN);
        return mpfr_get_d(r54237, MPFR_RNDN);
}

static mpfr_t r54238, r54239, r54240, r54241, r54242, r54243, r54244, r54245, r54246, r54247, r54248, r54249, r54250, r54251, r54252, r54253, r54254, r54255, r54256, r54257, r54258, r54259, r54260, r54261, r54262, r54263, r54264;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54238);
        mpfr_init_set_str(r54239, "-8.643245025974954e-54", 10, MPFR_RNDN);
        mpfr_init(r54240);
        mpfr_init(r54241);
        mpfr_init(r54242);
        mpfr_init(r54243);
        mpfr_init_set_str(r54244, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54245);
        mpfr_init(r54246);
        mpfr_init(r54247);
        mpfr_init(r54248);
        mpfr_init(r54249);
        mpfr_init(r54250);
        mpfr_init(r54251);
        mpfr_init_set_str(r54252, "9.281941309943775e-28", 10, MPFR_RNDN);
        mpfr_init(r54253);
        mpfr_init_set_str(r54254, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54255);
        mpfr_init(r54256);
        mpfr_init(r54257);
        mpfr_init(r54258);
        mpfr_init(r54259);
        mpfr_init(r54260);
        mpfr_init(r54261);
        mpfr_init(r54262);
        mpfr_init(r54263);
        mpfr_init(r54264);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r54238, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54240, mpfr_cmp(r54238, r54239) <= 0, MPFR_RNDN);
        mpfr_set_d(r54241, x, MPFR_RNDN);
        mpfr_set_d(r54242, y, MPFR_RNDN);
        mpfr_div(r54243, r54242, r54238, MPFR_RNDN);
        ;
        mpfr_div(r54245, r54243, r54244, MPFR_RNDN);
        mpfr_sub(r54246, r54241, r54245, MPFR_RNDN);
        mpfr_set_d(r54247, t, MPFR_RNDN);
        mpfr_mul(r54248, r54238, r54244, MPFR_RNDN);
        mpfr_mul(r54249, r54248, r54242, MPFR_RNDN);
        mpfr_div(r54250, r54247, r54249, MPFR_RNDN);
        mpfr_add(r54251, r54246, r54250, MPFR_RNDN);
        ;
        mpfr_set_si(r54253, mpfr_cmp(r54238, r54252) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r54255, r54254, r54238, MPFR_RNDN);
        mpfr_div(r54256, r54247, r54242, MPFR_RNDN);
        mpfr_sub(r54257, r54242, r54256, MPFR_RNDN);
        mpfr_mul(r54258, r54255, r54257, MPFR_RNDN);
        mpfr_sub(r54259, r54241, r54258, MPFR_RNDN);
        mpfr_mul(r54260, r54254, r54243, MPFR_RNDN);
        mpfr_sub(r54261, r54241, r54260, MPFR_RNDN);
        mpfr_add(r54262, r54261, r54250, MPFR_RNDN);
        if (mpfr_get_si(r54253, MPFR_RNDN)) { mpfr_set(r54263, r54259, MPFR_RNDN); } else { mpfr_set(r54263, r54262, MPFR_RNDN); };
        if (mpfr_get_si(r54240, MPFR_RNDN)) { mpfr_set(r54264, r54251, MPFR_RNDN); } else { mpfr_set(r54264, r54263, MPFR_RNDN); };
        return mpfr_get_d(r54264, MPFR_RNDN);
}

static mpfr_t r54265, r54266, r54267, r54268, r54269, r54270, r54271, r54272, r54273, r54274, r54275, r54276, r54277, r54278, r54279, r54280, r54281, r54282, r54283, r54284, r54285, r54286, r54287, r54288, r54289, r54290, r54291;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54265);
        mpfr_init_set_str(r54266, "-8.643245025974954e-54", 10, MPFR_RNDN);
        mpfr_init(r54267);
        mpfr_init(r54268);
        mpfr_init(r54269);
        mpfr_init(r54270);
        mpfr_init_set_str(r54271, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54272);
        mpfr_init(r54273);
        mpfr_init(r54274);
        mpfr_init(r54275);
        mpfr_init(r54276);
        mpfr_init(r54277);
        mpfr_init(r54278);
        mpfr_init_set_str(r54279, "9.281941309943775e-28", 10, MPFR_RNDN);
        mpfr_init(r54280);
        mpfr_init_set_str(r54281, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54282);
        mpfr_init(r54283);
        mpfr_init(r54284);
        mpfr_init(r54285);
        mpfr_init(r54286);
        mpfr_init(r54287);
        mpfr_init(r54288);
        mpfr_init(r54289);
        mpfr_init(r54290);
        mpfr_init(r54291);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r54265, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54267, mpfr_cmp(r54265, r54266) <= 0, MPFR_RNDN);
        mpfr_set_d(r54268, x, MPFR_RNDN);
        mpfr_set_d(r54269, y, MPFR_RNDN);
        mpfr_div(r54270, r54269, r54265, MPFR_RNDN);
        ;
        mpfr_div(r54272, r54270, r54271, MPFR_RNDN);
        mpfr_sub(r54273, r54268, r54272, MPFR_RNDN);
        mpfr_set_d(r54274, t, MPFR_RNDN);
        mpfr_mul(r54275, r54265, r54271, MPFR_RNDN);
        mpfr_mul(r54276, r54275, r54269, MPFR_RNDN);
        mpfr_div(r54277, r54274, r54276, MPFR_RNDN);
        mpfr_add(r54278, r54273, r54277, MPFR_RNDN);
        ;
        mpfr_set_si(r54280, mpfr_cmp(r54265, r54279) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r54282, r54281, r54265, MPFR_RNDN);
        mpfr_div(r54283, r54274, r54269, MPFR_RNDN);
        mpfr_sub(r54284, r54269, r54283, MPFR_RNDN);
        mpfr_mul(r54285, r54282, r54284, MPFR_RNDN);
        mpfr_sub(r54286, r54268, r54285, MPFR_RNDN);
        mpfr_mul(r54287, r54281, r54270, MPFR_RNDN);
        mpfr_sub(r54288, r54268, r54287, MPFR_RNDN);
        mpfr_add(r54289, r54288, r54277, MPFR_RNDN);
        if (mpfr_get_si(r54280, MPFR_RNDN)) { mpfr_set(r54290, r54286, MPFR_RNDN); } else { mpfr_set(r54290, r54289, MPFR_RNDN); };
        if (mpfr_get_si(r54267, MPFR_RNDN)) { mpfr_set(r54291, r54278, MPFR_RNDN); } else { mpfr_set(r54291, r54290, MPFR_RNDN); };
        return mpfr_get_d(r54291, MPFR_RNDN);
}

