#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 r54197 = x;
        float r54198 = y;
        float r54199 = z;
        float r54200 = 3.0;
        float r54201 = r54199 * r54200;
        float r54202 = r54198 / r54201;
        float r54203 = r54197 - r54202;
        float r54204 = t;
        float r54205 = r54201 * r54198;
        float r54206 = r54204 / r54205;
        float r54207 = r54203 + r54206;
        return r54207;
}

double f_id(double x, double y, double z, double t) {
        double r54208 = x;
        double r54209 = y;
        double r54210 = z;
        double r54211 = 3.0;
        double r54212 = r54210 * r54211;
        double r54213 = r54209 / r54212;
        double r54214 = r54208 - r54213;
        double r54215 = t;
        double r54216 = r54212 * r54209;
        double r54217 = r54215 / r54216;
        double r54218 = r54214 + r54217;
        return r54218;
}


double f_of(float x, float y, float z, float t) {
        float r54219 = z;
        float r54220 = -8.643245025974954e-54;
        bool r54221 = r54219 <= r54220;
        float r54222 = x;
        float r54223 = y;
        float r54224 = 3.0;
        float r54225 = r54219 * r54224;
        float r54226 = r54223 / r54225;
        float r54227 = r54222 - r54226;
        float r54228 = 0.3333333333333333;
        float r54229 = t;
        float r54230 = r54219 * r54223;
        float r54231 = r54229 / r54230;
        float r54232 = r54228 * r54231;
        float r54233 = r54227 + r54232;
        float r54234 = 7.956084956027014e-28;
        bool r54235 = r54219 <= r54234;
        float r54236 = r54228 / r54219;
        float r54237 = r54229 / r54223;
        float r54238 = r54223 - r54237;
        float r54239 = r54236 * r54238;
        float r54240 = r54222 - r54239;
        float r54241 = 1;
        float r54242 = r54225 / r54223;
        float r54243 = r54241 / r54242;
        float r54244 = r54222 - r54243;
        float r54245 = r54225 * r54223;
        float r54246 = r54229 / r54245;
        float r54247 = r54244 + r54246;
        float r54248 = r54235 ? r54240 : r54247;
        float r54249 = r54221 ? r54233 : r54248;
        return r54249;
}

double f_od(double x, double y, double z, double t) {
        double r54250 = z;
        double r54251 = -8.643245025974954e-54;
        bool r54252 = r54250 <= r54251;
        double r54253 = x;
        double r54254 = y;
        double r54255 = 3.0;
        double r54256 = r54250 * r54255;
        double r54257 = r54254 / r54256;
        double r54258 = r54253 - r54257;
        double r54259 = 0.3333333333333333;
        double r54260 = t;
        double r54261 = r54250 * r54254;
        double r54262 = r54260 / r54261;
        double r54263 = r54259 * r54262;
        double r54264 = r54258 + r54263;
        double r54265 = 7.956084956027014e-28;
        bool r54266 = r54250 <= r54265;
        double r54267 = r54259 / r54250;
        double r54268 = r54260 / r54254;
        double r54269 = r54254 - r54268;
        double r54270 = r54267 * r54269;
        double r54271 = r54253 - r54270;
        double r54272 = 1;
        double r54273 = r54256 / r54254;
        double r54274 = r54272 / r54273;
        double r54275 = r54253 - r54274;
        double r54276 = r54256 * r54254;
        double r54277 = r54260 / r54276;
        double r54278 = r54275 + r54277;
        double r54279 = r54266 ? r54271 : r54278;
        double r54280 = r54252 ? r54264 : r54279;
        return r54280;
}

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 r54281, r54282, r54283, r54284, r54285, r54286, r54287, r54288, r54289, r54290, r54291;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54281);
        mpfr_init(r54282);
        mpfr_init(r54283);
        mpfr_init_set_str(r54284, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54285);
        mpfr_init(r54286);
        mpfr_init(r54287);
        mpfr_init(r54288);
        mpfr_init(r54289);
        mpfr_init(r54290);
        mpfr_init(r54291);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r54281, x, MPFR_RNDN);
        mpfr_set_d(r54282, y, MPFR_RNDN);
        mpfr_set_d(r54283, z, MPFR_RNDN);
        ;
        mpfr_mul(r54285, r54283, r54284, MPFR_RNDN);
        mpfr_div(r54286, r54282, r54285, MPFR_RNDN);
        mpfr_sub(r54287, r54281, r54286, MPFR_RNDN);
        mpfr_set_d(r54288, t, MPFR_RNDN);
        mpfr_mul(r54289, r54285, r54282, MPFR_RNDN);
        mpfr_div(r54290, r54288, r54289, MPFR_RNDN);
        mpfr_add(r54291, r54287, r54290, MPFR_RNDN);
        return mpfr_get_d(r54291, MPFR_RNDN);
}

