#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 r55144 = x;
        float r55145 = 1.0;
        float r55146 = r55144 * r55145;
        float r55147 = y;
        float r55148 = r55147 / r55144;
        float r55149 = r55145 - r55148;
        float r55150 = log(r55149);
        float r55151 = r55146 * r55150;
        return r55151;
}

double f_id(double x, double y) {
        double r55152 = x;
        double r55153 = 1.0;
        double r55154 = r55152 * r55153;
        double r55155 = y;
        double r55156 = r55155 / r55152;
        double r55157 = r55153 - r55156;
        double r55158 = log(r55157);
        double r55159 = r55154 * r55158;
        return r55159;
}


double f_of(float x, float y) {
        float r55160 = x;
        float r55161 = 1.0;
        float r55162 = r55160 * r55161;
        float r55163 = 1/2;
        float r55164 = y;
        float r55165 = r55164 / r55160;
        float r55166 = r55161 - r55165;
        float r55167 = log(r55166);
        float r55168 = r55163 * r55167;
        float r55169 = sqrt(r55166);
        float r55170 = sqrt(r55169);
        float r55171 = log(r55170);
        float r55172 = log(r55169);
        float r55173 = r55163 * r55172;
        float r55174 = r55171 + r55173;
        float r55175 = r55168 + r55174;
        float r55176 = r55162 * r55175;
        return r55176;
}

double f_od(double x, double y) {
        double r55177 = x;
        double r55178 = 1.0;
        double r55179 = r55177 * r55178;
        double r55180 = 1/2;
        double r55181 = y;
        double r55182 = r55181 / r55177;
        double r55183 = r55178 - r55182;
        double r55184 = log(r55183);
        double r55185 = r55180 * r55184;
        double r55186 = sqrt(r55183);
        double r55187 = sqrt(r55186);
        double r55188 = log(r55187);
        double r55189 = log(r55186);
        double r55190 = r55180 * r55189;
        double r55191 = r55188 + r55190;
        double r55192 = r55185 + r55191;
        double r55193 = r55179 * r55192;
        return r55193;
}

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 r55194, r55195, r55196, r55197, r55198, r55199, r55200, r55201;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r55194);
        mpfr_init_set_str(r55195, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55196);
        mpfr_init(r55197);
        mpfr_init(r55198);
        mpfr_init(r55199);
        mpfr_init(r55200);
        mpfr_init(r55201);
}

double f_im(double x, double y) {
        mpfr_set_d(r55194, x, MPFR_RNDN);
        ;
        mpfr_mul(r55196, r55194, r55195, MPFR_RNDN);
        mpfr_set_d(r55197, y, MPFR_RNDN);
        mpfr_div(r55198, r55197, r55194, MPFR_RNDN);
        mpfr_sub(r55199, r55195, r55198, MPFR_RNDN);
        mpfr_log(r55200, r55199, MPFR_RNDN);
        mpfr_mul(r55201, r55196, r55200, MPFR_RNDN);
        return mpfr_get_d(r55201, MPFR_RNDN);
}

static mpfr_t r55202, r55203, r55204, r55205, r55206, r55207, r55208, r55209, r55210, r55211, r55212, r55213, r55214, r55215, r55216, r55217, r55218;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r55202);
        mpfr_init_set_str(r55203, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55204);
        mpfr_init_set_str(r55205, "1/2", 10, MPFR_RNDN);
        mpfr_init(r55206);
        mpfr_init(r55207);
        mpfr_init(r55208);
        mpfr_init(r55209);
        mpfr_init(r55210);
        mpfr_init(r55211);
        mpfr_init(r55212);
        mpfr_init(r55213);
        mpfr_init(r55214);
        mpfr_init(r55215);
        mpfr_init(r55216);
        mpfr_init(r55217);
        mpfr_init(r55218);
}

double f_fm(double x, double y) {
        mpfr_set_d(r55202, x, MPFR_RNDN);
        ;
        mpfr_mul(r55204, r55202, r55203, MPFR_RNDN);
        ;
        mpfr_set_d(r55206, y, MPFR_RNDN);
        mpfr_div(r55207, r55206, r55202, MPFR_RNDN);
        mpfr_sub(r55208, r55203, r55207, MPFR_RNDN);
        mpfr_log(r55209, r55208, MPFR_RNDN);
        mpfr_mul(r55210, r55205, r55209, MPFR_RNDN);
        mpfr_sqrt(r55211, r55208, MPFR_RNDN);
        mpfr_sqrt(r55212, r55211, MPFR_RNDN);
        mpfr_log(r55213, r55212, MPFR_RNDN);
        mpfr_log(r55214, r55211, MPFR_RNDN);
        mpfr_mul(r55215, r55205, r55214, MPFR_RNDN);
        mpfr_add(r55216, r55213, r55215, MPFR_RNDN);
        mpfr_add(r55217, r55210, r55216, MPFR_RNDN);
        mpfr_mul(r55218, r55204, r55217, MPFR_RNDN);
        return mpfr_get_d(r55218, MPFR_RNDN);
}

static mpfr_t r55219, r55220, r55221, r55222, r55223, r55224, r55225, r55226, r55227, r55228, r55229, r55230, r55231, r55232, r55233, r55234, r55235;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r55219);
        mpfr_init_set_str(r55220, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55221);
        mpfr_init_set_str(r55222, "1/2", 10, MPFR_RNDN);
        mpfr_init(r55223);
        mpfr_init(r55224);
        mpfr_init(r55225);
        mpfr_init(r55226);
        mpfr_init(r55227);
        mpfr_init(r55228);
        mpfr_init(r55229);
        mpfr_init(r55230);
        mpfr_init(r55231);
        mpfr_init(r55232);
        mpfr_init(r55233);
        mpfr_init(r55234);
        mpfr_init(r55235);
}

double f_dm(double x, double y) {
        mpfr_set_d(r55219, x, MPFR_RNDN);
        ;
        mpfr_mul(r55221, r55219, r55220, MPFR_RNDN);
        ;
        mpfr_set_d(r55223, y, MPFR_RNDN);
        mpfr_div(r55224, r55223, r55219, MPFR_RNDN);
        mpfr_sub(r55225, r55220, r55224, MPFR_RNDN);
        mpfr_log(r55226, r55225, MPFR_RNDN);
        mpfr_mul(r55227, r55222, r55226, MPFR_RNDN);
        mpfr_sqrt(r55228, r55225, MPFR_RNDN);
        mpfr_sqrt(r55229, r55228, MPFR_RNDN);
        mpfr_log(r55230, r55229, MPFR_RNDN);
        mpfr_log(r55231, r55228, MPFR_RNDN);
        mpfr_mul(r55232, r55222, r55231, MPFR_RNDN);
        mpfr_add(r55233, r55230, r55232, MPFR_RNDN);
        mpfr_add(r55234, r55227, r55233, MPFR_RNDN);
        mpfr_mul(r55235, r55221, r55234, MPFR_RNDN);
        return mpfr_get_d(r55235, MPFR_RNDN);
}

