#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "AI.Clustering.Hierarchical.Internal:ward from clustering-0.2.1";

double f_if(float x, float y, float z, float t, float a, float b) {
        float r57977 = x;
        float r57978 = y;
        float r57979 = r57977 + r57978;
        float r57980 = z;
        float r57981 = r57979 * r57980;
        float r57982 = t;
        float r57983 = r57982 + r57978;
        float r57984 = a;
        float r57985 = r57983 * r57984;
        float r57986 = r57981 + r57985;
        float r57987 = b;
        float r57988 = r57978 * r57987;
        float r57989 = r57986 - r57988;
        float r57990 = r57977 + r57982;
        float r57991 = r57990 + r57978;
        float r57992 = r57989 / r57991;
        return r57992;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r57993 = x;
        double r57994 = y;
        double r57995 = r57993 + r57994;
        double r57996 = z;
        double r57997 = r57995 * r57996;
        double r57998 = t;
        double r57999 = r57998 + r57994;
        double r58000 = a;
        double r58001 = r57999 * r58000;
        double r58002 = r57997 + r58001;
        double r58003 = b;
        double r58004 = r57994 * r58003;
        double r58005 = r58002 - r58004;
        double r58006 = r57993 + r57998;
        double r58007 = r58006 + r57994;
        double r58008 = r58005 / r58007;
        return r58008;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r58009 = x;
        float r58010 = y;
        float r58011 = r58009 + r58010;
        float r58012 = z;
        float r58013 = r58011 * r58012;
        float r58014 = t;
        float r58015 = r58014 + r58010;
        float r58016 = a;
        float r58017 = r58015 * r58016;
        float r58018 = r58013 + r58017;
        float r58019 = b;
        float r58020 = r58010 * r58019;
        float r58021 = r58018 - r58020;
        float r58022 = r58009 + r58014;
        float r58023 = r58022 + r58010;
        float r58024 = r58021 / r58023;
        float r58025 = -2.7308452534554717e+147f;
        bool r58026 = r58024 <= r58025;
        float r58027 = r58012 + r58016;
        float r58028 = r58027 - r58019;
        float r58029 = 3.29502165973499e+173f;
        bool r58030 = r58024 <= r58029;
        float r58031 = 1.0f;
        float r58032 = r58023 / r58021;
        float r58033 = r58031 / r58032;
        float r58034 = r58030 ? r58033 : r58028;
        float r58035 = r58026 ? r58028 : r58034;
        return r58035;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r58036 = x;
        double r58037 = y;
        double r58038 = r58036 + r58037;
        double r58039 = z;
        double r58040 = r58038 * r58039;
        double r58041 = t;
        double r58042 = r58041 + r58037;
        double r58043 = a;
        double r58044 = r58042 * r58043;
        double r58045 = r58040 + r58044;
        double r58046 = b;
        double r58047 = r58037 * r58046;
        double r58048 = r58045 - r58047;
        double r58049 = r58036 + r58041;
        double r58050 = r58049 + r58037;
        double r58051 = r58048 / r58050;
        double r58052 = -2.7308452534554717e+147;
        bool r58053 = r58051 <= r58052;
        double r58054 = r58039 + r58043;
        double r58055 = r58054 - r58046;
        double r58056 = 3.29502165973499e+173;
        bool r58057 = r58051 <= r58056;
        double r58058 = 1.0;
        double r58059 = r58050 / r58048;
        double r58060 = r58058 / r58059;
        double r58061 = r58057 ? r58060 : r58055;
        double r58062 = r58053 ? r58055 : r58061;
        return r58062;
}

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 r58063, r58064, r58065, r58066, r58067, r58068, r58069, r58070, r58071, r58072, r58073, r58074, r58075, r58076, r58077, r58078;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r58063);
        mpfr_init(r58064);
        mpfr_init(r58065);
        mpfr_init(r58066);
        mpfr_init(r58067);
        mpfr_init(r58068);
        mpfr_init(r58069);
        mpfr_init(r58070);
        mpfr_init(r58071);
        mpfr_init(r58072);
        mpfr_init(r58073);
        mpfr_init(r58074);
        mpfr_init(r58075);
        mpfr_init(r58076);
        mpfr_init(r58077);
        mpfr_init(r58078);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58063, x, MPFR_RNDN);
        mpfr_set_d(r58064, y, MPFR_RNDN);
        mpfr_add(r58065, r58063, r58064, MPFR_RNDN);
        mpfr_set_d(r58066, z, MPFR_RNDN);
        mpfr_mul(r58067, r58065, r58066, MPFR_RNDN);
        mpfr_set_d(r58068, t, MPFR_RNDN);
        mpfr_add(r58069, r58068, r58064, MPFR_RNDN);
        mpfr_set_d(r58070, a, MPFR_RNDN);
        mpfr_mul(r58071, r58069, r58070, MPFR_RNDN);
        mpfr_add(r58072, r58067, r58071, MPFR_RNDN);
        mpfr_set_d(r58073, b, MPFR_RNDN);
        mpfr_mul(r58074, r58064, r58073, MPFR_RNDN);
        mpfr_sub(r58075, r58072, r58074, MPFR_RNDN);
        mpfr_add(r58076, r58063, r58068, MPFR_RNDN);
        mpfr_add(r58077, r58076, r58064, MPFR_RNDN);
        mpfr_div(r58078, r58075, r58077, MPFR_RNDN);
        return mpfr_get_d(r58078, MPFR_RNDN);
}

