#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 r53029 = x;
        float r53030 = 9.0;
        float r53031 = r53029 * r53030;
        float r53032 = y;
        float r53033 = r53031 * r53032;
        float r53034 = z;
        float r53035 = 4.0;
        float r53036 = r53034 * r53035;
        float r53037 = t;
        float r53038 = r53036 * r53037;
        float r53039 = a;
        float r53040 = r53038 * r53039;
        float r53041 = r53033 - r53040;
        float r53042 = b;
        float r53043 = r53041 + r53042;
        float r53044 = c;
        float r53045 = r53034 * r53044;
        float r53046 = r53043 / r53045;
        return r53046;
}

double f_id(double x, double y, double z, double t, double a, double b, double c) {
        double r53047 = x;
        double r53048 = 9.0;
        double r53049 = r53047 * r53048;
        double r53050 = y;
        double r53051 = r53049 * r53050;
        double r53052 = z;
        double r53053 = 4.0;
        double r53054 = r53052 * r53053;
        double r53055 = t;
        double r53056 = r53054 * r53055;
        double r53057 = a;
        double r53058 = r53056 * r53057;
        double r53059 = r53051 - r53058;
        double r53060 = b;
        double r53061 = r53059 + r53060;
        double r53062 = c;
        double r53063 = r53052 * r53062;
        double r53064 = r53061 / r53063;
        return r53064;
}


double f_of(float x, float y, float z, float t, float a, float b, float c) {
        float r53065 = c;
        float r53066 = -9.1079449479494e+81;
        bool r53067 = r53065 <= r53066;
        float r53068 = b;
        float r53069 = z;
        float r53070 = r53069 * r53065;
        float r53071 = r53068 / r53070;
        float r53072 = 9.0;
        float r53073 = y;
        float r53074 = x;
        float r53075 = r53074 / r53065;
        float r53076 = r53073 * r53075;
        float r53077 = r53076 / r53069;
        float r53078 = r53072 * r53077;
        float r53079 = r53071 + r53078;
        float r53080 = 4.0;
        float r53081 = a;
        float r53082 = t;
        float r53083 = r53065 / r53082;
        float r53084 = r53081 / r53083;
        float r53085 = r53080 * r53084;
        float r53086 = r53079 - r53085;
        float r53087 = 9.137106508768952e+191;
        bool r53088 = r53065 <= r53087;
        float r53089 = r53073 / r53069;
        float r53090 = r53089 * r53074;
        float r53091 = 1;
        float r53092 = r53091 / r53065;
        float r53093 = r53090 * r53092;
        float r53094 = r53072 * r53093;
        float r53095 = r53071 + r53094;
        float r53096 = r53095 - r53085;
        float r53097 = r53088 ? r53096 : r53086;
        float r53098 = r53067 ? r53086 : r53097;
        return r53098;
}

double f_od(double x, double y, double z, double t, double a, double b, double c) {
        double r53099 = c;
        double r53100 = -9.1079449479494e+81;
        bool r53101 = r53099 <= r53100;
        double r53102 = b;
        double r53103 = z;
        double r53104 = r53103 * r53099;
        double r53105 = r53102 / r53104;
        double r53106 = 9.0;
        double r53107 = y;
        double r53108 = x;
        double r53109 = r53108 / r53099;
        double r53110 = r53107 * r53109;
        double r53111 = r53110 / r53103;
        double r53112 = r53106 * r53111;
        double r53113 = r53105 + r53112;
        double r53114 = 4.0;
        double r53115 = a;
        double r53116 = t;
        double r53117 = r53099 / r53116;
        double r53118 = r53115 / r53117;
        double r53119 = r53114 * r53118;
        double r53120 = r53113 - r53119;
        double r53121 = 9.137106508768952e+191;
        bool r53122 = r53099 <= r53121;
        double r53123 = r53107 / r53103;
        double r53124 = r53123 * r53108;
        double r53125 = 1;
        double r53126 = r53125 / r53099;
        double r53127 = r53124 * r53126;
        double r53128 = r53106 * r53127;
        double r53129 = r53105 + r53128;
        double r53130 = r53129 - r53119;
        double r53131 = r53122 ? r53130 : r53120;
        double r53132 = r53101 ? r53120 : r53131;
        return r53132;
}

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 r53133, r53134, r53135, r53136, r53137, r53138, r53139, r53140, r53141, r53142, r53143, r53144, r53145, r53146, r53147, r53148, r53149, r53150;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53133);
        mpfr_init_set_str(r53134, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53135);
        mpfr_init(r53136);
        mpfr_init(r53137);
        mpfr_init(r53138);
        mpfr_init_set_str(r53139, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53140);
        mpfr_init(r53141);
        mpfr_init(r53142);
        mpfr_init(r53143);
        mpfr_init(r53144);
        mpfr_init(r53145);
        mpfr_init(r53146);
        mpfr_init(r53147);
        mpfr_init(r53148);
        mpfr_init(r53149);
        mpfr_init(r53150);
}

