#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 r58367 = x;
        float r58368 = y;
        float r58369 = r58367 + r58368;
        float r58370 = z;
        float r58371 = r58369 * r58370;
        float r58372 = t;
        float r58373 = r58372 + r58368;
        float r58374 = a;
        float r58375 = r58373 * r58374;
        float r58376 = r58371 + r58375;
        float r58377 = b;
        float r58378 = r58368 * r58377;
        float r58379 = r58376 - r58378;
        float r58380 = r58367 + r58372;
        float r58381 = r58380 + r58368;
        float r58382 = r58379 / r58381;
        return r58382;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r58383 = x;
        double r58384 = y;
        double r58385 = r58383 + r58384;
        double r58386 = z;
        double r58387 = r58385 * r58386;
        double r58388 = t;
        double r58389 = r58388 + r58384;
        double r58390 = a;
        double r58391 = r58389 * r58390;
        double r58392 = r58387 + r58391;
        double r58393 = b;
        double r58394 = r58384 * r58393;
        double r58395 = r58392 - r58394;
        double r58396 = r58383 + r58388;
        double r58397 = r58396 + r58384;
        double r58398 = r58395 / r58397;
        return r58398;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r58399 = y;
        float r58400 = -7.6232979502083015e+59;
        bool r58401 = r58399 <= r58400;
        float r58402 = z;
        float r58403 = a;
        float r58404 = r58402 + r58403;
        float r58405 = b;
        float r58406 = r58404 - r58405;
        float r58407 = 1.3289947361167829e+126;
        bool r58408 = r58399 <= r58407;
        float r58409 = 1;
        float r58410 = x;
        float r58411 = t;
        float r58412 = r58410 + r58411;
        float r58413 = r58412 + r58399;
        float r58414 = r58410 + r58399;
        float r58415 = r58414 * r58402;
        float r58416 = r58411 + r58399;
        float r58417 = r58416 * r58403;
        float r58418 = r58415 + r58417;
        float r58419 = r58399 * r58405;
        float r58420 = r58418 - r58419;
        float r58421 = r58413 / r58420;
        float r58422 = r58409 / r58421;
        float r58423 = r58408 ? r58422 : r58406;
        float r58424 = r58401 ? r58406 : r58423;
        return r58424;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r58425 = y;
        double r58426 = -7.6232979502083015e+59;
        bool r58427 = r58425 <= r58426;
        double r58428 = z;
        double r58429 = a;
        double r58430 = r58428 + r58429;
        double r58431 = b;
        double r58432 = r58430 - r58431;
        double r58433 = 1.3289947361167829e+126;
        bool r58434 = r58425 <= r58433;
        double r58435 = 1;
        double r58436 = x;
        double r58437 = t;
        double r58438 = r58436 + r58437;
        double r58439 = r58438 + r58425;
        double r58440 = r58436 + r58425;
        double r58441 = r58440 * r58428;
        double r58442 = r58437 + r58425;
        double r58443 = r58442 * r58429;
        double r58444 = r58441 + r58443;
        double r58445 = r58425 * r58431;
        double r58446 = r58444 - r58445;
        double r58447 = r58439 / r58446;
        double r58448 = r58435 / r58447;
        double r58449 = r58434 ? r58448 : r58432;
        double r58450 = r58427 ? r58432 : r58449;
        return r58450;
}

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 r58451, r58452, r58453, r58454, r58455, r58456, r58457, r58458, r58459, r58460, r58461, r58462, r58463, r58464, r58465, r58466;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58451);
        mpfr_init(r58452);
        mpfr_init(r58453);
        mpfr_init(r58454);
        mpfr_init(r58455);
        mpfr_init(r58456);
        mpfr_init(r58457);
        mpfr_init(r58458);
        mpfr_init(r58459);
        mpfr_init(r58460);
        mpfr_init(r58461);
        mpfr_init(r58462);
        mpfr_init(r58463);
        mpfr_init(r58464);
        mpfr_init(r58465);
        mpfr_init(r58466);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58451, x, MPFR_RNDN);
        mpfr_set_d(r58452, y, MPFR_RNDN);
        mpfr_add(r58453, r58451, r58452, MPFR_RNDN);
        mpfr_set_d(r58454, z, MPFR_RNDN);
        mpfr_mul(r58455, r58453, r58454, MPFR_RNDN);
        mpfr_set_d(r58456, t, MPFR_RNDN);
        mpfr_add(r58457, r58456, r58452, MPFR_RNDN);
        mpfr_set_d(r58458, a, MPFR_RNDN);
        mpfr_mul(r58459, r58457, r58458, MPFR_RNDN);
        mpfr_add(r58460, r58455, r58459, MPFR_RNDN);
        mpfr_set_d(r58461, b, MPFR_RNDN);
        mpfr_mul(r58462, r58452, r58461, MPFR_RNDN);
        mpfr_sub(r58463, r58460, r58462, MPFR_RNDN);
        mpfr_add(r58464, r58451, r58456, MPFR_RNDN);
        mpfr_add(r58465, r58464, r58452, MPFR_RNDN);
        mpfr_div(r58466, r58463, r58465, MPFR_RNDN);
        return mpfr_get_d(r58466, MPFR_RNDN);
}

