#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 r53916 = x;
        float r53917 = 9.0;
        float r53918 = r53916 * r53917;
        float r53919 = y;
        float r53920 = r53918 * r53919;
        float r53921 = z;
        float r53922 = 4.0;
        float r53923 = r53921 * r53922;
        float r53924 = t;
        float r53925 = r53923 * r53924;
        float r53926 = a;
        float r53927 = r53925 * r53926;
        float r53928 = r53920 - r53927;
        float r53929 = b;
        float r53930 = r53928 + r53929;
        float r53931 = c;
        float r53932 = r53921 * r53931;
        float r53933 = r53930 / r53932;
        return r53933;
}

double f_id(double x, double y, double z, double t, double a, double b, double c) {
        double r53934 = x;
        double r53935 = 9.0;
        double r53936 = r53934 * r53935;
        double r53937 = y;
        double r53938 = r53936 * r53937;
        double r53939 = z;
        double r53940 = 4.0;
        double r53941 = r53939 * r53940;
        double r53942 = t;
        double r53943 = r53941 * r53942;
        double r53944 = a;
        double r53945 = r53943 * r53944;
        double r53946 = r53938 - r53945;
        double r53947 = b;
        double r53948 = r53946 + r53947;
        double r53949 = c;
        double r53950 = r53939 * r53949;
        double r53951 = r53948 / r53950;
        return r53951;
}


double f_of(float x, float y, float z, float t, float a, float b, float c) {
        float r53952 = c;
        float r53953 = -9.1079449479494e+81;
        bool r53954 = r53952 <= r53953;
        float r53955 = b;
        float r53956 = z;
        float r53957 = r53956 * r53952;
        float r53958 = r53955 / r53957;
        float r53959 = 9.0;
        float r53960 = y;
        float r53961 = x;
        float r53962 = r53961 / r53952;
        float r53963 = r53960 * r53962;
        float r53964 = r53963 / r53956;
        float r53965 = r53959 * r53964;
        float r53966 = r53958 + r53965;
        float r53967 = 4.0;
        float r53968 = a;
        float r53969 = t;
        float r53970 = r53952 / r53969;
        float r53971 = r53968 / r53970;
        float r53972 = r53967 * r53971;
        float r53973 = r53966 - r53972;
        float r53974 = 9.137106508768952e+191;
        bool r53975 = r53952 <= r53974;
        float r53976 = r53960 / r53956;
        float r53977 = r53976 * r53961;
        float r53978 = 1;
        float r53979 = r53978 / r53952;
        float r53980 = r53977 * r53979;
        float r53981 = r53959 * r53980;
        float r53982 = r53958 + r53981;
        float r53983 = r53982 - r53972;
        float r53984 = r53975 ? r53983 : r53973;
        float r53985 = r53954 ? r53973 : r53984;
        return r53985;
}

double f_od(double x, double y, double z, double t, double a, double b, double c) {
        double r53986 = c;
        double r53987 = -9.1079449479494e+81;
        bool r53988 = r53986 <= r53987;
        double r53989 = b;
        double r53990 = z;
        double r53991 = r53990 * r53986;
        double r53992 = r53989 / r53991;
        double r53993 = 9.0;
        double r53994 = y;
        double r53995 = x;
        double r53996 = r53995 / r53986;
        double r53997 = r53994 * r53996;
        double r53998 = r53997 / r53990;
        double r53999 = r53993 * r53998;
        double r54000 = r53992 + r53999;
        double r54001 = 4.0;
        double r54002 = a;
        double r54003 = t;
        double r54004 = r53986 / r54003;
        double r54005 = r54002 / r54004;
        double r54006 = r54001 * r54005;
        double r54007 = r54000 - r54006;
        double r54008 = 9.137106508768952e+191;
        bool r54009 = r53986 <= r54008;
        double r54010 = r53994 / r53990;
        double r54011 = r54010 * r53995;
        double r54012 = 1;
        double r54013 = r54012 / r53986;
        double r54014 = r54011 * r54013;
        double r54015 = r53993 * r54014;
        double r54016 = r53992 + r54015;
        double r54017 = r54016 - r54006;
        double r54018 = r54009 ? r54017 : r54007;
        double r54019 = r53988 ? r54007 : r54018;
        return r54019;
}

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 r54020, r54021, r54022, r54023, r54024, r54025, r54026, r54027, r54028, r54029, r54030, r54031, r54032, r54033, r54034, r54035, r54036, r54037;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54020);
        mpfr_init_set_str(r54021, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54022);
        mpfr_init(r54023);
        mpfr_init(r54024);
        mpfr_init(r54025);
        mpfr_init_set_str(r54026, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54027);
        mpfr_init(r54028);
        mpfr_init(r54029);
        mpfr_init(r54030);
        mpfr_init(r54031);
        mpfr_init(r54032);
        mpfr_init(r54033);
        mpfr_init(r54034);
        mpfr_init(r54035);
        mpfr_init(r54036);
        mpfr_init(r54037);
}