double f_im(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r53133, x, MPFR_RNDN);
        ;
        mpfr_mul(r53135, r53133, r53134, MPFR_RNDN);
        mpfr_set_d(r53136, y, MPFR_RNDN);
        mpfr_mul(r53137, r53135, r53136, MPFR_RNDN);
        mpfr_set_d(r53138, z, MPFR_RNDN);
        ;
        mpfr_mul(r53140, r53138, r53139, MPFR_RNDN);
        mpfr_set_d(r53141, t, MPFR_RNDN);
        mpfr_mul(r53142, r53140, r53141, MPFR_RNDN);
        mpfr_set_d(r53143, a, MPFR_RNDN);
        mpfr_mul(r53144, r53142, r53143, MPFR_RNDN);
        mpfr_sub(r53145, r53137, r53144, MPFR_RNDN);
        mpfr_set_d(r53146, b, MPFR_RNDN);
        mpfr_add(r53147, r53145, r53146, MPFR_RNDN);
        mpfr_set_d(r53148, c, MPFR_RNDN);
        mpfr_mul(r53149, r53138, r53148, MPFR_RNDN);
        mpfr_div(r53150, r53147, r53149, MPFR_RNDN);
        return mpfr_get_d(r53150, MPFR_RNDN);
}

static mpfr_t r53151, r53152, r53153, r53154, r53155, r53156, r53157, r53158, r53159, r53160, r53161, r53162, r53163, r53164, r53165, r53166, r53167, r53168, r53169, r53170, r53171, r53172, r53173, r53174, r53175, r53176, r53177, r53178, r53179, r53180, r53181, r53182, r53183, r53184;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53151);
        mpfr_init_set_str(r53152, "-9.1079449479494e+81", 10, MPFR_RNDN);
        mpfr_init(r53153);
        mpfr_init(r53154);
        mpfr_init(r53155);
        mpfr_init(r53156);
        mpfr_init(r53157);
        mpfr_init_set_str(r53158, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53159);
        mpfr_init(r53160);
        mpfr_init(r53161);
        mpfr_init(r53162);
        mpfr_init(r53163);
        mpfr_init(r53164);
        mpfr_init(r53165);
        mpfr_init_set_str(r53166, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53167);
        mpfr_init(r53168);
        mpfr_init(r53169);
        mpfr_init(r53170);
        mpfr_init(r53171);
        mpfr_init(r53172);
        mpfr_init_set_str(r53173, "9.137106508768952e+191", 10, MPFR_RNDN);
        mpfr_init(r53174);
        mpfr_init(r53175);
        mpfr_init(r53176);
        mpfr_init_set_str(r53177, "1", 10, MPFR_RNDN);
        mpfr_init(r53178);
        mpfr_init(r53179);
        mpfr_init(r53180);
        mpfr_init(r53181);
        mpfr_init(r53182);
        mpfr_init(r53183);
        mpfr_init(r53184);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r53151, c, MPFR_RNDN);
        ;
        mpfr_set_si(r53153, mpfr_cmp(r53151, r53152) <= 0, MPFR_RNDN);
        mpfr_set_d(r53154, b, MPFR_RNDN);
        mpfr_set_d(r53155, z, MPFR_RNDN);
        mpfr_mul(r53156, r53155, r53151, MPFR_RNDN);
        mpfr_div(r53157, r53154, r53156, MPFR_RNDN);
        ;
        mpfr_set_d(r53159, y, MPFR_RNDN);
        mpfr_set_d(r53160, x, MPFR_RNDN);
        mpfr_div(r53161, r53160, r53151, MPFR_RNDN);
        mpfr_mul(r53162, r53159, r53161, MPFR_RNDN);
        mpfr_div(r53163, r53162, r53155, MPFR_RNDN);
        mpfr_mul(r53164, r53158, r53163, MPFR_RNDN);
        mpfr_add(r53165, r53157, r53164, MPFR_RNDN);
        ;
        mpfr_set_d(r53167, a, MPFR_RNDN);
        mpfr_set_d(r53168, t, MPFR_RNDN);
        mpfr_div(r53169, r53151, r53168, MPFR_RNDN);
        mpfr_div(r53170, r53167, r53169, MPFR_RNDN);
        mpfr_mul(r53171, r53166, r53170, MPFR_RNDN);
        mpfr_sub(r53172, r53165, r53171, MPFR_RNDN);
        ;
        mpfr_set_si(r53174, mpfr_cmp(r53151, r53173) <= 0, MPFR_RNDN);
        mpfr_div(r53175, r53159, r53155, MPFR_RNDN);
        mpfr_mul(r53176, r53175, r53160, MPFR_RNDN);
        ;
        mpfr_div(r53178, r53177, r53151, MPFR_RNDN);
        mpfr_mul(r53179, r53176, r53178, MPFR_RNDN);
        mpfr_mul(r53180, r53158, r53179, MPFR_RNDN);
        mpfr_add(r53181, r53157, r53180, MPFR_RNDN);
        mpfr_sub(r53182, r53181, r53171, MPFR_RNDN);
        if (mpfr_get_si(r53174, MPFR_RNDN)) { mpfr_set(r53183, r53182, MPFR_RNDN); } else { mpfr_set(r53183, r53172, MPFR_RNDN); };
        if (mpfr_get_si(r53153, MPFR_RNDN)) { mpfr_set(r53184, r53172, MPFR_RNDN); } else { mpfr_set(r53184, r53183, MPFR_RNDN); };
        return mpfr_get_d(r53184, MPFR_RNDN);
}