static mpfr_t r54292, r54293, r54294, r54295, r54296, r54297, r54298, r54299, r54300, r54301, r54302, r54303, r54304, r54305, r54306, r54307, r54308, r54309, r54310, r54311, r54312, r54313, r54314, r54315, r54316, r54317, r54318, r54319, r54320, r54321, r54322;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54292);
        mpfr_init_set_str(r54293, "-8.643245025974954e-54", 10, MPFR_RNDN);
        mpfr_init(r54294);
        mpfr_init(r54295);
        mpfr_init(r54296);
        mpfr_init_set_str(r54297, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54298);
        mpfr_init(r54299);
        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_set_str(r54307, "7.956084956027014e-28", 10, MPFR_RNDN);
        mpfr_init(r54308);
        mpfr_init(r54309);
        mpfr_init(r54310);
        mpfr_init(r54311);
        mpfr_init(r54312);
        mpfr_init(r54313);
        mpfr_init_set_str(r54314, "1", 10, MPFR_RNDN);
        mpfr_init(r54315);
        mpfr_init(r54316);
        mpfr_init(r54317);
        mpfr_init(r54318);
        mpfr_init(r54319);
        mpfr_init(r54320);
        mpfr_init(r54321);
        mpfr_init(r54322);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r54292, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54294, mpfr_cmp(r54292, r54293) <= 0, MPFR_RNDN);
        mpfr_set_d(r54295, x, MPFR_RNDN);
        mpfr_set_d(r54296, y, MPFR_RNDN);
        ;
        mpfr_mul(r54298, r54292, r54297, MPFR_RNDN);
        mpfr_div(r54299, r54296, r54298, MPFR_RNDN);
        mpfr_sub(r54300, r54295, r54299, MPFR_RNDN);
        ;
        mpfr_set_d(r54302, t, MPFR_RNDN);
        mpfr_mul(r54303, r54292, r54296, MPFR_RNDN);
        mpfr_div(r54304, r54302, r54303, MPFR_RNDN);
        mpfr_mul(r54305, r54301, r54304, MPFR_RNDN);
        mpfr_add(r54306, r54300, r54305, MPFR_RNDN);
        ;
        mpfr_set_si(r54308, mpfr_cmp(r54292, r54307) <= 0, MPFR_RNDN);
        mpfr_div(r54309, r54301, r54292, MPFR_RNDN);
        mpfr_div(r54310, r54302, r54296, MPFR_RNDN);
        mpfr_sub(r54311, r54296, r54310, MPFR_RNDN);
        mpfr_mul(r54312, r54309, r54311, MPFR_RNDN);
        mpfr_sub(r54313, r54295, r54312, MPFR_RNDN);
        ;
        mpfr_div(r54315, r54298, r54296, MPFR_RNDN);
        mpfr_div(r54316, r54314, r54315, MPFR_RNDN);
        mpfr_sub(r54317, r54295, r54316, MPFR_RNDN);
        mpfr_mul(r54318, r54298, r54296, MPFR_RNDN);
        mpfr_div(r54319, r54302, r54318, MPFR_RNDN);
        mpfr_add(r54320, r54317, r54319, MPFR_RNDN);
        if (mpfr_get_si(r54308, MPFR_RNDN)) { mpfr_set(r54321, r54313, MPFR_RNDN); } else { mpfr_set(r54321, r54320, MPFR_RNDN); };
        if (mpfr_get_si(r54294, MPFR_RNDN)) { mpfr_set(r54322, r54306, MPFR_RNDN); } else { mpfr_set(r54322, r54321, MPFR_RNDN); };
        return mpfr_get_d(r54322, MPFR_RNDN);
}

