#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 r58133 = x;
        float r58134 = y;
        float r58135 = r58134 + r58133;
        float r58136 = r58133 / r58135;
        return r58136;
}

double f_id(double x, double y) {
        double r58137 = x;
        double r58138 = y;
        double r58139 = r58138 + r58137;
        double r58140 = r58137 / r58139;
        return r58140;
}


double f_of(float x, float y) {
        float r58141 = x;
        float r58142 = y;
        float r58143 = r58142 + r58141;
        float r58144 = r58141 / r58143;
        return r58144;
}

double f_od(double x, double y) {
        double r58145 = x;
        double r58146 = y;
        double r58147 = r58146 + r58145;
        double r58148 = r58145 / r58147;
        return r58148;
}

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 r58149, r58150, r58151, r58152;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r58149);
        mpfr_init(r58150);
        mpfr_init(r58151);
        mpfr_init(r58152);
}

double f_im(double x, double y) {
        mpfr_set_d(r58149, x, MPFR_RNDN);
        mpfr_set_d(r58150, y, MPFR_RNDN);
        mpfr_add(r58151, r58150, r58149, MPFR_RNDN);
        mpfr_div(r58152, r58149, r58151, MPFR_RNDN);
        return mpfr_get_d(r58152, MPFR_RNDN);
}

static mpfr_t r58153, r58154, r58155, r58156;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58153);
        mpfr_init(r58154);
        mpfr_init(r58155);
        mpfr_init(r58156);
}

double f_fm(double x, double y) {
        mpfr_set_d(r58153, x, MPFR_RNDN);
        mpfr_set_d(r58154, y, MPFR_RNDN);
        mpfr_add(r58155, r58154, r58153, MPFR_RNDN);
        mpfr_div(r58156, r58153, r58155, MPFR_RNDN);
        return mpfr_get_d(r58156, MPFR_RNDN);
}

static mpfr_t r58157, r58158, r58159, r58160;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58157);
        mpfr_init(r58158);
        mpfr_init(r58159);
        mpfr_init(r58160);
}

double f_dm(double x, double y) {
        mpfr_set_d(r58157, x, MPFR_RNDN);
        mpfr_set_d(r58158, y, MPFR_RNDN);
        mpfr_add(r58159, r58158, r58157, MPFR_RNDN);
        mpfr_div(r58160, r58157, r58159, MPFR_RNDN);
        return mpfr_get_d(r58160, MPFR_RNDN);
}