static mpfr_t r53185, r53186, r53187, r53188, r53189, r53190, r53191, r53192, r53193, r53194, r53195, r53196, r53197, r53198, r53199, r53200, r53201, r53202, r53203, r53204, r53205, r53206, r53207, r53208, r53209, r53210, r53211, r53212, r53213, r53214, r53215, r53216, r53217, r53218;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53185);
        mpfr_init_set_str(r53186, "-9.1079449479494e+81", 10, MPFR_RNDN);
        mpfr_init(r53187);
        mpfr_init(r53188);
        mpfr_init(r53189);
        mpfr_init(r53190);
        mpfr_init(r53191);
        mpfr_init_set_str(r53192, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53193);
        mpfr_init(r53194);
        mpfr_init(r53195);
        mpfr_init(r53196);
        mpfr_init(r53197);
        mpfr_init(r53198);
        mpfr_init(r53199);
        mpfr_init_set_str(r53200, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53201);
        mpfr_init(r53202);
        mpfr_init(r53203);
        mpfr_init(r53204);
        mpfr_init(r53205);
        mpfr_init(r53206);
        mpfr_init_set_str(r53207, "9.137106508768952e+191", 10, MPFR_RNDN);
        mpfr_init(r53208);
        mpfr_init(r53209);
        mpfr_init(r53210);
        mpfr_init_set_str(r53211, "1", 10, MPFR_RNDN);
        mpfr_init(r53212);
        mpfr_init(r53213);
        mpfr_init(r53214);
        mpfr_init(r53215);
        mpfr_init(r53216);
        mpfr_init(r53217);
        mpfr_init(r53218);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c) {
        mpfr_set_d(r53185, c, MPFR_RNDN);
        ;
        mpfr_set_si(r53187, mpfr_cmp(r53185, r53186) <= 0, MPFR_RNDN);
        mpfr_set_d(r53188, b, MPFR_RNDN);
        mpfr_set_d(r53189, z, MPFR_RNDN);
        mpfr_mul(r53190, r53189, r53185, MPFR_RNDN);
        mpfr_div(r53191, r53188, r53190, MPFR_RNDN);
        ;
        mpfr_set_d(r53193, y, MPFR_RNDN);
        mpfr_set_d(r53194, x, MPFR_RNDN);
        mpfr_div(r53195, r53194, r53185, MPFR_RNDN);
        mpfr_mul(r53196, r53193, r53195, MPFR_RNDN);
        mpfr_div(r53197, r53196, r53189, MPFR_RNDN);
        mpfr_mul(r53198, r53192, r53197, MPFR_RNDN);
        mpfr_add(r53199, r53191, r53198, MPFR_RNDN);
        ;
        mpfr_set_d(r53201, a, MPFR_RNDN);
        mpfr_set_d(r53202, t, MPFR_RNDN);
        mpfr_div(r53203, r53185, r53202, MPFR_RNDN);
        mpfr_div(r53204, r53201, r53203, MPFR_RNDN);
        mpfr_mul(r53205, r53200, r53204, MPFR_RNDN);
        mpfr_sub(r53206, r53199, r53205, MPFR_RNDN);
        ;
        mpfr_set_si(r53208, mpfr_cmp(r53185, r53207) <= 0, MPFR_RNDN);
        mpfr_div(r53209, r53193, r53189, MPFR_RNDN);
        mpfr_mul(r53210, r53209, r53194, MPFR_RNDN);
        ;
        mpfr_div(r53212, r53211, r53185, MPFR_RNDN);
        mpfr_mul(r53213, r53210, r53212, MPFR_RNDN);
        mpfr_mul(r53214, r53192, r53213, MPFR_RNDN);
        mpfr_add(r53215, r53191, r53214, MPFR_RNDN);
        mpfr_sub(r53216, r53215, r53205, MPFR_RNDN);
        if (mpfr_get_si(r53208, MPFR_RNDN)) { mpfr_set(r53217, r53216, MPFR_RNDN); } else { mpfr_set(r53217, r53206, MPFR_RNDN); };
        if (mpfr_get_si(r53187, MPFR_RNDN)) { mpfr_set(r53218, r53206, MPFR_RNDN); } else { mpfr_set(r53218, r53217, MPFR_RNDN); };
        return mpfr_get_d(r53218, MPFR_RNDN);
}

