#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 r57230 = x;
        float r57231 = y;
        float r57232 = r57230 + r57231;
        float r57233 = z;
        float r57234 = r57232 * r57233;
        float r57235 = t;
        float r57236 = r57235 + r57231;
        float r57237 = a;
        float r57238 = r57236 * r57237;
        float r57239 = r57234 + r57238;
        float r57240 = b;
        float r57241 = r57231 * r57240;
        float r57242 = r57239 - r57241;
        float r57243 = r57230 + r57235;
        float r57244 = r57243 + r57231;
        float r57245 = r57242 / r57244;
        return r57245;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r57246 = x;
        double r57247 = y;
        double r57248 = r57246 + r57247;
        double r57249 = z;
        double r57250 = r57248 * r57249;
        double r57251 = t;
        double r57252 = r57251 + r57247;
        double r57253 = a;
        double r57254 = r57252 * r57253;
        double r57255 = r57250 + r57254;
        double r57256 = b;
        double r57257 = r57247 * r57256;
        double r57258 = r57255 - r57257;
        double r57259 = r57246 + r57251;
        double r57260 = r57259 + r57247;
        double r57261 = r57258 / r57260;
        return r57261;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r57262 = y;
        float r57263 = -3.227678778156544e+64;
        bool r57264 = r57262 <= r57263;
        float r57265 = z;
        float r57266 = a;
        float r57267 = r57265 + r57266;
        float r57268 = b;
        float r57269 = r57267 - r57268;
        float r57270 = 4.6588687431926046e+125;
        bool r57271 = r57262 <= r57270;
        float r57272 = 1;
        float r57273 = x;
        float r57274 = t;
        float r57275 = r57273 + r57274;
        float r57276 = r57275 + r57262;
        float r57277 = r57273 + r57262;
        float r57278 = r57277 * r57265;
        float r57279 = r57274 + r57262;
        float r57280 = r57279 * r57266;
        float r57281 = r57278 + r57280;
        float r57282 = r57262 * r57268;
        float r57283 = r57281 - r57282;
        float r57284 = r57276 / r57283;
        float r57285 = r57272 / r57284;
        float r57286 = r57271 ? r57285 : r57269;
        float r57287 = r57264 ? r57269 : r57286;
        return r57287;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r57288 = y;
        double r57289 = -3.227678778156544e+64;
        bool r57290 = r57288 <= r57289;
        double r57291 = z;
        double r57292 = a;
        double r57293 = r57291 + r57292;
        double r57294 = b;
        double r57295 = r57293 - r57294;
        double r57296 = 4.6588687431926046e+125;
        bool r57297 = r57288 <= r57296;
        double r57298 = 1;
        double r57299 = x;
        double r57300 = t;
        double r57301 = r57299 + r57300;
        double r57302 = r57301 + r57288;
        double r57303 = r57299 + r57288;
        double r57304 = r57303 * r57291;
        double r57305 = r57300 + r57288;
        double r57306 = r57305 * r57292;
        double r57307 = r57304 + r57306;
        double r57308 = r57288 * r57294;
        double r57309 = r57307 - r57308;
        double r57310 = r57302 / r57309;
        double r57311 = r57298 / r57310;
        double r57312 = r57297 ? r57311 : r57295;
        double r57313 = r57290 ? r57295 : r57312;
        return r57313;
}

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 r57314, r57315, r57316, r57317, r57318, r57319, r57320, r57321, r57322, r57323, r57324, r57325, r57326, r57327, r57328, r57329;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r57314);
        mpfr_init(r57315);
        mpfr_init(r57316);
        mpfr_init(r57317);
        mpfr_init(r57318);
        mpfr_init(r57319);
        mpfr_init(r57320);
        mpfr_init(r57321);
        mpfr_init(r57322);
        mpfr_init(r57323);
        mpfr_init(r57324);
        mpfr_init(r57325);
        mpfr_init(r57326);
        mpfr_init(r57327);
        mpfr_init(r57328);
        mpfr_init(r57329);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r57314, x, MPFR_RNDN);
        mpfr_set_d(r57315, y, MPFR_RNDN);
        mpfr_add(r57316, r57314, r57315, MPFR_RNDN);
        mpfr_set_d(r57317, z, MPFR_RNDN);
        mpfr_mul(r57318, r57316, r57317, MPFR_RNDN);
        mpfr_set_d(r57319, t, MPFR_RNDN);
        mpfr_add(r57320, r57319, r57315, MPFR_RNDN);
        mpfr_set_d(r57321, a, MPFR_RNDN);
        mpfr_mul(r57322, r57320, r57321, MPFR_RNDN);
        mpfr_add(r57323, r57318, r57322, MPFR_RNDN);
        mpfr_set_d(r57324, b, MPFR_RNDN);
        mpfr_mul(r57325, r57315, r57324, MPFR_RNDN);
        mpfr_sub(r57326, r57323, r57325, MPFR_RNDN);
        mpfr_add(r57327, r57314, r57319, MPFR_RNDN);
        mpfr_add(r57328, r57327, r57315, MPFR_RNDN);
        mpfr_div(r57329, r57326, r57328, MPFR_RNDN);
        return mpfr_get_d(r57329, MPFR_RNDN);
}

