#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 r58513 = x;
        float r58514 = y;
        float r58515 = r58513 + r58514;
        float r58516 = z;
        float r58517 = r58515 * r58516;
        float r58518 = t;
        float r58519 = r58518 + r58514;
        float r58520 = a;
        float r58521 = r58519 * r58520;
        float r58522 = r58517 + r58521;
        float r58523 = b;
        float r58524 = r58514 * r58523;
        float r58525 = r58522 - r58524;
        float r58526 = r58513 + r58518;
        float r58527 = r58526 + r58514;
        float r58528 = r58525 / r58527;
        return r58528;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r58529 = x;
        double r58530 = y;
        double r58531 = r58529 + r58530;
        double r58532 = z;
        double r58533 = r58531 * r58532;
        double r58534 = t;
        double r58535 = r58534 + r58530;
        double r58536 = a;
        double r58537 = r58535 * r58536;
        double r58538 = r58533 + r58537;
        double r58539 = b;
        double r58540 = r58530 * r58539;
        double r58541 = r58538 - r58540;
        double r58542 = r58529 + r58534;
        double r58543 = r58542 + r58530;
        double r58544 = r58541 / r58543;
        return r58544;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r58545 = y;
        float r58546 = -2.4207781418622835e+64;
        bool r58547 = r58545 <= r58546;
        float r58548 = z;
        float r58549 = a;
        float r58550 = r58548 + r58549;
        float r58551 = b;
        float r58552 = r58550 - r58551;
        float r58553 = 4.990162669943169e+125;
        bool r58554 = r58545 <= r58553;
        float r58555 = 1;
        float r58556 = x;
        float r58557 = t;
        float r58558 = r58556 + r58557;
        float r58559 = r58558 + r58545;
        float r58560 = r58556 + r58545;
        float r58561 = r58560 * r58548;
        float r58562 = r58557 + r58545;
        float r58563 = r58562 * r58549;
        float r58564 = r58561 + r58563;
        float r58565 = r58545 * r58551;
        float r58566 = r58564 - r58565;
        float r58567 = r58559 / r58566;
        float r58568 = r58555 / r58567;
        float r58569 = r58554 ? r58568 : r58552;
        float r58570 = r58547 ? r58552 : r58569;
        return r58570;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r58571 = y;
        double r58572 = -2.4207781418622835e+64;
        bool r58573 = r58571 <= r58572;
        double r58574 = z;
        double r58575 = a;
        double r58576 = r58574 + r58575;
        double r58577 = b;
        double r58578 = r58576 - r58577;
        double r58579 = 4.990162669943169e+125;
        bool r58580 = r58571 <= r58579;
        double r58581 = 1;
        double r58582 = x;
        double r58583 = t;
        double r58584 = r58582 + r58583;
        double r58585 = r58584 + r58571;
        double r58586 = r58582 + r58571;
        double r58587 = r58586 * r58574;
        double r58588 = r58583 + r58571;
        double r58589 = r58588 * r58575;
        double r58590 = r58587 + r58589;
        double r58591 = r58571 * r58577;
        double r58592 = r58590 - r58591;
        double r58593 = r58585 / r58592;
        double r58594 = r58581 / r58593;
        double r58595 = r58580 ? r58594 : r58578;
        double r58596 = r58573 ? r58578 : r58595;
        return r58596;
}

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 r58597, r58598, r58599, r58600, r58601, r58602, r58603, r58604, r58605, r58606, r58607, r58608, r58609, r58610, r58611, r58612;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58597);
        mpfr_init(r58598);
        mpfr_init(r58599);
        mpfr_init(r58600);
        mpfr_init(r58601);
        mpfr_init(r58602);
        mpfr_init(r58603);
        mpfr_init(r58604);
        mpfr_init(r58605);
        mpfr_init(r58606);
        mpfr_init(r58607);
        mpfr_init(r58608);
        mpfr_init(r58609);
        mpfr_init(r58610);
        mpfr_init(r58611);
        mpfr_init(r58612);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58597, x, MPFR_RNDN);
        mpfr_set_d(r58598, y, MPFR_RNDN);
        mpfr_add(r58599, r58597, r58598, MPFR_RNDN);
        mpfr_set_d(r58600, z, MPFR_RNDN);
        mpfr_mul(r58601, r58599, r58600, MPFR_RNDN);
        mpfr_set_d(r58602, t, MPFR_RNDN);
        mpfr_add(r58603, r58602, r58598, MPFR_RNDN);
        mpfr_set_d(r58604, a, MPFR_RNDN);
        mpfr_mul(r58605, r58603, r58604, MPFR_RNDN);
        mpfr_add(r58606, r58601, r58605, MPFR_RNDN);
        mpfr_set_d(r58607, b, MPFR_RNDN);
        mpfr_mul(r58608, r58598, r58607, MPFR_RNDN);
        mpfr_sub(r58609, r58606, r58608, MPFR_RNDN);
        mpfr_add(r58610, r58597, r58602, MPFR_RNDN);
        mpfr_add(r58611, r58610, r58598, MPFR_RNDN);
        mpfr_div(r58612, r58609, r58611, MPFR_RNDN);
        return mpfr_get_d(r58612, MPFR_RNDN);
}

