#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 r53890 = x;
        float r53891 = 9.0;
        float r53892 = r53890 * r53891;
        float r53893 = y;
        float r53894 = r53892 * r53893;
        float r53895 = z;
        float r53896 = 4.0;
        float r53897 = r53895 * r53896;
        float r53898 = t;
        float r53899 = r53897 * r53898;
        float r53900 = a;
        float r53901 = r53899 * r53900;
        float r53902 = r53894 - r53901;
        float r53903 = b;
        float r53904 = r53902 + r53903;
        float r53905 = c;
        float r53906 = r53895 * r53905;
        float r53907 = r53904 / r53906;
        return r53907;
}

double f_id(double x, double y, double z, double t, double a, double b, double c) {
        double r53908 = x;
        double r53909 = 9.0;
        double r53910 = r53908 * r53909;
        double r53911 = y;
        double r53912 = r53910 * r53911;
        double r53913 = z;
        double r53914 = 4.0;
        double r53915 = r53913 * r53914;
        double r53916 = t;
        double r53917 = r53915 * r53916;
        double r53918 = a;
        double r53919 = r53917 * r53918;
        double r53920 = r53912 - r53919;
        double r53921 = b;
        double r53922 = r53920 + r53921;
        double r53923 = c;
        double r53924 = r53913 * r53923;
        double r53925 = r53922 / r53924;
        return r53925;
}


double f_of(float x, float y, float z, float t, float a, float b, float c) {
        float r53926 = c;
        float r53927 = -4.518506568601351e+81;
        bool r53928 = r53926 <= r53927;
        float r53929 = b;
        float r53930 = z;
        float r53931 = r53930 * r53926;
        float r53932 = r53929 / r53931;
        float r53933 = 9.0;
        float r53934 = y;
        float r53935 = x;
        float r53936 = r53935 / r53926;
        float r53937 = r53934 * r53936;
        float r53938 = r53937 / r53930;
        float r53939 = r53933 * r53938;
        float r53940 = r53932 + r53939;
        float r53941 = 4.0;
        float r53942 = a;
        float r53943 = t;
        float r53944 = r53926 / r53943;
        float r53945 = r53942 / r53944;
        float r53946 = r53941 * r53945;
        float r53947 = r53940 - r53946;
        float r53948 = 2.7389558874700873e+193;
        bool r53949 = r53926 <= r53948;
        float r53950 = r53934 / r53930;
        float r53951 = r53950 * r53935;
        float r53952 = 1;
        float r53953 = r53952 / r53926;
        float r53954 = r53951 * r53953;
        float r53955 = r53933 * r53954;
        float r53956 = r53932 + r53955;
        float r53957 = r53956 - r53946;
        float r53958 = r53949 ? r53957 : r53947;
        float r53959 = r53928 ? r53947 : r53958;
        return r53959;
}

double f_od(double x, double y, double z, double t, double a, double b, double c) {
        double r53960 = c;
        double r53961 = -4.518506568601351e+81;
        bool r53962 = r53960 <= r53961;
        double r53963 = b;
        double r53964 = z;
        double r53965 = r53964 * r53960;
        double r53966 = r53963 / r53965;
        double r53967 = 9.0;
        double r53968 = y;
        double r53969 = x;
        double r53970 = r53969 / r53960;
        double r53971 = r53968 * r53970;
        double r53972 = r53971 / r53964;
        double r53973 = r53967 * r53972;
        double r53974 = r53966 + r53973;
        double r53975 = 4.0;
        double r53976 = a;
        double r53977 = t;
        double r53978 = r53960 / r53977;
        double r53979 = r53976 / r53978;
        double r53980 = r53975 * r53979;
        double r53981 = r53974 - r53980;
        double r53982 = 2.7389558874700873e+193;
        bool r53983 = r53960 <= r53982;
        double r53984 = r53968 / r53964;
        double r53985 = r53984 * r53969;
        double r53986 = 1;
        double r53987 = r53986 / r53960;
        double r53988 = r53985 * r53987;
        double r53989 = r53967 * r53988;
        double r53990 = r53966 + r53989;
        double r53991 = r53990 - r53980;
        double r53992 = r53983 ? r53991 : r53981;
        double r53993 = r53962 ? r53981 : r53992;
        return r53993;
}

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 r53994, r53995, r53996, r53997, r53998, r53999, r54000, r54001, r54002, r54003, r54004, r54005, r54006, r54007, r54008, r54009, r54010, r54011;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53994);
        mpfr_init_set_str(r53995, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53996);
        mpfr_init(r53997);
        mpfr_init(r53998);
        mpfr_init(r53999);
        mpfr_init_set_str(r54000, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54001);
        mpfr_init(r54002);
        mpfr_init(r54003);
        mpfr_init(r54004);
        mpfr_init(r54005);
        mpfr_init(r54006);
        mpfr_init(r54007);
        mpfr_init(r54008);
        mpfr_init(r54009);
        mpfr_init(r54010);
        mpfr_init(r54011);
}