static mpfr_t r57330, r57331, r57332, r57333, r57334, r57335, r57336, r57337, r57338, r57339, r57340, r57341, r57342, r57343, r57344, r57345, r57346, r57347, r57348, r57349, r57350, r57351, r57352, r57353, r57354, r57355;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r57330);
        mpfr_init_set_str(r57331, "-3.227678778156544e+64", 10, MPFR_RNDN);
        mpfr_init(r57332);
        mpfr_init(r57333);
        mpfr_init(r57334);
        mpfr_init(r57335);
        mpfr_init(r57336);
        mpfr_init(r57337);
        mpfr_init_set_str(r57338, "4.6588687431926046e+125", 10, MPFR_RNDN);
        mpfr_init(r57339);
        mpfr_init_set_str(r57340, "1", 10, MPFR_RNDN);
        mpfr_init(r57341);
        mpfr_init(r57342);
        mpfr_init(r57343);
        mpfr_init(r57344);
        mpfr_init(r57345);
        mpfr_init(r57346);
        mpfr_init(r57347);
        mpfr_init(r57348);
        mpfr_init(r57349);
        mpfr_init(r57350);
        mpfr_init(r57351);
        mpfr_init(r57352);
        mpfr_init(r57353);
        mpfr_init(r57354);
        mpfr_init(r57355);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r57330, y, MPFR_RNDN);
        ;
        mpfr_set_si(r57332, mpfr_cmp(r57330, r57331) <= 0, MPFR_RNDN);
        mpfr_set_d(r57333, z, MPFR_RNDN);
        mpfr_set_d(r57334, a, MPFR_RNDN);
        mpfr_add(r57335, r57333, r57334, MPFR_RNDN);
        mpfr_set_d(r57336, b, MPFR_RNDN);
        mpfr_sub(r57337, r57335, r57336, MPFR_RNDN);
        ;
        mpfr_set_si(r57339, mpfr_cmp(r57330, r57338) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r57341, x, MPFR_RNDN);
        mpfr_set_d(r57342, t, MPFR_RNDN);
        mpfr_add(r57343, r57341, r57342, MPFR_RNDN);
        mpfr_add(r57344, r57343, r57330, MPFR_RNDN);
        mpfr_add(r57345, r57341, r57330, MPFR_RNDN);
        mpfr_mul(r57346, r57345, r57333, MPFR_RNDN);
        mpfr_add(r57347, r57342, r57330, MPFR_RNDN);
        mpfr_mul(r57348, r57347, r57334, MPFR_RNDN);
        mpfr_add(r57349, r57346, r57348, MPFR_RNDN);
        mpfr_mul(r57350, r57330, r57336, MPFR_RNDN);
        mpfr_sub(r57351, r57349, r57350, MPFR_RNDN);
        mpfr_div(r57352, r57344, r57351, MPFR_RNDN);
        mpfr_div(r57353, r57340, r57352, MPFR_RNDN);
        if (mpfr_get_si(r57339, MPFR_RNDN)) { mpfr_set(r57354, r57353, MPFR_RNDN); } else { mpfr_set(r57354, r57337, MPFR_RNDN); };
        if (mpfr_get_si(r57332, MPFR_RNDN)) { mpfr_set(r57355, r57337, MPFR_RNDN); } else { mpfr_set(r57355, r57354, MPFR_RNDN); };
        return mpfr_get_d(r57355, MPFR_RNDN);
}

