#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 r58399 = x;
        float r58400 = y;
        float r58401 = r58399 + r58400;
        float r58402 = z;
        float r58403 = r58401 * r58402;
        float r58404 = t;
        float r58405 = r58404 + r58400;
        float r58406 = a;
        float r58407 = r58405 * r58406;
        float r58408 = r58403 + r58407;
        float r58409 = b;
        float r58410 = r58400 * r58409;
        float r58411 = r58408 - r58410;
        float r58412 = r58399 + r58404;
        float r58413 = r58412 + r58400;
        float r58414 = r58411 / r58413;
        return r58414;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r58415 = x;
        double r58416 = y;
        double r58417 = r58415 + r58416;
        double r58418 = z;
        double r58419 = r58417 * r58418;
        double r58420 = t;
        double r58421 = r58420 + r58416;
        double r58422 = a;
        double r58423 = r58421 * r58422;
        double r58424 = r58419 + r58423;
        double r58425 = b;
        double r58426 = r58416 * r58425;
        double r58427 = r58424 - r58426;
        double r58428 = r58415 + r58420;
        double r58429 = r58428 + r58416;
        double r58430 = r58427 / r58429;
        return r58430;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r58431 = y;
        float r58432 = -3.227678778156544e+64;
        bool r58433 = r58431 <= r58432;
        float r58434 = z;
        float r58435 = a;
        float r58436 = r58434 + r58435;
        float r58437 = b;
        float r58438 = r58436 - r58437;
        float r58439 = 4.6588687431926046e+125;
        bool r58440 = r58431 <= r58439;
        float r58441 = 1;
        float r58442 = x;
        float r58443 = t;
        float r58444 = r58442 + r58443;
        float r58445 = r58444 + r58431;
        float r58446 = r58442 + r58431;
        float r58447 = r58446 * r58434;
        float r58448 = r58443 + r58431;
        float r58449 = r58448 * r58435;
        float r58450 = r58447 + r58449;
        float r58451 = r58431 * r58437;
        float r58452 = r58450 - r58451;
        float r58453 = r58445 / r58452;
        float r58454 = r58441 / r58453;
        float r58455 = r58440 ? r58454 : r58438;
        float r58456 = r58433 ? r58438 : r58455;
        return r58456;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r58457 = y;
        double r58458 = -3.227678778156544e+64;
        bool r58459 = r58457 <= r58458;
        double r58460 = z;
        double r58461 = a;
        double r58462 = r58460 + r58461;
        double r58463 = b;
        double r58464 = r58462 - r58463;
        double r58465 = 4.6588687431926046e+125;
        bool r58466 = r58457 <= r58465;
        double r58467 = 1;
        double r58468 = x;
        double r58469 = t;
        double r58470 = r58468 + r58469;
        double r58471 = r58470 + r58457;
        double r58472 = r58468 + r58457;
        double r58473 = r58472 * r58460;
        double r58474 = r58469 + r58457;
        double r58475 = r58474 * r58461;
        double r58476 = r58473 + r58475;
        double r58477 = r58457 * r58463;
        double r58478 = r58476 - r58477;
        double r58479 = r58471 / r58478;
        double r58480 = r58467 / r58479;
        double r58481 = r58466 ? r58480 : r58464;
        double r58482 = r58459 ? r58464 : r58481;
        return r58482;
}

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 r58483, r58484, r58485, r58486, r58487, r58488, r58489, r58490, r58491, r58492, r58493, r58494, r58495, r58496, r58497, r58498;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r58483);
        mpfr_init(r58484);
        mpfr_init(r58485);
        mpfr_init(r58486);
        mpfr_init(r58487);
        mpfr_init(r58488);
        mpfr_init(r58489);
        mpfr_init(r58490);
        mpfr_init(r58491);
        mpfr_init(r58492);
        mpfr_init(r58493);
        mpfr_init(r58494);
        mpfr_init(r58495);
        mpfr_init(r58496);
        mpfr_init(r58497);
        mpfr_init(r58498);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58483, x, MPFR_RNDN);
        mpfr_set_d(r58484, y, MPFR_RNDN);
        mpfr_add(r58485, r58483, r58484, MPFR_RNDN);
        mpfr_set_d(r58486, z, MPFR_RNDN);
        mpfr_mul(r58487, r58485, r58486, MPFR_RNDN);
        mpfr_set_d(r58488, t, MPFR_RNDN);
        mpfr_add(r58489, r58488, r58484, MPFR_RNDN);
        mpfr_set_d(r58490, a, MPFR_RNDN);
        mpfr_mul(r58491, r58489, r58490, MPFR_RNDN);
        mpfr_add(r58492, r58487, r58491, MPFR_RNDN);
        mpfr_set_d(r58493, b, MPFR_RNDN);
        mpfr_mul(r58494, r58484, r58493, MPFR_RNDN);
        mpfr_sub(r58495, r58492, r58494, MPFR_RNDN);
        mpfr_add(r58496, r58483, r58488, MPFR_RNDN);
        mpfr_add(r58497, r58496, r58484, MPFR_RNDN);
        mpfr_div(r58498, r58495, r58497, MPFR_RNDN);
        return mpfr_get_d(r58498, MPFR_RNDN);
}