double f_im(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r53994, x, MPFR_RNDN);
        ;
        mpfr_mul(r53996, r53994, r53995, MPFR_RNDN);
        mpfr_set_d(r53997, y, MPFR_RNDN);
        mpfr_mul(r53998, r53996, r53997, MPFR_RNDN);
        mpfr_set_d(r53999, z, MPFR_RNDN);
        ;
        mpfr_mul(r54001, r53999, r54000, MPFR_RNDN);
        mpfr_set_d(r54002, t, MPFR_RNDN);
        mpfr_mul(r54003, r54001, r54002, MPFR_RNDN);
        mpfr_set_d(r54004, a, MPFR_RNDN);
        mpfr_mul(r54005, r54003, r54004, MPFR_RNDN);
        mpfr_sub(r54006, r53998, r54005, MPFR_RNDN);
        mpfr_set_d(r54007, b, MPFR_RNDN);
        mpfr_add(r54008, r54006, r54007, MPFR_RNDN);
        mpfr_set_d(r54009, c, MPFR_RNDN);
        mpfr_mul(r54010, r53999, r54009, MPFR_RNDN);
        mpfr_div(r54011, r54008, r54010, MPFR_RNDN);
        return mpfr_get_d(r54011, MPFR_RNDN);
}

static mpfr_t r54012, r54013, r54014, r54015, r54016, r54017, r54018, r54019, r54020, r54021, r54022, r54023, r54024, r54025, r54026, r54027, r54028, r54029, r54030, r54031, r54032, r54033, r54034, r54035, r54036, r54037, r54038, r54039, r54040, r54041, r54042, r54043, r54044, r54045;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54012);
        mpfr_init_set_str(r54013, "-4.518506568601351e+81", 10, MPFR_RNDN);
        mpfr_init(r54014);
        mpfr_init(r54015);
        mpfr_init(r54016);
        mpfr_init(r54017);
        mpfr_init(r54018);
        mpfr_init_set_str(r54019, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54020);
        mpfr_init(r54021);
        mpfr_init(r54022);
        mpfr_init(r54023);
        mpfr_init(r54024);
        mpfr_init(r54025);
        mpfr_init(r54026);
        mpfr_init_set_str(r54027, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54028);
        mpfr_init(r54029);
        mpfr_init(r54030);
        mpfr_init(r54031);
        mpfr_init(r54032);
        mpfr_init(r54033);
        mpfr_init_set_str(r54034, "2.7389558874700873e+193", 10, MPFR_RNDN);
        mpfr_init(r54035);
        mpfr_init(r54036);
        mpfr_init(r54037);
        mpfr_init_set_str(r54038, "1", 10, MPFR_RNDN);
        mpfr_init(r54039);
        mpfr_init(r54040);
        mpfr_init(r54041);
        mpfr_init(r54042);
        mpfr_init(r54043);
        mpfr_init(r54044);
        mpfr_init(r54045);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54012, c, MPFR_RNDN);
        ;
        mpfr_set_si(r54014, mpfr_cmp(r54012, r54013) <= 0, MPFR_RNDN);
        mpfr_set_d(r54015, b, MPFR_RNDN);
        mpfr_set_d(r54016, z, MPFR_RNDN);
        mpfr_mul(r54017, r54016, r54012, MPFR_RNDN);
        mpfr_div(r54018, r54015, r54017, MPFR_RNDN);
        ;
        mpfr_set_d(r54020, y, MPFR_RNDN);
        mpfr_set_d(r54021, x, MPFR_RNDN);
        mpfr_div(r54022, r54021, r54012, MPFR_RNDN);
        mpfr_mul(r54023, r54020, r54022, MPFR_RNDN);
        mpfr_div(r54024, r54023, r54016, MPFR_RNDN);
        mpfr_mul(r54025, r54019, r54024, MPFR_RNDN);
        mpfr_add(r54026, r54018, r54025, MPFR_RNDN);
        ;
        mpfr_set_d(r54028, a, MPFR_RNDN);
        mpfr_set_d(r54029, t, MPFR_RNDN);
        mpfr_div(r54030, r54012, r54029, MPFR_RNDN);
        mpfr_div(r54031, r54028, r54030, MPFR_RNDN);
        mpfr_mul(r54032, r54027, r54031, MPFR_RNDN);
        mpfr_sub(r54033, r54026, r54032, MPFR_RNDN);
        ;
        mpfr_set_si(r54035, mpfr_cmp(r54012, r54034) <= 0, MPFR_RNDN);
        mpfr_div(r54036, r54020, r54016, MPFR_RNDN);
        mpfr_mul(r54037, r54036, r54021, MPFR_RNDN);
        ;
        mpfr_div(r54039, r54038, r54012, MPFR_RNDN);
        mpfr_mul(r54040, r54037, r54039, MPFR_RNDN);
        mpfr_mul(r54041, r54019, r54040, MPFR_RNDN);
        mpfr_add(r54042, r54018, r54041, MPFR_RNDN);
        mpfr_sub(r54043, r54042, r54032, MPFR_RNDN);
        if (mpfr_get_si(r54035, MPFR_RNDN)) { mpfr_set(r54044, r54043, MPFR_RNDN); } else { mpfr_set(r54044, r54033, MPFR_RNDN); };
        if (mpfr_get_si(r54014, MPFR_RNDN)) { mpfr_set(r54045, r54033, MPFR_RNDN); } else { mpfr_set(r54045, r54044, MPFR_RNDN); };
        return mpfr_get_d(r54045, MPFR_RNDN);
}