double f_im(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54020, x, MPFR_RNDN);
        ;
        mpfr_mul(r54022, r54020, r54021, MPFR_RNDN);
        mpfr_set_d(r54023, y, MPFR_RNDN);
        mpfr_mul(r54024, r54022, r54023, MPFR_RNDN);
        mpfr_set_d(r54025, z, MPFR_RNDN);
        ;
        mpfr_mul(r54027, r54025, r54026, MPFR_RNDN);
        mpfr_set_d(r54028, t, MPFR_RNDN);
        mpfr_mul(r54029, r54027, r54028, MPFR_RNDN);
        mpfr_set_d(r54030, a, MPFR_RNDN);
        mpfr_mul(r54031, r54029, r54030, MPFR_RNDN);
        mpfr_sub(r54032, r54024, r54031, MPFR_RNDN);
        mpfr_set_d(r54033, b, MPFR_RNDN);
        mpfr_add(r54034, r54032, r54033, MPFR_RNDN);
        mpfr_set_d(r54035, c, MPFR_RNDN);
        mpfr_mul(r54036, r54025, r54035, MPFR_RNDN);
        mpfr_div(r54037, r54034, r54036, MPFR_RNDN);
        return mpfr_get_d(r54037, MPFR_RNDN);
}

static mpfr_t r54038, r54039, r54040, r54041, r54042, r54043, r54044, r54045, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54038);
        mpfr_init_set_str(r54039, "-9.1079449479494e+81", 10, MPFR_RNDN);
        mpfr_init(r54040);
        mpfr_init(r54041);
        mpfr_init(r54042);
        mpfr_init(r54043);
        mpfr_init(r54044);
        mpfr_init_set_str(r54045, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54046);
        mpfr_init(r54047);
        mpfr_init(r54048);
        mpfr_init(r54049);
        mpfr_init(r54050);
        mpfr_init(r54051);
        mpfr_init(r54052);
        mpfr_init_set_str(r54053, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54054);
        mpfr_init(r54055);
        mpfr_init(r54056);
        mpfr_init(r54057);
        mpfr_init(r54058);
        mpfr_init(r54059);
        mpfr_init_set_str(r54060, "9.137106508768952e+191", 10, MPFR_RNDN);
        mpfr_init(r54061);
        mpfr_init(r54062);
        mpfr_init(r54063);
        mpfr_init_set_str(r54064, "1", 10, MPFR_RNDN);
        mpfr_init(r54065);
        mpfr_init(r54066);
        mpfr_init(r54067);
        mpfr_init(r54068);
        mpfr_init(r54069);
        mpfr_init(r54070);
        mpfr_init(r54071);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54038, c, MPFR_RNDN);
        ;
        mpfr_set_si(r54040, mpfr_cmp(r54038, r54039) <= 0, MPFR_RNDN);
        mpfr_set_d(r54041, b, MPFR_RNDN);
        mpfr_set_d(r54042, z, MPFR_RNDN);
        mpfr_mul(r54043, r54042, r54038, MPFR_RNDN);
        mpfr_div(r54044, r54041, r54043, MPFR_RNDN);
        ;
        mpfr_set_d(r54046, y, MPFR_RNDN);
        mpfr_set_d(r54047, x, MPFR_RNDN);
        mpfr_div(r54048, r54047, r54038, MPFR_RNDN);
        mpfr_mul(r54049, r54046, r54048, MPFR_RNDN);
        mpfr_div(r54050, r54049, r54042, MPFR_RNDN);
        mpfr_mul(r54051, r54045, r54050, MPFR_RNDN);
        mpfr_add(r54052, r54044, r54051, MPFR_RNDN);
        ;
        mpfr_set_d(r54054, a, MPFR_RNDN);
        mpfr_set_d(r54055, t, MPFR_RNDN);
        mpfr_div(r54056, r54038, r54055, MPFR_RNDN);
        mpfr_div(r54057, r54054, r54056, MPFR_RNDN);
        mpfr_mul(r54058, r54053, r54057, MPFR_RNDN);
        mpfr_sub(r54059, r54052, r54058, MPFR_RNDN);
        ;
        mpfr_set_si(r54061, mpfr_cmp(r54038, r54060) <= 0, MPFR_RNDN);
        mpfr_div(r54062, r54046, r54042, MPFR_RNDN);
        mpfr_mul(r54063, r54062, r54047, MPFR_RNDN);
        ;
        mpfr_div(r54065, r54064, r54038, MPFR_RNDN);
        mpfr_mul(r54066, r54063, r54065, MPFR_RNDN);
        mpfr_mul(r54067, r54045, r54066, MPFR_RNDN);
        mpfr_add(r54068, r54044, r54067, MPFR_RNDN);
        mpfr_sub(r54069, r54068, r54058, MPFR_RNDN);
        if (mpfr_get_si(r54061, MPFR_RNDN)) { mpfr_set(r54070, r54069, MPFR_RNDN); } else { mpfr_set(r54070, r54059, MPFR_RNDN); };
        if (mpfr_get_si(r54040, MPFR_RNDN)) { mpfr_set(r54071, r54059, MPFR_RNDN); } else { mpfr_set(r54071, r54070, MPFR_RNDN); };
        return mpfr_get_d(r54071, MPFR_RNDN);
}

