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

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

double f_if(float x, float y) {
        float r58551 = x;
        float r58552 = y;
        float r58553 = r58552 + r58551;
        float r58554 = r58551 / r58553;
        return r58554;
}

double f_id(double x, double y) {
        double r58555 = x;
        double r58556 = y;
        double r58557 = r58556 + r58555;
        double r58558 = r58555 / r58557;
        return r58558;
}


double f_of(float x, float y) {
        float r58559 = x;
        float r58560 = y;
        float r58561 = r58560 + r58559;
        float r58562 = r58559 / r58561;
        return r58562;
}

double f_od(double x, double y) {
        double r58563 = x;
        double r58564 = y;
        double r58565 = r58564 + r58563;
        double r58566 = r58563 / r58565;
        return r58566;
}

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 r58567, r58568, r58569, r58570;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58567);
        mpfr_init(r58568);
        mpfr_init(r58569);
        mpfr_init(r58570);
}

double f_im(double x, double y) {
        mpfr_set_d(r58567, x, MPFR_RNDN);
        mpfr_set_d(r58568, y, MPFR_RNDN);
        mpfr_add(r58569, r58568, r58567, MPFR_RNDN);
        mpfr_div(r58570, r58567, r58569, MPFR_RNDN);
        return mpfr_get_d(r58570, MPFR_RNDN);
}

static mpfr_t r58571, r58572, r58573, r58574;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58571);
        mpfr_init(r58572);
        mpfr_init(r58573);
        mpfr_init(r58574);
}

double f_fm(double x, double y) {
        mpfr_set_d(r58571, x, MPFR_RNDN);
        mpfr_set_d(r58572, y, MPFR_RNDN);
        mpfr_add(r58573, r58572, r58571, MPFR_RNDN);
        mpfr_div(r58574, r58571, r58573, MPFR_RNDN);
        return mpfr_get_d(r58574, MPFR_RNDN);
}

static mpfr_t r58575, r58576, r58577, r58578;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58575);
        mpfr_init(r58576);
        mpfr_init(r58577);
        mpfr_init(r58578);
}

double f_dm(double x, double y) {
        mpfr_set_d(r58575, x, MPFR_RNDN);
        mpfr_set_d(r58576, y, MPFR_RNDN);
        mpfr_add(r58577, r58576, r58575, MPFR_RNDN);
        mpfr_div(r58578, r58575, r58577, MPFR_RNDN);
        return mpfr_get_d(r58578, MPFR_RNDN);
}