static mpfr_t r54046, r54047, r54048, r54049, r54050, r54051, r54052, r54053, r54054, r54055, r54056, r54057, r54058, r54059, r54060, r54061, r54062, r54063, r54064, r54065, r54066, r54067, r54068, r54069, r54070, r54071, r54072, r54073, r54074, r54075, r54076, r54077, r54078, r54079;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54046);
        mpfr_init_set_str(r54047, "-4.518506568601351e+81", 10, MPFR_RNDN);
        mpfr_init(r54048);
        mpfr_init(r54049);
        mpfr_init(r54050);
        mpfr_init(r54051);
        mpfr_init(r54052);
        mpfr_init_set_str(r54053, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54054);
        mpfr_init(r54055);
        mpfr_init(r54056);
        mpfr_init(r54057);
        mpfr_init(r54058);
        mpfr_init(r54059);
        mpfr_init(r54060);
        mpfr_init_set_str(r54061, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54062);
        mpfr_init(r54063);
        mpfr_init(r54064);
        mpfr_init(r54065);
        mpfr_init(r54066);
        mpfr_init(r54067);
        mpfr_init_set_str(r54068, "2.7389558874700873e+193", 10, MPFR_RNDN);
        mpfr_init(r54069);
        mpfr_init(r54070);
        mpfr_init(r54071);
        mpfr_init_set_str(r54072, "1", 10, MPFR_RNDN);
        mpfr_init(r54073);
        mpfr_init(r54074);
        mpfr_init(r54075);
        mpfr_init(r54076);
        mpfr_init(r54077);
        mpfr_init(r54078);
        mpfr_init(r54079);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54046, c, MPFR_RNDN);
        ;
        mpfr_set_si(r54048, mpfr_cmp(r54046, r54047) <= 0, MPFR_RNDN);
        mpfr_set_d(r54049, b, MPFR_RNDN);
        mpfr_set_d(r54050, z, MPFR_RNDN);
        mpfr_mul(r54051, r54050, r54046, MPFR_RNDN);
        mpfr_div(r54052, r54049, r54051, MPFR_RNDN);
        ;
        mpfr_set_d(r54054, y, MPFR_RNDN);
        mpfr_set_d(r54055, x, MPFR_RNDN);
        mpfr_div(r54056, r54055, r54046, MPFR_RNDN);
        mpfr_mul(r54057, r54054, r54056, MPFR_RNDN);
        mpfr_div(r54058, r54057, r54050, MPFR_RNDN);
        mpfr_mul(r54059, r54053, r54058, MPFR_RNDN);
        mpfr_add(r54060, r54052, r54059, MPFR_RNDN);
        ;
        mpfr_set_d(r54062, a, MPFR_RNDN);
        mpfr_set_d(r54063, t, MPFR_RNDN);
        mpfr_div(r54064, r54046, r54063, MPFR_RNDN);
        mpfr_div(r54065, r54062, r54064, MPFR_RNDN);
        mpfr_mul(r54066, r54061, r54065, MPFR_RNDN);
        mpfr_sub(r54067, r54060, r54066, MPFR_RNDN);
        ;
        mpfr_set_si(r54069, mpfr_cmp(r54046, r54068) <= 0, MPFR_RNDN);
        mpfr_div(r54070, r54054, r54050, MPFR_RNDN);
        mpfr_mul(r54071, r54070, r54055, MPFR_RNDN);
        ;
        mpfr_div(r54073, r54072, r54046, MPFR_RNDN);
        mpfr_mul(r54074, r54071, r54073, MPFR_RNDN);
        mpfr_mul(r54075, r54053, r54074, MPFR_RNDN);
        mpfr_add(r54076, r54052, r54075, MPFR_RNDN);
        mpfr_sub(r54077, r54076, r54066, MPFR_RNDN);
        if (mpfr_get_si(r54069, MPFR_RNDN)) { mpfr_set(r54078, r54077, MPFR_RNDN); } else { mpfr_set(r54078, r54067, MPFR_RNDN); };
        if (mpfr_get_si(r54048, MPFR_RNDN)) { mpfr_set(r54079, r54067, MPFR_RNDN); } else { mpfr_set(r54079, r54078, MPFR_RNDN); };
        return mpfr_get_d(r54079, MPFR_RNDN);
}