static mpfr_t r54072, r54073, r54074, r54075, r54076, r54077, r54078, r54079, r54080, r54081, r54082, r54083, r54084, r54085, r54086, r54087, r54088, r54089, r54090, r54091, r54092, r54093, r54094, r54095, r54096, r54097, r54098, r54099, r54100, r54101, r54102, r54103, r54104, r54105;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54072);
        mpfr_init_set_str(r54073, "-9.1079449479494e+81", 10, MPFR_RNDN);
        mpfr_init(r54074);
        mpfr_init(r54075);
        mpfr_init(r54076);
        mpfr_init(r54077);
        mpfr_init(r54078);
        mpfr_init_set_str(r54079, "9.0", 10, MPFR_RNDN);
        mpfr_init(r54080);
        mpfr_init(r54081);
        mpfr_init(r54082);
        mpfr_init(r54083);
        mpfr_init(r54084);
        mpfr_init(r54085);
        mpfr_init(r54086);
        mpfr_init_set_str(r54087, "4.0", 10, MPFR_RNDN);
        mpfr_init(r54088);
        mpfr_init(r54089);
        mpfr_init(r54090);
        mpfr_init(r54091);
        mpfr_init(r54092);
        mpfr_init(r54093);
        mpfr_init_set_str(r54094, "9.137106508768952e+191", 10, MPFR_RNDN);
        mpfr_init(r54095);
        mpfr_init(r54096);
        mpfr_init(r54097);
        mpfr_init_set_str(r54098, "1", 10, MPFR_RNDN);
        mpfr_init(r54099);
        mpfr_init(r54100);
        mpfr_init(r54101);
        mpfr_init(r54102);
        mpfr_init(r54103);
        mpfr_init(r54104);
        mpfr_init(r54105);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r54072, c, MPFR_RNDN);
        ;
        mpfr_set_si(r54074, mpfr_cmp(r54072, r54073) <= 0, MPFR_RNDN);
        mpfr_set_d(r54075, b, MPFR_RNDN);
        mpfr_set_d(r54076, z, MPFR_RNDN);
        mpfr_mul(r54077, r54076, r54072, MPFR_RNDN);
        mpfr_div(r54078, r54075, r54077, MPFR_RNDN);
        ;
        mpfr_set_d(r54080, y, MPFR_RNDN);
        mpfr_set_d(r54081, x, MPFR_RNDN);
        mpfr_div(r54082, r54081, r54072, MPFR_RNDN);
        mpfr_mul(r54083, r54080, r54082, MPFR_RNDN);
        mpfr_div(r54084, r54083, r54076, MPFR_RNDN);
        mpfr_mul(r54085, r54079, r54084, MPFR_RNDN);
        mpfr_add(r54086, r54078, r54085, MPFR_RNDN);
        ;
        mpfr_set_d(r54088, a, MPFR_RNDN);
        mpfr_set_d(r54089, t, MPFR_RNDN);
        mpfr_div(r54090, r54072, r54089, MPFR_RNDN);
        mpfr_div(r54091, r54088, r54090, MPFR_RNDN);
        mpfr_mul(r54092, r54087, r54091, MPFR_RNDN);
        mpfr_sub(r54093, r54086, r54092, MPFR_RNDN);
        ;
        mpfr_set_si(r54095, mpfr_cmp(r54072, r54094) <= 0, MPFR_RNDN);
        mpfr_div(r54096, r54080, r54076, MPFR_RNDN);
        mpfr_mul(r54097, r54096, r54081, MPFR_RNDN);
        ;
        mpfr_div(r54099, r54098, r54072, MPFR_RNDN);
        mpfr_mul(r54100, r54097, r54099, MPFR_RNDN);
        mpfr_mul(r54101, r54079, r54100, MPFR_RNDN);
        mpfr_add(r54102, r54078, r54101, MPFR_RNDN);
        mpfr_sub(r54103, r54102, r54092, MPFR_RNDN);
        if (mpfr_get_si(r54095, MPFR_RNDN)) { mpfr_set(r54104, r54103, MPFR_RNDN); } else { mpfr_set(r54104, r54093, MPFR_RNDN); };
        if (mpfr_get_si(r54074, MPFR_RNDN)) { mpfr_set(r54105, r54093, MPFR_RNDN); } else { mpfr_set(r54105, r54104, MPFR_RNDN); };
        return mpfr_get_d(r54105, MPFR_RNDN);
}

