#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 r54411 = x;
        float r54412 = y;
        float r54413 = z;
        float r54414 = 3.0;
        float r54415 = r54413 * r54414;
        float r54416 = r54412 / r54415;
        float r54417 = r54411 - r54416;
        float r54418 = t;
        float r54419 = r54415 * r54412;
        float r54420 = r54418 / r54419;
        float r54421 = r54417 + r54420;
        return r54421;
}

double f_id(double x, double y, double z, double t) {
        double r54422 = x;
        double r54423 = y;
        double r54424 = z;
        double r54425 = 3.0;
        double r54426 = r54424 * r54425;
        double r54427 = r54423 / r54426;
        double r54428 = r54422 - r54427;
        double r54429 = t;
        double r54430 = r54426 * r54423;
        double r54431 = r54429 / r54430;
        double r54432 = r54428 + r54431;
        return r54432;
}


double f_of(float x, float y, float z, float t) {
        float r54433 = z;
        float r54434 = -1.2018128981968222e-61;
        bool r54435 = r54433 <= r54434;
        float r54436 = x;
        float r54437 = y;
        float r54438 = r54437 / r54433;
        float r54439 = 3.0;
        float r54440 = r54438 / r54439;
        float r54441 = r54436 - r54440;
        float r54442 = t;
        float r54443 = r54433 * r54439;
        float r54444 = r54443 * r54437;
        float r54445 = r54442 / r54444;
        float r54446 = r54441 + r54445;
        float r54447 = 1.0607797663860536e-27;
        bool r54448 = r54433 <= r54447;
        float r54449 = 0.3333333333333333;
        float r54450 = r54449 / r54433;
        float r54451 = r54442 / r54437;
        float r54452 = r54437 - r54451;
        float r54453 = r54450 * r54452;
        float r54454 = r54436 - r54453;
        float r54455 = r54448 ? r54454 : r54446;
        float r54456 = r54435 ? r54446 : r54455;
        return r54456;
}

double f_od(double x, double y, double z, double t) {
        double r54457 = z;
        double r54458 = -1.2018128981968222e-61;
        bool r54459 = r54457 <= r54458;
        double r54460 = x;
        double r54461 = y;
        double r54462 = r54461 / r54457;
        double r54463 = 3.0;
        double r54464 = r54462 / r54463;
        double r54465 = r54460 - r54464;
        double r54466 = t;
        double r54467 = r54457 * r54463;
        double r54468 = r54467 * r54461;
        double r54469 = r54466 / r54468;
        double r54470 = r54465 + r54469;
        double r54471 = 1.0607797663860536e-27;
        bool r54472 = r54457 <= r54471;
        double r54473 = 0.3333333333333333;
        double r54474 = r54473 / r54457;
        double r54475 = r54466 / r54461;
        double r54476 = r54461 - r54475;
        double r54477 = r54474 * r54476;
        double r54478 = r54460 - r54477;
        double r54479 = r54472 ? r54478 : r54470;
        double r54480 = r54459 ? r54470 : r54479;
        return r54480;
}

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 r54481, r54482, r54483, r54484, r54485, r54486, r54487, r54488, r54489, r54490, r54491;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54481);
        mpfr_init(r54482);
        mpfr_init(r54483);
        mpfr_init_set_str(r54484, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54485);
        mpfr_init(r54486);
        mpfr_init(r54487);
        mpfr_init(r54488);
        mpfr_init(r54489);
        mpfr_init(r54490);
        mpfr_init(r54491);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r54481, x, MPFR_RNDN);
        mpfr_set_d(r54482, y, MPFR_RNDN);
        mpfr_set_d(r54483, z, MPFR_RNDN);
        ;
        mpfr_mul(r54485, r54483, r54484, MPFR_RNDN);
        mpfr_div(r54486, r54482, r54485, MPFR_RNDN);
        mpfr_sub(r54487, r54481, r54486, MPFR_RNDN);
        mpfr_set_d(r54488, t, MPFR_RNDN);
        mpfr_mul(r54489, r54485, r54482, MPFR_RNDN);
        mpfr_div(r54490, r54488, r54489, MPFR_RNDN);
        mpfr_add(r54491, r54487, r54490, MPFR_RNDN);
        return mpfr_get_d(r54491, MPFR_RNDN);
}

