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

char *name = "Data.HyperLogLog.Type:size from hyperloglog-0.3.4, A";

double f_if(float x, float y) {
        float r56401 = x;
        float r56402 = 1.0;
        float r56403 = r56401 * r56402;
        float r56404 = y;
        float r56405 = r56404 / r56401;
        float r56406 = r56402 - r56405;
        float r56407 = log(r56406);
        float r56408 = r56403 * r56407;
        return r56408;
}

double f_id(double x, double y) {
        double r56409 = x;
        double r56410 = 1.0;
        double r56411 = r56409 * r56410;
        double r56412 = y;
        double r56413 = r56412 / r56409;
        double r56414 = r56410 - r56413;
        double r56415 = log(r56414);
        double r56416 = r56411 * r56415;
        return r56416;
}


double f_of(float x, float y) {
        float r56417 = x;
        float r56418 = 1.0;
        float r56419 = r56417 * r56418;
        float r56420 = y;
        float r56421 = r56420 / r56417;
        float r56422 = r56418 - r56421;
        float r56423 = sqrt(r56422);
        float r56424 = log(r56423);
        float r56425 = sqrt(r56423);
        float r56426 = log(r56425);
        float r56427 = 1/2;
        float r56428 = r56427 * r56424;
        float r56429 = r56426 + r56428;
        float r56430 = r56424 + r56429;
        float r56431 = r56419 * r56430;
        return r56431;
}

double f_od(double x, double y) {
        double r56432 = x;
        double r56433 = 1.0;
        double r56434 = r56432 * r56433;
        double r56435 = y;
        double r56436 = r56435 / r56432;
        double r56437 = r56433 - r56436;
        double r56438 = sqrt(r56437);
        double r56439 = log(r56438);
        double r56440 = sqrt(r56438);
        double r56441 = log(r56440);
        double r56442 = 1/2;
        double r56443 = r56442 * r56439;
        double r56444 = r56441 + r56443;
        double r56445 = r56439 + r56444;
        double r56446 = r56434 * r56445;
        return r56446;
}

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 r56447, r56448, r56449, r56450, r56451, r56452, r56453, r56454;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56447);
        mpfr_init_set_str(r56448, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56449);
        mpfr_init(r56450);
        mpfr_init(r56451);
        mpfr_init(r56452);
        mpfr_init(r56453);
        mpfr_init(r56454);
}

double f_im(double x, double y) {
        mpfr_set_d(r56447, x, MPFR_RNDN);
        ;
        mpfr_mul(r56449, r56447, r56448, MPFR_RNDN);
        mpfr_set_d(r56450, y, MPFR_RNDN);
        mpfr_div(r56451, r56450, r56447, MPFR_RNDN);
        mpfr_sub(r56452, r56448, r56451, MPFR_RNDN);
        mpfr_log(r56453, r56452, MPFR_RNDN);
        mpfr_mul(r56454, r56449, r56453, MPFR_RNDN);
        return mpfr_get_d(r56454, MPFR_RNDN);
}

static mpfr_t r56455, r56456, r56457, r56458, r56459, r56460, r56461, r56462, r56463, r56464, r56465, r56466, r56467, r56468, r56469;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56455);
        mpfr_init_set_str(r56456, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56457);
        mpfr_init(r56458);
        mpfr_init(r56459);
        mpfr_init(r56460);
        mpfr_init(r56461);
        mpfr_init(r56462);
        mpfr_init(r56463);
        mpfr_init(r56464);
        mpfr_init_set_str(r56465, "1/2", 10, MPFR_RNDN);
        mpfr_init(r56466);
        mpfr_init(r56467);
        mpfr_init(r56468);
        mpfr_init(r56469);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56455, x, MPFR_RNDN);
        ;
        mpfr_mul(r56457, r56455, r56456, MPFR_RNDN);
        mpfr_set_d(r56458, y, MPFR_RNDN);
        mpfr_div(r56459, r56458, r56455, MPFR_RNDN);
        mpfr_sub(r56460, r56456, r56459, MPFR_RNDN);
        mpfr_sqrt(r56461, r56460, MPFR_RNDN);
        mpfr_log(r56462, r56461, MPFR_RNDN);
        mpfr_sqrt(r56463, r56461, MPFR_RNDN);
        mpfr_log(r56464, r56463, MPFR_RNDN);
        ;
        mpfr_mul(r56466, r56465, r56462, MPFR_RNDN);
        mpfr_add(r56467, r56464, r56466, MPFR_RNDN);
        mpfr_add(r56468, r56462, r56467, MPFR_RNDN);
        mpfr_mul(r56469, r56457, r56468, MPFR_RNDN);
        return mpfr_get_d(r56469, MPFR_RNDN);
}

static mpfr_t r56470, r56471, r56472, r56473, r56474, r56475, r56476, r56477, r56478, r56479, r56480, r56481, r56482, r56483, r56484;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56470);
        mpfr_init_set_str(r56471, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56472);
        mpfr_init(r56473);
        mpfr_init(r56474);
        mpfr_init(r56475);
        mpfr_init(r56476);
        mpfr_init(r56477);
        mpfr_init(r56478);
        mpfr_init(r56479);
        mpfr_init_set_str(r56480, "1/2", 10, MPFR_RNDN);
        mpfr_init(r56481);
        mpfr_init(r56482);
        mpfr_init(r56483);
        mpfr_init(r56484);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56470, x, MPFR_RNDN);
        ;
        mpfr_mul(r56472, r56470, r56471, MPFR_RNDN);
        mpfr_set_d(r56473, y, MPFR_RNDN);
        mpfr_div(r56474, r56473, r56470, MPFR_RNDN);
        mpfr_sub(r56475, r56471, r56474, MPFR_RNDN);
        mpfr_sqrt(r56476, r56475, MPFR_RNDN);
        mpfr_log(r56477, r56476, MPFR_RNDN);
        mpfr_sqrt(r56478, r56476, MPFR_RNDN);
        mpfr_log(r56479, r56478, MPFR_RNDN);
        ;
        mpfr_mul(r56481, r56480, r56477, MPFR_RNDN);
        mpfr_add(r56482, r56479, r56481, MPFR_RNDN);
        mpfr_add(r56483, r56477, r56482, MPFR_RNDN);
        mpfr_mul(r56484, r56472, r56483, MPFR_RNDN);
        return mpfr_get_d(r56484, MPFR_RNDN);
}

