#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 r56453 = x;
        float r56454 = 1.0;
        float r56455 = r56453 * r56454;
        float r56456 = y;
        float r56457 = r56456 / r56453;
        float r56458 = r56454 - r56457;
        float r56459 = log(r56458);
        float r56460 = r56455 * r56459;
        return r56460;
}

double f_id(double x, double y) {
        double r56461 = x;
        double r56462 = 1.0;
        double r56463 = r56461 * r56462;
        double r56464 = y;
        double r56465 = r56464 / r56461;
        double r56466 = r56462 - r56465;
        double r56467 = log(r56466);
        double r56468 = r56463 * r56467;
        return r56468;
}


double f_of(float x, float y) {
        float r56469 = x;
        float r56470 = 1.0;
        float r56471 = r56469 * r56470;
        float r56472 = y;
        float r56473 = r56472 / r56469;
        float r56474 = r56470 - r56473;
        float r56475 = sqrt(r56474);
        float r56476 = log(r56475);
        float r56477 = sqrt(r56475);
        float r56478 = log(r56477);
        float r56479 = 1/2;
        float r56480 = r56479 * r56476;
        float r56481 = r56478 + r56480;
        float r56482 = r56476 + r56481;
        float r56483 = r56471 * r56482;
        return r56483;
}

double f_od(double x, double y) {
        double r56484 = x;
        double r56485 = 1.0;
        double r56486 = r56484 * r56485;
        double r56487 = y;
        double r56488 = r56487 / r56484;
        double r56489 = r56485 - r56488;
        double r56490 = sqrt(r56489);
        double r56491 = log(r56490);
        double r56492 = sqrt(r56490);
        double r56493 = log(r56492);
        double r56494 = 1/2;
        double r56495 = r56494 * r56491;
        double r56496 = r56493 + r56495;
        double r56497 = r56491 + r56496;
        double r56498 = r56486 * r56497;
        return r56498;
}

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 r56499, r56500, r56501, r56502, r56503, r56504, r56505, r56506;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56499);
        mpfr_init_set_str(r56500, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56501);
        mpfr_init(r56502);
        mpfr_init(r56503);
        mpfr_init(r56504);
        mpfr_init(r56505);
        mpfr_init(r56506);
}

double f_im(double x, double y) {
        mpfr_set_d(r56499, x, MPFR_RNDN);
        ;
        mpfr_mul(r56501, r56499, r56500, MPFR_RNDN);
        mpfr_set_d(r56502, y, MPFR_RNDN);
        mpfr_div(r56503, r56502, r56499, MPFR_RNDN);
        mpfr_sub(r56504, r56500, r56503, MPFR_RNDN);
        mpfr_log(r56505, r56504, MPFR_RNDN);
        mpfr_mul(r56506, r56501, r56505, MPFR_RNDN);
        return mpfr_get_d(r56506, MPFR_RNDN);
}

static mpfr_t r56507, r56508, r56509, r56510, r56511, r56512, r56513, r56514, r56515, r56516, r56517, r56518, r56519, r56520, r56521;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56507);
        mpfr_init_set_str(r56508, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56509);
        mpfr_init(r56510);
        mpfr_init(r56511);
        mpfr_init(r56512);
        mpfr_init(r56513);
        mpfr_init(r56514);
        mpfr_init(r56515);
        mpfr_init(r56516);
        mpfr_init_set_str(r56517, "1/2", 10, MPFR_RNDN);
        mpfr_init(r56518);
        mpfr_init(r56519);
        mpfr_init(r56520);
        mpfr_init(r56521);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56507, x, MPFR_RNDN);
        ;
        mpfr_mul(r56509, r56507, r56508, MPFR_RNDN);
        mpfr_set_d(r56510, y, MPFR_RNDN);
        mpfr_div(r56511, r56510, r56507, MPFR_RNDN);
        mpfr_sub(r56512, r56508, r56511, MPFR_RNDN);
        mpfr_sqrt(r56513, r56512, MPFR_RNDN);
        mpfr_log(r56514, r56513, MPFR_RNDN);
        mpfr_sqrt(r56515, r56513, MPFR_RNDN);
        mpfr_log(r56516, r56515, MPFR_RNDN);
        ;
        mpfr_mul(r56518, r56517, r56514, MPFR_RNDN);
        mpfr_add(r56519, r56516, r56518, MPFR_RNDN);
        mpfr_add(r56520, r56514, r56519, MPFR_RNDN);
        mpfr_mul(r56521, r56509, r56520, MPFR_RNDN);
        return mpfr_get_d(r56521, MPFR_RNDN);
}

static mpfr_t r56522, r56523, r56524, r56525, r56526, r56527, r56528, r56529, r56530, r56531, r56532, r56533, r56534, r56535, r56536;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r56522);
        mpfr_init_set_str(r56523, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56524);
        mpfr_init(r56525);
        mpfr_init(r56526);
        mpfr_init(r56527);
        mpfr_init(r56528);
        mpfr_init(r56529);
        mpfr_init(r56530);
        mpfr_init(r56531);
        mpfr_init_set_str(r56532, "1/2", 10, MPFR_RNDN);
        mpfr_init(r56533);
        mpfr_init(r56534);
        mpfr_init(r56535);
        mpfr_init(r56536);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56522, x, MPFR_RNDN);
        ;
        mpfr_mul(r56524, r56522, r56523, MPFR_RNDN);
        mpfr_set_d(r56525, y, MPFR_RNDN);
        mpfr_div(r56526, r56525, r56522, MPFR_RNDN);
        mpfr_sub(r56527, r56523, r56526, MPFR_RNDN);
        mpfr_sqrt(r56528, r56527, MPFR_RNDN);
        mpfr_log(r56529, r56528, MPFR_RNDN);
        mpfr_sqrt(r56530, r56528, MPFR_RNDN);
        mpfr_log(r56531, r56530, MPFR_RNDN);
        ;
        mpfr_mul(r56533, r56532, r56529, MPFR_RNDN);
        mpfr_add(r56534, r56531, r56533, MPFR_RNDN);
        mpfr_add(r56535, r56529, r56534, MPFR_RNDN);
        mpfr_mul(r56536, r56524, r56535, MPFR_RNDN);
        return mpfr_get_d(r56536, MPFR_RNDN);
}