static mpfr_t r58613, r58614, r58615, r58616, r58617, r58618, r58619, r58620, r58621, r58622, r58623, r58624, r58625, r58626, r58627, r58628, r58629, r58630, r58631, r58632, r58633, r58634, r58635, r58636, r58637, r58638;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58613);
        mpfr_init_set_str(r58614, "-2.4207781418622835e+64", 10, MPFR_RNDN);
        mpfr_init(r58615);
        mpfr_init(r58616);
        mpfr_init(r58617);
        mpfr_init(r58618);
        mpfr_init(r58619);
        mpfr_init(r58620);
        mpfr_init_set_str(r58621, "4.990162669943169e+125", 10, MPFR_RNDN);
        mpfr_init(r58622);
        mpfr_init_set_str(r58623, "1", 10, MPFR_RNDN);
        mpfr_init(r58624);
        mpfr_init(r58625);
        mpfr_init(r58626);
        mpfr_init(r58627);
        mpfr_init(r58628);
        mpfr_init(r58629);
        mpfr_init(r58630);
        mpfr_init(r58631);
        mpfr_init(r58632);
        mpfr_init(r58633);
        mpfr_init(r58634);
        mpfr_init(r58635);
        mpfr_init(r58636);
        mpfr_init(r58637);
        mpfr_init(r58638);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58613, y, MPFR_RNDN);
        ;
        mpfr_set_si(r58615, mpfr_cmp(r58613, r58614) <= 0, MPFR_RNDN);
        mpfr_set_d(r58616, z, MPFR_RNDN);
        mpfr_set_d(r58617, a, MPFR_RNDN);
        mpfr_add(r58618, r58616, r58617, MPFR_RNDN);
        mpfr_set_d(r58619, b, MPFR_RNDN);
        mpfr_sub(r58620, r58618, r58619, MPFR_RNDN);
        ;
        mpfr_set_si(r58622, mpfr_cmp(r58613, r58621) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r58624, x, MPFR_RNDN);
        mpfr_set_d(r58625, t, MPFR_RNDN);
        mpfr_add(r58626, r58624, r58625, MPFR_RNDN);
        mpfr_add(r58627, r58626, r58613, MPFR_RNDN);
        mpfr_add(r58628, r58624, r58613, MPFR_RNDN);
        mpfr_mul(r58629, r58628, r58616, MPFR_RNDN);
        mpfr_add(r58630, r58625, r58613, MPFR_RNDN);
        mpfr_mul(r58631, r58630, r58617, MPFR_RNDN);
        mpfr_add(r58632, r58629, r58631, MPFR_RNDN);
        mpfr_mul(r58633, r58613, r58619, MPFR_RNDN);
        mpfr_sub(r58634, r58632, r58633, MPFR_RNDN);
        mpfr_div(r58635, r58627, r58634, MPFR_RNDN);
        mpfr_div(r58636, r58623, r58635, MPFR_RNDN);
        if (mpfr_get_si(r58622, MPFR_RNDN)) { mpfr_set(r58637, r58636, MPFR_RNDN); } else { mpfr_set(r58637, r58620, MPFR_RNDN); };
        if (mpfr_get_si(r58615, MPFR_RNDN)) { mpfr_set(r58638, r58620, MPFR_RNDN); } else { mpfr_set(r58638, r58637, MPFR_RNDN); };
        return mpfr_get_d(r58638, MPFR_RNDN);
}

