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

double f_if(float x, float y) {
        float r56338 = x;
        float r56339 = y;
        float r56340 = r56338 / r56339;
        float r56341 = log(r56340);
        float r56342 = r56338 * r56341;
        return r56342;
}

double f_id(double x, double y) {
        double r56343 = x;
        double r56344 = y;
        double r56345 = r56343 / r56344;
        double r56346 = log(r56345);
        double r56347 = r56343 * r56346;
        return r56347;
}


double f_of(float x, float y) {
        float r56348 = y;
        float r56349 = 4.7656810866124795e-307;
        bool r56350 = r56348 <= r56349;
        float r56351 = x;
        float r56352 = r56351 / r56348;
        float r56353 = log(r56352);
        float r56354 = r56351 * r56353;
        float r56355 = log(r56351);
        float r56356 = log(r56348);
        float r56357 = r56355 - r56356;
        float r56358 = r56351 * r56357;
        float r56359 = r56350 ? r56354 : r56358;
        return r56359;
}

double f_od(double x, double y) {
        double r56360 = y;
        double r56361 = 4.7656810866124795e-307;
        bool r56362 = r56360 <= r56361;
        double r56363 = x;
        double r56364 = r56363 / r56360;
        double r56365 = log(r56364);
        double r56366 = r56363 * r56365;
        double r56367 = log(r56363);
        double r56368 = log(r56360);
        double r56369 = r56367 - r56368;
        double r56370 = r56363 * r56369;
        double r56371 = r56362 ? r56366 : r56370;
        return r56371;
}

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 r56372, r56373, r56374, r56375, r56376;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56372);
        mpfr_init(r56373);
        mpfr_init(r56374);
        mpfr_init(r56375);
        mpfr_init(r56376);
}

double f_im(double x, double y) {
        mpfr_set_d(r56372, x, MPFR_RNDN);
        mpfr_set_d(r56373, y, MPFR_RNDN);
        mpfr_div(r56374, r56372, r56373, MPFR_RNDN);
        mpfr_log(r56375, r56374, MPFR_RNDN);
        mpfr_mul(r56376, r56372, r56375, MPFR_RNDN);
        return mpfr_get_d(r56376, MPFR_RNDN);
}

static mpfr_t r56377, r56378, r56379, r56380, r56381, r56382, r56383, r56384, r56385, r56386, r56387, r56388;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56377);
        mpfr_init_set_str(r56378, "4.7656810866124795e-307", 10, MPFR_RNDN);
        mpfr_init(r56379);
        mpfr_init(r56380);
        mpfr_init(r56381);
        mpfr_init(r56382);
        mpfr_init(r56383);
        mpfr_init(r56384);
        mpfr_init(r56385);
        mpfr_init(r56386);
        mpfr_init(r56387);
        mpfr_init(r56388);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56377, y, MPFR_RNDN);
        ;
        mpfr_set_si(r56379, mpfr_cmp(r56377, r56378) <= 0, MPFR_RNDN);
        mpfr_set_d(r56380, x, MPFR_RNDN);
        mpfr_div(r56381, r56380, r56377, MPFR_RNDN);
        mpfr_log(r56382, r56381, MPFR_RNDN);
        mpfr_mul(r56383, r56380, r56382, MPFR_RNDN);
        mpfr_log(r56384, r56380, MPFR_RNDN);
        mpfr_log(r56385, r56377, MPFR_RNDN);
        mpfr_sub(r56386, r56384, r56385, MPFR_RNDN);
        mpfr_mul(r56387, r56380, r56386, MPFR_RNDN);
        if (mpfr_get_si(r56379, MPFR_RNDN)) { mpfr_set(r56388, r56383, MPFR_RNDN); } else { mpfr_set(r56388, r56387, MPFR_RNDN); };
        return mpfr_get_d(r56388, MPFR_RNDN);
}

static mpfr_t r56389, r56390, r56391, r56392, r56393, r56394, r56395, r56396, r56397, r56398, r56399, r56400;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56389);
        mpfr_init_set_str(r56390, "4.7656810866124795e-307", 10, MPFR_RNDN);
        mpfr_init(r56391);
        mpfr_init(r56392);
        mpfr_init(r56393);
        mpfr_init(r56394);
        mpfr_init(r56395);
        mpfr_init(r56396);
        mpfr_init(r56397);
        mpfr_init(r56398);
        mpfr_init(r56399);
        mpfr_init(r56400);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56389, y, MPFR_RNDN);
        ;
        mpfr_set_si(r56391, mpfr_cmp(r56389, r56390) <= 0, MPFR_RNDN);
        mpfr_set_d(r56392, x, MPFR_RNDN);
        mpfr_div(r56393, r56392, r56389, MPFR_RNDN);
        mpfr_log(r56394, r56393, MPFR_RNDN);
        mpfr_mul(r56395, r56392, r56394, MPFR_RNDN);
        mpfr_log(r56396, r56392, MPFR_RNDN);
        mpfr_log(r56397, r56389, MPFR_RNDN);
        mpfr_sub(r56398, r56396, r56397, MPFR_RNDN);
        mpfr_mul(r56399, r56392, r56398, MPFR_RNDN);
        if (mpfr_get_si(r56391, MPFR_RNDN)) { mpfr_set(r56400, r56395, MPFR_RNDN); } else { mpfr_set(r56400, r56399, MPFR_RNDN); };
        return mpfr_get_d(r56400, MPFR_RNDN);
}

