#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 r56323 = x;
        float r56324 = 1.0;
        float r56325 = r56323 * r56324;
        float r56326 = y;
        float r56327 = r56326 / r56323;
        float r56328 = r56324 - r56327;
        float r56329 = log(r56328);
        float r56330 = r56325 * r56329;
        return r56330;
}

double f_id(double x, double y) {
        double r56331 = x;
        double r56332 = 1.0;
        double r56333 = r56331 * r56332;
        double r56334 = y;
        double r56335 = r56334 / r56331;
        double r56336 = r56332 - r56335;
        double r56337 = log(r56336);
        double r56338 = r56333 * r56337;
        return r56338;
}


double f_of(float x, float y) {
        float r56339 = x;
        float r56340 = 1.0;
        float r56341 = r56339 * r56340;
        float r56342 = 1/2;
        float r56343 = y;
        float r56344 = r56343 / r56339;
        float r56345 = r56340 - r56344;
        float r56346 = log(r56345);
        float r56347 = r56342 * r56346;
        float r56348 = sqrt(r56345);
        float r56349 = sqrt(r56348);
        float r56350 = log(r56349);
        float r56351 = log(r56348);
        float r56352 = r56342 * r56351;
        float r56353 = r56350 + r56352;
        float r56354 = r56347 + r56353;
        float r56355 = r56341 * r56354;
        return r56355;
}

double f_od(double x, double y) {
        double r56356 = x;
        double r56357 = 1.0;
        double r56358 = r56356 * r56357;
        double r56359 = 1/2;
        double r56360 = y;
        double r56361 = r56360 / r56356;
        double r56362 = r56357 - r56361;
        double r56363 = log(r56362);
        double r56364 = r56359 * r56363;
        double r56365 = sqrt(r56362);
        double r56366 = sqrt(r56365);
        double r56367 = log(r56366);
        double r56368 = log(r56365);
        double r56369 = r56359 * r56368;
        double r56370 = r56367 + r56369;
        double r56371 = r56364 + r56370;
        double r56372 = r56358 * r56371;
        return r56372;
}

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 r56373, r56374, r56375, r56376, r56377, r56378, r56379, r56380;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56373);
        mpfr_init_set_str(r56374, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56375);
        mpfr_init(r56376);
        mpfr_init(r56377);
        mpfr_init(r56378);
        mpfr_init(r56379);
        mpfr_init(r56380);
}

double f_im(double x, double y) {
        mpfr_set_d(r56373, x, MPFR_RNDN);
        ;
        mpfr_mul(r56375, r56373, r56374, MPFR_RNDN);
        mpfr_set_d(r56376, y, MPFR_RNDN);
        mpfr_div(r56377, r56376, r56373, MPFR_RNDN);
        mpfr_sub(r56378, r56374, r56377, MPFR_RNDN);
        mpfr_log(r56379, r56378, MPFR_RNDN);
        mpfr_mul(r56380, r56375, r56379, MPFR_RNDN);
        return mpfr_get_d(r56380, MPFR_RNDN);
}

static mpfr_t r56381, r56382, r56383, r56384, r56385, r56386, r56387, r56388, r56389, r56390, r56391, r56392, r56393, r56394, r56395, r56396, r56397;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56381);
        mpfr_init_set_str(r56382, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56383);
        mpfr_init_set_str(r56384, "1/2", 10, MPFR_RNDN);
        mpfr_init(r56385);
        mpfr_init(r56386);
        mpfr_init(r56387);
        mpfr_init(r56388);
        mpfr_init(r56389);
        mpfr_init(r56390);
        mpfr_init(r56391);
        mpfr_init(r56392);
        mpfr_init(r56393);
        mpfr_init(r56394);
        mpfr_init(r56395);
        mpfr_init(r56396);
        mpfr_init(r56397);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56381, x, MPFR_RNDN);
        ;
        mpfr_mul(r56383, r56381, r56382, MPFR_RNDN);
        ;
        mpfr_set_d(r56385, y, MPFR_RNDN);
        mpfr_div(r56386, r56385, r56381, MPFR_RNDN);
        mpfr_sub(r56387, r56382, r56386, MPFR_RNDN);
        mpfr_log(r56388, r56387, MPFR_RNDN);
        mpfr_mul(r56389, r56384, r56388, MPFR_RNDN);
        mpfr_sqrt(r56390, r56387, MPFR_RNDN);
        mpfr_sqrt(r56391, r56390, MPFR_RNDN);
        mpfr_log(r56392, r56391, MPFR_RNDN);
        mpfr_log(r56393, r56390, MPFR_RNDN);
        mpfr_mul(r56394, r56384, r56393, MPFR_RNDN);
        mpfr_add(r56395, r56392, r56394, MPFR_RNDN);
        mpfr_add(r56396, r56389, r56395, MPFR_RNDN);
        mpfr_mul(r56397, r56383, r56396, MPFR_RNDN);
        return mpfr_get_d(r56397, MPFR_RNDN);
}

static mpfr_t r56398, r56399, r56400, r56401, r56402, r56403, r56404, r56405, r56406, r56407, r56408, r56409, r56410, r56411, r56412, r56413, r56414;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56398);
        mpfr_init_set_str(r56399, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56400);
        mpfr_init_set_str(r56401, "1/2", 10, MPFR_RNDN);
        mpfr_init(r56402);
        mpfr_init(r56403);
        mpfr_init(r56404);
        mpfr_init(r56405);
        mpfr_init(r56406);
        mpfr_init(r56407);
        mpfr_init(r56408);
        mpfr_init(r56409);
        mpfr_init(r56410);
        mpfr_init(r56411);
        mpfr_init(r56412);
        mpfr_init(r56413);
        mpfr_init(r56414);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56398, x, MPFR_RNDN);
        ;
        mpfr_mul(r56400, r56398, r56399, MPFR_RNDN);
        ;
        mpfr_set_d(r56402, y, MPFR_RNDN);
        mpfr_div(r56403, r56402, r56398, MPFR_RNDN);
        mpfr_sub(r56404, r56399, r56403, MPFR_RNDN);
        mpfr_log(r56405, r56404, MPFR_RNDN);
        mpfr_mul(r56406, r56401, r56405, MPFR_RNDN);
        mpfr_sqrt(r56407, r56404, MPFR_RNDN);
        mpfr_sqrt(r56408, r56407, MPFR_RNDN);
        mpfr_log(r56409, r56408, MPFR_RNDN);
        mpfr_log(r56410, r56407, MPFR_RNDN);
        mpfr_mul(r56411, r56401, r56410, MPFR_RNDN);
        mpfr_add(r56412, r56409, r56411, MPFR_RNDN);
        mpfr_add(r56413, r56406, r56412, MPFR_RNDN);
        mpfr_mul(r56414, r56400, r56413, MPFR_RNDN);
        return mpfr_get_d(r56414, MPFR_RNDN);
}