static mpfr_t r58467, r58468, r58469, r58470, r58471, r58472, r58473, r58474, r58475, r58476, r58477, r58478, r58479, r58480, r58481, r58482, r58483, r58484, r58485, r58486, r58487, r58488, r58489, r58490, r58491, r58492;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58467);
        mpfr_init_set_str(r58468, "-7.6232979502083015e+59", 10, MPFR_RNDN);
        mpfr_init(r58469);
        mpfr_init(r58470);
        mpfr_init(r58471);
        mpfr_init(r58472);
        mpfr_init(r58473);
        mpfr_init(r58474);
        mpfr_init_set_str(r58475, "1.3289947361167829e+126", 10, MPFR_RNDN);
        mpfr_init(r58476);
        mpfr_init_set_str(r58477, "1", 10, MPFR_RNDN);
        mpfr_init(r58478);
        mpfr_init(r58479);
        mpfr_init(r58480);
        mpfr_init(r58481);
        mpfr_init(r58482);
        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);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58467, y, MPFR_RNDN);
        ;
        mpfr_set_si(r58469, mpfr_cmp(r58467, r58468) <= 0, MPFR_RNDN);
        mpfr_set_d(r58470, z, MPFR_RNDN);
        mpfr_set_d(r58471, a, MPFR_RNDN);
        mpfr_add(r58472, r58470, r58471, MPFR_RNDN);
        mpfr_set_d(r58473, b, MPFR_RNDN);
        mpfr_sub(r58474, r58472, r58473, MPFR_RNDN);
        ;
        mpfr_set_si(r58476, mpfr_cmp(r58467, r58475) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r58478, x, MPFR_RNDN);
        mpfr_set_d(r58479, t, MPFR_RNDN);
        mpfr_add(r58480, r58478, r58479, MPFR_RNDN);
        mpfr_add(r58481, r58480, r58467, MPFR_RNDN);
        mpfr_add(r58482, r58478, r58467, MPFR_RNDN);
        mpfr_mul(r58483, r58482, r58470, MPFR_RNDN);
        mpfr_add(r58484, r58479, r58467, MPFR_RNDN);
        mpfr_mul(r58485, r58484, r58471, MPFR_RNDN);
        mpfr_add(r58486, r58483, r58485, MPFR_RNDN);
        mpfr_mul(r58487, r58467, r58473, MPFR_RNDN);
        mpfr_sub(r58488, r58486, r58487, MPFR_RNDN);
        mpfr_div(r58489, r58481, r58488, MPFR_RNDN);
        mpfr_div(r58490, r58477, r58489, MPFR_RNDN);
        if (mpfr_get_si(r58476, MPFR_RNDN)) { mpfr_set(r58491, r58490, MPFR_RNDN); } else { mpfr_set(r58491, r58474, MPFR_RNDN); };
        if (mpfr_get_si(r58469, MPFR_RNDN)) { mpfr_set(r58492, r58474, MPFR_RNDN); } else { mpfr_set(r58492, r58491, MPFR_RNDN); };
        return mpfr_get_d(r58492, MPFR_RNDN);
}

static mpfr_t r58493, r58494, r58495, r58496, r58497, r58498, r58499, r58500, r58501, r58502, r58503, r58504, r58505, r58506, r58507, r58508, r58509, r58510, r58511, r58512, r58513, r58514, r58515, r58516, r58517, r58518;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58493);
        mpfr_init_set_str(r58494, "-7.6232979502083015e+59", 10, MPFR_RNDN);
        mpfr_init(r58495);
        mpfr_init(r58496);
        mpfr_init(r58497);
        mpfr_init(r58498);
        mpfr_init(r58499);
        mpfr_init(r58500);
        mpfr_init_set_str(r58501, "1.3289947361167829e+126", 10, MPFR_RNDN);
        mpfr_init(r58502);
        mpfr_init_set_str(r58503, "1", 10, MPFR_RNDN);
        mpfr_init(r58504);
        mpfr_init(r58505);
        mpfr_init(r58506);
        mpfr_init(r58507);
        mpfr_init(r58508);
        mpfr_init(r58509);
        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);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r58493, y, MPFR_RNDN);
        ;
        mpfr_set_si(r58495, mpfr_cmp(r58493, r58494) <= 0, MPFR_RNDN);
        mpfr_set_d(r58496, z, MPFR_RNDN);
        mpfr_set_d(r58497, a, MPFR_RNDN);
        mpfr_add(r58498, r58496, r58497, MPFR_RNDN);
        mpfr_set_d(r58499, b, MPFR_RNDN);
        mpfr_sub(r58500, r58498, r58499, MPFR_RNDN);
        ;
        mpfr_set_si(r58502, mpfr_cmp(r58493, r58501) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r58504, x, MPFR_RNDN);
        mpfr_set_d(r58505, t, MPFR_RNDN);
        mpfr_add(r58506, r58504, r58505, MPFR_RNDN);
        mpfr_add(r58507, r58506, r58493, MPFR_RNDN);
        mpfr_add(r58508, r58504, r58493, MPFR_RNDN);
        mpfr_mul(r58509, r58508, r58496, MPFR_RNDN);
        mpfr_add(r58510, r58505, r58493, MPFR_RNDN);
        mpfr_mul(r58511, r58510, r58497, MPFR_RNDN);
        mpfr_add(r58512, r58509, r58511, MPFR_RNDN);
        mpfr_mul(r58513, r58493, r58499, MPFR_RNDN);
        mpfr_sub(r58514, r58512, r58513, MPFR_RNDN);
        mpfr_div(r58515, r58507, r58514, MPFR_RNDN);
        mpfr_div(r58516, r58503, r58515, MPFR_RNDN);
        if (mpfr_get_si(r58502, MPFR_RNDN)) { mpfr_set(r58517, r58516, MPFR_RNDN); } else { mpfr_set(r58517, r58500, MPFR_RNDN); };
        if (mpfr_get_si(r58495, MPFR_RNDN)) { mpfr_set(r58518, r58500, MPFR_RNDN); } else { mpfr_set(r58518, r58517, MPFR_RNDN); };
        return mpfr_get_d(r58518, MPFR_RNDN);
}