static mpfr_t r54492, r54493, r54494, r54495, r54496, r54497, r54498, r54499, r54500, r54501, r54502, r54503, r54504, r54505, r54506, r54507, r54508, r54509, r54510, r54511, r54512, r54513, r54514, r54515;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54492);
        mpfr_init_set_str(r54493, "-1.2018128981968222e-61", 10, MPFR_RNDN);
        mpfr_init(r54494);
        mpfr_init(r54495);
        mpfr_init(r54496);
        mpfr_init(r54497);
        mpfr_init_set_str(r54498, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54499);
        mpfr_init(r54500);
        mpfr_init(r54501);
        mpfr_init(r54502);
        mpfr_init(r54503);
        mpfr_init(r54504);
        mpfr_init(r54505);
        mpfr_init_set_str(r54506, "1.0607797663860536e-27", 10, MPFR_RNDN);
        mpfr_init(r54507);
        mpfr_init_set_str(r54508, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54509);
        mpfr_init(r54510);
        mpfr_init(r54511);
        mpfr_init(r54512);
        mpfr_init(r54513);
        mpfr_init(r54514);
        mpfr_init(r54515);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r54492, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54494, mpfr_cmp(r54492, r54493) <= 0, MPFR_RNDN);
        mpfr_set_d(r54495, x, MPFR_RNDN);
        mpfr_set_d(r54496, y, MPFR_RNDN);
        mpfr_div(r54497, r54496, r54492, MPFR_RNDN);
        ;
        mpfr_div(r54499, r54497, r54498, MPFR_RNDN);
        mpfr_sub(r54500, r54495, r54499, MPFR_RNDN);
        mpfr_set_d(r54501, t, MPFR_RNDN);
        mpfr_mul(r54502, r54492, r54498, MPFR_RNDN);
        mpfr_mul(r54503, r54502, r54496, MPFR_RNDN);
        mpfr_div(r54504, r54501, r54503, MPFR_RNDN);
        mpfr_add(r54505, r54500, r54504, MPFR_RNDN);
        ;
        mpfr_set_si(r54507, mpfr_cmp(r54492, r54506) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r54509, r54508, r54492, MPFR_RNDN);
        mpfr_div(r54510, r54501, r54496, MPFR_RNDN);
        mpfr_sub(r54511, r54496, r54510, MPFR_RNDN);
        mpfr_mul(r54512, r54509, r54511, MPFR_RNDN);
        mpfr_sub(r54513, r54495, r54512, MPFR_RNDN);
        if (mpfr_get_si(r54507, MPFR_RNDN)) { mpfr_set(r54514, r54513, MPFR_RNDN); } else { mpfr_set(r54514, r54505, MPFR_RNDN); };
        if (mpfr_get_si(r54494, MPFR_RNDN)) { mpfr_set(r54515, r54505, MPFR_RNDN); } else { mpfr_set(r54515, r54514, MPFR_RNDN); };
        return mpfr_get_d(r54515, MPFR_RNDN);
}

static mpfr_t r54516, r54517, r54518, r54519, r54520, r54521, r54522, r54523, r54524, r54525, r54526, r54527, r54528, r54529, r54530, r54531, r54532, r54533, r54534, r54535, r54536, r54537, r54538, r54539;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54516);
        mpfr_init_set_str(r54517, "-1.2018128981968222e-61", 10, MPFR_RNDN);
        mpfr_init(r54518);
        mpfr_init(r54519);
        mpfr_init(r54520);
        mpfr_init(r54521);
        mpfr_init_set_str(r54522, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54523);
        mpfr_init(r54524);
        mpfr_init(r54525);
        mpfr_init(r54526);
        mpfr_init(r54527);
        mpfr_init(r54528);
        mpfr_init(r54529);
        mpfr_init_set_str(r54530, "1.0607797663860536e-27", 10, MPFR_RNDN);
        mpfr_init(r54531);
        mpfr_init_set_str(r54532, "0.3333333333333333", 10, MPFR_RNDN);
        mpfr_init(r54533);
        mpfr_init(r54534);
        mpfr_init(r54535);
        mpfr_init(r54536);
        mpfr_init(r54537);
        mpfr_init(r54538);
        mpfr_init(r54539);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r54516, z, MPFR_RNDN);
        ;
        mpfr_set_si(r54518, mpfr_cmp(r54516, r54517) <= 0, MPFR_RNDN);
        mpfr_set_d(r54519, x, MPFR_RNDN);
        mpfr_set_d(r54520, y, MPFR_RNDN);
        mpfr_div(r54521, r54520, r54516, MPFR_RNDN);
        ;
        mpfr_div(r54523, r54521, r54522, MPFR_RNDN);
        mpfr_sub(r54524, r54519, r54523, MPFR_RNDN);
        mpfr_set_d(r54525, t, MPFR_RNDN);
        mpfr_mul(r54526, r54516, r54522, MPFR_RNDN);
        mpfr_mul(r54527, r54526, r54520, MPFR_RNDN);
        mpfr_div(r54528, r54525, r54527, MPFR_RNDN);
        mpfr_add(r54529, r54524, r54528, MPFR_RNDN);
        ;
        mpfr_set_si(r54531, mpfr_cmp(r54516, r54530) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r54533, r54532, r54516, MPFR_RNDN);
        mpfr_div(r54534, r54525, r54520, MPFR_RNDN);
        mpfr_sub(r54535, r54520, r54534, MPFR_RNDN);
        mpfr_mul(r54536, r54533, r54535, MPFR_RNDN);
        mpfr_sub(r54537, r54519, r54536, MPFR_RNDN);
        if (mpfr_get_si(r54531, MPFR_RNDN)) { mpfr_set(r54538, r54537, MPFR_RNDN); } else { mpfr_set(r54538, r54529, MPFR_RNDN); };
        if (mpfr_get_si(r54518, MPFR_RNDN)) { mpfr_set(r54539, r54529, MPFR_RNDN); } else { mpfr_set(r54539, r54538, MPFR_RNDN); };
        return mpfr_get_d(r54539, MPFR_RNDN);
}