static mpfr_t r58499, r58500, r58501, r58502, r58503, r58504, r58505, r58506, r58507, r58508, r58509, r58510, r58511, r58512, r58513, r58514, r58515, r58516, r58517, r58518, r58519, r58520, r58521, r58522, r58523, r58524;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r58499);
        mpfr_init_set_str(r58500, "-3.227678778156544e+64", 10, MPFR_RNDN);
        mpfr_init(r58501);
        mpfr_init(r58502);
        mpfr_init(r58503);
        mpfr_init(r58504);
        mpfr_init(r58505);
        mpfr_init(r58506);
        mpfr_init_set_str(r58507, "4.6588687431926046e+125", 10, MPFR_RNDN);
        mpfr_init(r58508);
        mpfr_init_set_str(r58509, "1", 10, MPFR_RNDN);
        mpfr_init(r58510);
        mpfr_init(r58511);
        mpfr_init(r58512);
        mpfr_init(r58513);
        mpfr_init(r58514);
        mpfr_init(r58515);
        mpfr_init(r58516);
        mpfr_init(r58517);
        mpfr_init(r58518);
        mpfr_init(r58519);
        mpfr_init(r58520);
        mpfr_init(r58521);
        mpfr_init(r58522);
        mpfr_init(r58523);
        mpfr_init(r58524);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58499, y, MPFR_RNDN);
        ;
        mpfr_set_si(r58501, mpfr_cmp(r58499, r58500) <= 0, MPFR_RNDN);
        mpfr_set_d(r58502, z, MPFR_RNDN);
        mpfr_set_d(r58503, a, MPFR_RNDN);
        mpfr_add(r58504, r58502, r58503, MPFR_RNDN);
        mpfr_set_d(r58505, b, MPFR_RNDN);
        mpfr_sub(r58506, r58504, r58505, MPFR_RNDN);
        ;
        mpfr_set_si(r58508, mpfr_cmp(r58499, r58507) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r58510, x, MPFR_RNDN);
        mpfr_set_d(r58511, t, MPFR_RNDN);
        mpfr_add(r58512, r58510, r58511, MPFR_RNDN);
        mpfr_add(r58513, r58512, r58499, MPFR_RNDN);
        mpfr_add(r58514, r58510, r58499, MPFR_RNDN);
        mpfr_mul(r58515, r58514, r58502, MPFR_RNDN);
        mpfr_add(r58516, r58511, r58499, MPFR_RNDN);
        mpfr_mul(r58517, r58516, r58503, MPFR_RNDN);
        mpfr_add(r58518, r58515, r58517, MPFR_RNDN);
        mpfr_mul(r58519, r58499, r58505, MPFR_RNDN);
        mpfr_sub(r58520, r58518, r58519, MPFR_RNDN);
        mpfr_div(r58521, r58513, r58520, MPFR_RNDN);
        mpfr_div(r58522, r58509, r58521, MPFR_RNDN);
        if (mpfr_get_si(r58508, MPFR_RNDN)) { mpfr_set(r58523, r58522, MPFR_RNDN); } else { mpfr_set(r58523, r58506, MPFR_RNDN); };
        if (mpfr_get_si(r58501, MPFR_RNDN)) { mpfr_set(r58524, r58506, MPFR_RNDN); } else { mpfr_set(r58524, r58523, MPFR_RNDN); };
        return mpfr_get_d(r58524, MPFR_RNDN);
}

