#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, A";

double f_if(float x, float y) {
        float r37134 = x;
        float r37135 = y;
        float r37136 = r37134 + r37135;
        float r37137 = r37134 / r37136;
        return r37137;
}

double f_id(double x, double y) {
        double r37138 = x;
        double r37139 = y;
        double r37140 = r37138 + r37139;
        double r37141 = r37138 / r37140;
        return r37141;
}


double f_of(float x, float y) {
        float r37142 = x;
        float r37143 = y;
        float r37144 = r37142 + r37143;
        float r37145 = r37142 / r37144;
        return r37145;
}

double f_od(double x, double y) {
        double r37146 = x;
        double r37147 = y;
        double r37148 = r37146 + r37147;
        double r37149 = r37146 / r37148;
        return r37149;
}

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 r37150, r37151, r37152, r37153;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r37150);
        mpfr_init(r37151);
        mpfr_init(r37152);
        mpfr_init(r37153);
}

double f_im(double x, double y) {
        mpfr_set_d(r37150, x, MPFR_RNDN);
        mpfr_set_d(r37151, y, MPFR_RNDN);
        mpfr_add(r37152, r37150, r37151, MPFR_RNDN);
        mpfr_div(r37153, r37150, r37152, MPFR_RNDN);
        return mpfr_get_d(r37153, MPFR_RNDN);
}

static mpfr_t r37154, r37155, r37156, r37157;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r37154);
        mpfr_init(r37155);
        mpfr_init(r37156);
        mpfr_init(r37157);
}

double f_fm(double x, double y) {
        mpfr_set_d(r37154, x, MPFR_RNDN);
        mpfr_set_d(r37155, y, MPFR_RNDN);
        mpfr_add(r37156, r37154, r37155, MPFR_RNDN);
        mpfr_div(r37157, r37154, r37156, MPFR_RNDN);
        return mpfr_get_d(r37157, MPFR_RNDN);
}

static mpfr_t r37158, r37159, r37160, r37161;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r37158);
        mpfr_init(r37159);
        mpfr_init(r37160);
        mpfr_init(r37161);
}

double f_dm(double x, double y) {
        mpfr_set_d(r37158, x, MPFR_RNDN);
        mpfr_set_d(r37159, y, MPFR_RNDN);
        mpfr_add(r37160, r37158, r37159, MPFR_RNDN);
        mpfr_div(r37161, r37158, r37160, MPFR_RNDN);
        return mpfr_get_d(r37161, MPFR_RNDN);
}