static mpfr_t r58639, r58640, r58641, r58642, r58643, r58644, r58645, r58646, r58647, r58648, r58649, r58650, r58651, r58652, r58653, r58654, r58655, r58656, r58657, r58658, r58659, r58660, r58661, r58662, r58663, r58664;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58639);
        mpfr_init_set_str(r58640, "-2.4207781418622835e+64", 10, MPFR_RNDN);
        mpfr_init(r58641);
        mpfr_init(r58642);
        mpfr_init(r58643);
        mpfr_init(r58644);
        mpfr_init(r58645);
        mpfr_init(r58646);
        mpfr_init_set_str(r58647, "4.990162669943169e+125", 10, MPFR_RNDN);
        mpfr_init(r58648);
        mpfr_init_set_str(r58649, "1", 10, MPFR_RNDN);
        mpfr_init(r58650);
        mpfr_init(r58651);
        mpfr_init(r58652);
        mpfr_init(r58653);
        mpfr_init(r58654);
        mpfr_init(r58655);
        mpfr_init(r58656);
        mpfr_init(r58657);
        mpfr_init(r58658);
        mpfr_init(r58659);
        mpfr_init(r58660);
        mpfr_init(r58661);
        mpfr_init(r58662);
        mpfr_init(r58663);
        mpfr_init(r58664);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58639, y, MPFR_RNDN);
        ;
        mpfr_set_si(r58641, mpfr_cmp(r58639, r58640) <= 0, MPFR_RNDN);
        mpfr_set_d(r58642, z, MPFR_RNDN);
        mpfr_set_d(r58643, a, MPFR_RNDN);
        mpfr_add(r58644, r58642, r58643, MPFR_RNDN);
        mpfr_set_d(r58645, b, MPFR_RNDN);
        mpfr_sub(r58646, r58644, r58645, MPFR_RNDN);
        ;
        mpfr_set_si(r58648, mpfr_cmp(r58639, r58647) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r58650, x, MPFR_RNDN);
        mpfr_set_d(r58651, t, MPFR_RNDN);
        mpfr_add(r58652, r58650, r58651, MPFR_RNDN);
        mpfr_add(r58653, r58652, r58639, MPFR_RNDN);
        mpfr_add(r58654, r58650, r58639, MPFR_RNDN);
        mpfr_mul(r58655, r58654, r58642, MPFR_RNDN);
        mpfr_add(r58656, r58651, r58639, MPFR_RNDN);
        mpfr_mul(r58657, r58656, r58643, MPFR_RNDN);
        mpfr_add(r58658, r58655, r58657, MPFR_RNDN);
        mpfr_mul(r58659, r58639, r58645, MPFR_RNDN);
        mpfr_sub(r58660, r58658, r58659, MPFR_RNDN);
        mpfr_div(r58661, r58653, r58660, MPFR_RNDN);
        mpfr_div(r58662, r58649, r58661, MPFR_RNDN);
        if (mpfr_get_si(r58648, MPFR_RNDN)) { mpfr_set(r58663, r58662, MPFR_RNDN); } else { mpfr_set(r58663, r58646, MPFR_RNDN); };
        if (mpfr_get_si(r58641, MPFR_RNDN)) { mpfr_set(r58664, r58646, MPFR_RNDN); } else { mpfr_set(r58664, r58663, MPFR_RNDN); };
        return mpfr_get_d(r58664, MPFR_RNDN);
}