static mpfr_t r58079, r58080, r58081, r58082, r58083, r58084, r58085, r58086, r58087, r58088, r58089, r58090, r58091, r58092, r58093, r58094, r58095, r58096, r58097, r58098, r58099, r58100, r58101, r58102, r58103, r58104, r58105;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58079);
        mpfr_init(r58080);
        mpfr_init(r58081);
        mpfr_init(r58082);
        mpfr_init(r58083);
        mpfr_init(r58084);
        mpfr_init(r58085);
        mpfr_init(r58086);
        mpfr_init(r58087);
        mpfr_init(r58088);
        mpfr_init(r58089);
        mpfr_init(r58090);
        mpfr_init(r58091);
        mpfr_init(r58092);
        mpfr_init(r58093);
        mpfr_init(r58094);
        mpfr_init_set_str(r58095, "-2.7308452534554717e+147", 10, MPFR_RNDN);
        mpfr_init(r58096);
        mpfr_init(r58097);
        mpfr_init(r58098);
        mpfr_init_set_str(r58099, "3.29502165973499e+173", 10, MPFR_RNDN);
        mpfr_init(r58100);
        mpfr_init_set_str(r58101, "1", 10, MPFR_RNDN);
        mpfr_init(r58102);
        mpfr_init(r58103);
        mpfr_init(r58104);
        mpfr_init(r58105);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58079, x, MPFR_RNDN);
        mpfr_set_d(r58080, y, MPFR_RNDN);
        mpfr_add(r58081, r58079, r58080, MPFR_RNDN);
        mpfr_set_d(r58082, z, MPFR_RNDN);
        mpfr_mul(r58083, r58081, r58082, MPFR_RNDN);
        mpfr_set_d(r58084, t, MPFR_RNDN);
        mpfr_add(r58085, r58084, r58080, MPFR_RNDN);
        mpfr_set_d(r58086, a, MPFR_RNDN);
        mpfr_mul(r58087, r58085, r58086, MPFR_RNDN);
        mpfr_add(r58088, r58083, r58087, MPFR_RNDN);
        mpfr_set_d(r58089, b, MPFR_RNDN);
        mpfr_mul(r58090, r58080, r58089, MPFR_RNDN);
        mpfr_sub(r58091, r58088, r58090, MPFR_RNDN);
        mpfr_add(r58092, r58079, r58084, MPFR_RNDN);
        mpfr_add(r58093, r58092, r58080, MPFR_RNDN);
        mpfr_div(r58094, r58091, r58093, MPFR_RNDN);
        ;
        mpfr_set_si(r58096, mpfr_cmp(r58094, r58095) <= 0, MPFR_RNDN);
        mpfr_add(r58097, r58082, r58086, MPFR_RNDN);
        mpfr_sub(r58098, r58097, r58089, MPFR_RNDN);
        ;
        mpfr_set_si(r58100, mpfr_cmp(r58094, r58099) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58102, r58093, r58091, MPFR_RNDN);
        mpfr_div(r58103, r58101, r58102, MPFR_RNDN);
        if (mpfr_get_si(r58100, MPFR_RNDN)) { mpfr_set(r58104, r58103, MPFR_RNDN); } else { mpfr_set(r58104, r58098, MPFR_RNDN); };
        if (mpfr_get_si(r58096, MPFR_RNDN)) { mpfr_set(r58105, r58098, MPFR_RNDN); } else { mpfr_set(r58105, r58104, MPFR_RNDN); };
        return mpfr_get_d(r58105, MPFR_RNDN);
}