static mpfr_t r57356, r57357, r57358, r57359, r57360, r57361, r57362, r57363, r57364, r57365, r57366, r57367, r57368, r57369, r57370, r57371, r57372, r57373, r57374, r57375, r57376, r57377, r57378, r57379, r57380, r57381;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r57356);
        mpfr_init_set_str(r57357, "-3.227678778156544e+64", 10, MPFR_RNDN);
        mpfr_init(r57358);
        mpfr_init(r57359);
        mpfr_init(r57360);
        mpfr_init(r57361);
        mpfr_init(r57362);
        mpfr_init(r57363);
        mpfr_init_set_str(r57364, "4.6588687431926046e+125", 10, MPFR_RNDN);
        mpfr_init(r57365);
        mpfr_init_set_str(r57366, "1", 10, MPFR_RNDN);
        mpfr_init(r57367);
        mpfr_init(r57368);
        mpfr_init(r57369);
        mpfr_init(r57370);
        mpfr_init(r57371);
        mpfr_init(r57372);
        mpfr_init(r57373);
        mpfr_init(r57374);
        mpfr_init(r57375);
        mpfr_init(r57376);
        mpfr_init(r57377);
        mpfr_init(r57378);
        mpfr_init(r57379);
        mpfr_init(r57380);
        mpfr_init(r57381);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r57356, y, MPFR_RNDN);
        ;
        mpfr_set_si(r57358, mpfr_cmp(r57356, r57357) <= 0, MPFR_RNDN);
        mpfr_set_d(r57359, z, MPFR_RNDN);
        mpfr_set_d(r57360, a, MPFR_RNDN);
        mpfr_add(r57361, r57359, r57360, MPFR_RNDN);
        mpfr_set_d(r57362, b, MPFR_RNDN);
        mpfr_sub(r57363, r57361, r57362, MPFR_RNDN);
        ;
        mpfr_set_si(r57365, mpfr_cmp(r57356, r57364) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r57367, x, MPFR_RNDN);
        mpfr_set_d(r57368, t, MPFR_RNDN);
        mpfr_add(r57369, r57367, r57368, MPFR_RNDN);
        mpfr_add(r57370, r57369, r57356, MPFR_RNDN);
        mpfr_add(r57371, r57367, r57356, MPFR_RNDN);
        mpfr_mul(r57372, r57371, r57359, MPFR_RNDN);
        mpfr_add(r57373, r57368, r57356, MPFR_RNDN);
        mpfr_mul(r57374, r57373, r57360, MPFR_RNDN);
        mpfr_add(r57375, r57372, r57374, MPFR_RNDN);
        mpfr_mul(r57376, r57356, r57362, MPFR_RNDN);
        mpfr_sub(r57377, r57375, r57376, MPFR_RNDN);
        mpfr_div(r57378, r57370, r57377, MPFR_RNDN);
        mpfr_div(r57379, r57366, r57378, MPFR_RNDN);
        if (mpfr_get_si(r57365, MPFR_RNDN)) { mpfr_set(r57380, r57379, MPFR_RNDN); } else { mpfr_set(r57380, r57363, MPFR_RNDN); };
        if (mpfr_get_si(r57358, MPFR_RNDN)) { mpfr_set(r57381, r57363, MPFR_RNDN); } else { mpfr_set(r57381, r57380, MPFR_RNDN); };
        return mpfr_get_d(r57381, MPFR_RNDN);
}

