#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 r55085 = x;
        float r55086 = y;
        float r55087 = r55085 / r55086;
        float r55088 = log(r55087);
        float r55089 = r55085 * r55088;
        return r55089;
}

double f_id(double x, double y) {
        double r55090 = x;
        double r55091 = y;
        double r55092 = r55090 / r55091;
        double r55093 = log(r55092);
        double r55094 = r55090 * r55093;
        return r55094;
}


double f_of(float x, float y) {
        float r55095 = x;
        float r55096 = r55095 + r55095;
        float r55097 = r55095 + r55096;
        float r55098 = cbrt(r55095);
        float r55099 = 1;
        float r55100 = y;
        float r55101 = r55099 / r55100;
        float r55102 = cbrt(r55101);
        float r55103 = r55098 * r55102;
        float r55104 = log(r55103);
        float r55105 = r55097 * r55104;
        return r55105;
}

double f_od(double x, double y) {
        double r55106 = x;
        double r55107 = r55106 + r55106;
        double r55108 = r55106 + r55107;
        double r55109 = cbrt(r55106);
        double r55110 = 1;
        double r55111 = y;
        double r55112 = r55110 / r55111;
        double r55113 = cbrt(r55112);
        double r55114 = r55109 * r55113;
        double r55115 = log(r55114);
        double r55116 = r55108 * r55115;
        return r55116;
}

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 r55117, r55118, r55119, r55120, r55121;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55117);
        mpfr_init(r55118);
        mpfr_init(r55119);
        mpfr_init(r55120);
        mpfr_init(r55121);
}

double f_im(double x, double y) {
        mpfr_set_d(r55117, x, MPFR_RNDN);
        mpfr_set_d(r55118, y, MPFR_RNDN);
        mpfr_div(r55119, r55117, r55118, MPFR_RNDN);
        mpfr_log(r55120, r55119, MPFR_RNDN);
        mpfr_mul(r55121, r55117, r55120, MPFR_RNDN);
        return mpfr_get_d(r55121, MPFR_RNDN);
}

static mpfr_t r55122, r55123, r55124, r55125, r55126, r55127, r55128, r55129, r55130, r55131, r55132;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55122);
        mpfr_init(r55123);
        mpfr_init(r55124);
        mpfr_init(r55125);
        mpfr_init_set_str(r55126, "1", 10, MPFR_RNDN);
        mpfr_init(r55127);
        mpfr_init(r55128);
        mpfr_init(r55129);
        mpfr_init(r55130);
        mpfr_init(r55131);
        mpfr_init(r55132);
}

double f_fm(double x, double y) {
        mpfr_set_d(r55122, x, MPFR_RNDN);
        mpfr_add(r55123, r55122, r55122, MPFR_RNDN);
        mpfr_add(r55124, r55122, r55123, MPFR_RNDN);
        mpfr_cbrt(r55125, r55122, MPFR_RNDN);
        ;
        mpfr_set_d(r55127, y, MPFR_RNDN);
        mpfr_div(r55128, r55126, r55127, MPFR_RNDN);
        mpfr_cbrt(r55129, r55128, MPFR_RNDN);
        mpfr_mul(r55130, r55125, r55129, MPFR_RNDN);
        mpfr_log(r55131, r55130, MPFR_RNDN);
        mpfr_mul(r55132, r55124, r55131, MPFR_RNDN);
        return mpfr_get_d(r55132, MPFR_RNDN);
}

static mpfr_t r55133, r55134, r55135, r55136, r55137, r55138, r55139, r55140, r55141, r55142, r55143;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55133);
        mpfr_init(r55134);
        mpfr_init(r55135);
        mpfr_init(r55136);
        mpfr_init_set_str(r55137, "1", 10, MPFR_RNDN);
        mpfr_init(r55138);
        mpfr_init(r55139);
        mpfr_init(r55140);
        mpfr_init(r55141);
        mpfr_init(r55142);
        mpfr_init(r55143);
}

double f_dm(double x, double y) {
        mpfr_set_d(r55133, x, MPFR_RNDN);
        mpfr_add(r55134, r55133, r55133, MPFR_RNDN);
        mpfr_add(r55135, r55133, r55134, MPFR_RNDN);
        mpfr_cbrt(r55136, r55133, MPFR_RNDN);
        ;
        mpfr_set_d(r55138, y, MPFR_RNDN);
        mpfr_div(r55139, r55137, r55138, MPFR_RNDN);
        mpfr_cbrt(r55140, r55139, MPFR_RNDN);
        mpfr_mul(r55141, r55136, r55140, MPFR_RNDN);
        mpfr_log(r55142, r55141, MPFR_RNDN);
        mpfr_mul(r55143, r55135, r55142, MPFR_RNDN);
        return mpfr_get_d(r55143, MPFR_RNDN);
}