static mpfr_t r58106, r58107, r58108, r58109, r58110, r58111, r58112, r58113, r58114, r58115, r58116, r58117, r58118, r58119, r58120, r58121, r58122, r58123, r58124, r58125, r58126, r58127, r58128, r58129, r58130, r58131, r58132;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58106);
        mpfr_init(r58107);
        mpfr_init(r58108);
        mpfr_init(r58109);
        mpfr_init(r58110);
        mpfr_init(r58111);
        mpfr_init(r58112);
        mpfr_init(r58113);
        mpfr_init(r58114);
        mpfr_init(r58115);
        mpfr_init(r58116);
        mpfr_init(r58117);
        mpfr_init(r58118);
        mpfr_init(r58119);
        mpfr_init(r58120);
        mpfr_init(r58121);
        mpfr_init_set_str(r58122, "-2.7308452534554717e+147", 10, MPFR_RNDN);
        mpfr_init(r58123);
        mpfr_init(r58124);
        mpfr_init(r58125);
        mpfr_init_set_str(r58126, "3.29502165973499e+173", 10, MPFR_RNDN);
        mpfr_init(r58127);
        mpfr_init_set_str(r58128, "1", 10, MPFR_RNDN);
        mpfr_init(r58129);
        mpfr_init(r58130);
        mpfr_init(r58131);
        mpfr_init(r58132);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58106, x, MPFR_RNDN);
        mpfr_set_d(r58107, y, MPFR_RNDN);
        mpfr_add(r58108, r58106, r58107, MPFR_RNDN);
        mpfr_set_d(r58109, z, MPFR_RNDN);
        mpfr_mul(r58110, r58108, r58109, MPFR_RNDN);
        mpfr_set_d(r58111, t, MPFR_RNDN);
        mpfr_add(r58112, r58111, r58107, MPFR_RNDN);
        mpfr_set_d(r58113, a, MPFR_RNDN);
        mpfr_mul(r58114, r58112, r58113, MPFR_RNDN);
        mpfr_add(r58115, r58110, r58114, MPFR_RNDN);
        mpfr_set_d(r58116, b, MPFR_RNDN);
        mpfr_mul(r58117, r58107, r58116, MPFR_RNDN);
        mpfr_sub(r58118, r58115, r58117, MPFR_RNDN);
        mpfr_add(r58119, r58106, r58111, MPFR_RNDN);
        mpfr_add(r58120, r58119, r58107, MPFR_RNDN);
        mpfr_div(r58121, r58118, r58120, MPFR_RNDN);
        ;
        mpfr_set_si(r58123, mpfr_cmp(r58121, r58122) <= 0, MPFR_RNDN);
        mpfr_add(r58124, r58109, r58113, MPFR_RNDN);
        mpfr_sub(r58125, r58124, r58116, MPFR_RNDN);
        ;
        mpfr_set_si(r58127, mpfr_cmp(r58121, r58126) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58129, r58120, r58118, MPFR_RNDN);
        mpfr_div(r58130, r58128, r58129, MPFR_RNDN);
        if (mpfr_get_si(r58127, MPFR_RNDN)) { mpfr_set(r58131, r58130, MPFR_RNDN); } else { mpfr_set(r58131, r58125, MPFR_RNDN); };
        if (mpfr_get_si(r58123, MPFR_RNDN)) { mpfr_set(r58132, r58125, MPFR_RNDN); } else { mpfr_set(r58132, r58131, MPFR_RNDN); };
        return mpfr_get_d(r58132, MPFR_RNDN);
}