static mpfr_t r58525, r58526, r58527, r58528, r58529, r58530, r58531, r58532, r58533, r58534, r58535, r58536, r58537, r58538, r58539, r58540, r58541, r58542, r58543, r58544, r58545, r58546, r58547, r58548, r58549, r58550;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r58525);
        mpfr_init_set_str(r58526, "-3.227678778156544e+64", 10, MPFR_RNDN);
        mpfr_init(r58527);
        mpfr_init(r58528);
        mpfr_init(r58529);
        mpfr_init(r58530);
        mpfr_init(r58531);
        mpfr_init(r58532);
        mpfr_init_set_str(r58533, "4.6588687431926046e+125", 10, MPFR_RNDN);
        mpfr_init(r58534);
        mpfr_init_set_str(r58535, "1", 10, MPFR_RNDN);
        mpfr_init(r58536);
        mpfr_init(r58537);
        mpfr_init(r58538);
        mpfr_init(r58539);
        mpfr_init(r58540);
        mpfr_init(r58541);
        mpfr_init(r58542);
        mpfr_init(r58543);
        mpfr_init(r58544);
        mpfr_init(r58545);
        mpfr_init(r58546);
        mpfr_init(r58547);
        mpfr_init(r58548);
        mpfr_init(r58549);
        mpfr_init(r58550);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58525, y, MPFR_RNDN);
        ;
        mpfr_set_si(r58527, mpfr_cmp(r58525, r58526) <= 0, MPFR_RNDN);
        mpfr_set_d(r58528, z, MPFR_RNDN);
        mpfr_set_d(r58529, a, MPFR_RNDN);
        mpfr_add(r58530, r58528, r58529, MPFR_RNDN);
        mpfr_set_d(r58531, b, MPFR_RNDN);
        mpfr_sub(r58532, r58530, r58531, MPFR_RNDN);
        ;
        mpfr_set_si(r58534, mpfr_cmp(r58525, r58533) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r58536, x, MPFR_RNDN);
        mpfr_set_d(r58537, t, MPFR_RNDN);
        mpfr_add(r58538, r58536, r58537, MPFR_RNDN);
        mpfr_add(r58539, r58538, r58525, MPFR_RNDN);
        mpfr_add(r58540, r58536, r58525, MPFR_RNDN);
        mpfr_mul(r58541, r58540, r58528, MPFR_RNDN);
        mpfr_add(r58542, r58537, r58525, MPFR_RNDN);
        mpfr_mul(r58543, r58542, r58529, MPFR_RNDN);
        mpfr_add(r58544, r58541, r58543, MPFR_RNDN);
        mpfr_mul(r58545, r58525, r58531, MPFR_RNDN);
        mpfr_sub(r58546, r58544, r58545, MPFR_RNDN);
        mpfr_div(r58547, r58539, r58546, MPFR_RNDN);
        mpfr_div(r58548, r58535, r58547, MPFR_RNDN);
        if (mpfr_get_si(r58534, MPFR_RNDN)) { mpfr_set(r58549, r58548, MPFR_RNDN); } else { mpfr_set(r58549, r58532, MPFR_RNDN); };
        if (mpfr_get_si(r58527, MPFR_RNDN)) { mpfr_set(r58550, r58532, MPFR_RNDN); } else { mpfr_set(r58550, r58549, MPFR_RNDN); };
        return mpfr_get_d(r58550, MPFR_RNDN);
}