static mpfr_t r54323, r54324, r54325, r54326, r54327, r54328, r54329, r54330, r54331, r54332, r54333, r54334, r54335, r54336, r54337, r54338, r54339, r54340, r54341, r54342, r54343, r54344, r54345, r54346, r54347, r54348, r54349, r54350, r54351, r54352, r54353;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54323);
        mpfr_init_set_str(r54324, "-8.643245025974954e-54", 10, MPFR_RNDN);
        mpfr_init(r54325);
        mpfr_init(r54326);
        mpfr_init(r54327);
        mpfr_init_set_str(r54328, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54329);
        mpfr_init(r54330);
        mpfr_init(r54331);
        mpfr_init_set_str(r54332, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54333);
        mpfr_init(r54334);
        mpfr_init(r54335);
        mpfr_init(r54336);
        mpfr_init(r54337);
        mpfr_init_set_str(r54338, "7.956084956027014e-28", 10, MPFR_RNDN);
        mpfr_init(r54339);
        mpfr_init(r54340);
        mpfr_init(r54341);
        mpfr_init(r54342);
        mpfr_init(r54343);
        mpfr_init(r54344);
        mpfr_init_set_str(r54345, "1", 10, MPFR_RNDN);
        mpfr_init(r54346);
        mpfr_init(r54347);
        mpfr_init(r54348);
        mpfr_init(r54349);
        mpfr_init(r54350);
        mpfr_init(r54351);
        mpfr_init(r54352);
        mpfr_init(r54353);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r54323, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54325, mpfr_cmp(r54323, r54324) <= 0, MPFR_RNDN);
        mpfr_set_d(r54326, x, MPFR_RNDN);
        mpfr_set_d(r54327, y, MPFR_RNDN);
        ;
        mpfr_mul(r54329, r54323, r54328, MPFR_RNDN);
        mpfr_div(r54330, r54327, r54329, MPFR_RNDN);
        mpfr_sub(r54331, r54326, r54330, MPFR_RNDN);
        ;
        mpfr_set_d(r54333, t, MPFR_RNDN);
        mpfr_mul(r54334, r54323, r54327, MPFR_RNDN);
        mpfr_div(r54335, r54333, r54334, MPFR_RNDN);
        mpfr_mul(r54336, r54332, r54335, MPFR_RNDN);
        mpfr_add(r54337, r54331, r54336, MPFR_RNDN);
        ;
        mpfr_set_si(r54339, mpfr_cmp(r54323, r54338) <= 0, MPFR_RNDN);
        mpfr_div(r54340, r54332, r54323, MPFR_RNDN);
        mpfr_div(r54341, r54333, r54327, MPFR_RNDN);
        mpfr_sub(r54342, r54327, r54341, MPFR_RNDN);
        mpfr_mul(r54343, r54340, r54342, MPFR_RNDN);
        mpfr_sub(r54344, r54326, r54343, MPFR_RNDN);
        ;
        mpfr_div(r54346, r54329, r54327, MPFR_RNDN);
        mpfr_div(r54347, r54345, r54346, MPFR_RNDN);
        mpfr_sub(r54348, r54326, r54347, MPFR_RNDN);
        mpfr_mul(r54349, r54329, r54327, MPFR_RNDN);
        mpfr_div(r54350, r54333, r54349, MPFR_RNDN);
        mpfr_add(r54351, r54348, r54350, MPFR_RNDN);
        if (mpfr_get_si(r54339, MPFR_RNDN)) { mpfr_set(r54352, r54344, MPFR_RNDN); } else { mpfr_set(r54352, r54351, MPFR_RNDN); };
        if (mpfr_get_si(r54325, MPFR_RNDN)) { mpfr_set(r54353, r54337, MPFR_RNDN); } else { mpfr_set(r54353, r54352, MPFR_RNDN); };
        return mpfr_get_d(r54353, MPFR_RNDN);
}

