#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 r55120 = x;
        float r55121 = 1.0f;
        float r55122 = r55120 * r55121;
        float r55123 = y;
        float r55124 = r55123 / r55120;
        float r55125 = r55121 - r55124;
        float r55126 = log(r55125);
        float r55127 = r55122 * r55126;
        return r55127;
}

double f_id(double x, double y) {
        double r55128 = x;
        double r55129 = 1.0;
        double r55130 = r55128 * r55129;
        double r55131 = y;
        double r55132 = r55131 / r55128;
        double r55133 = r55129 - r55132;
        double r55134 = log(r55133);
        double r55135 = r55130 * r55134;
        return r55135;
}


double f_of(float x, float y) {
        float r55136 = x;
        float r55137 = 1.0f;
        float r55138 = r55136 * r55137;
        float r55139 = y;
        float r55140 = r55139 / r55136;
        float r55141 = r55137 - r55140;
        float r55142 = log(r55141);
        float r55143 = r55138 * r55142;
        return r55143;
}

double f_od(double x, double y) {
        double r55144 = x;
        double r55145 = 1.0;
        double r55146 = r55144 * r55145;
        double r55147 = y;
        double r55148 = r55147 / r55144;
        double r55149 = r55145 - r55148;
        double r55150 = log(r55149);
        double r55151 = r55146 * r55150;
        return r55151;
}

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 r55152, r55153, r55154, r55155, r55156, r55157, r55158, r55159;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r55152);
        mpfr_init_set_str(r55153, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55154);
        mpfr_init(r55155);
        mpfr_init(r55156);
        mpfr_init(r55157);
        mpfr_init(r55158);
        mpfr_init(r55159);
}

double f_im(double x, double y) {
        mpfr_set_d(r55152, x, MPFR_RNDN);
        ;
        mpfr_mul(r55154, r55152, r55153, MPFR_RNDN);
        mpfr_set_d(r55155, y, MPFR_RNDN);
        mpfr_div(r55156, r55155, r55152, MPFR_RNDN);
        mpfr_sub(r55157, r55153, r55156, MPFR_RNDN);
        mpfr_log(r55158, r55157, MPFR_RNDN);
        mpfr_mul(r55159, r55154, r55158, MPFR_RNDN);
        return mpfr_get_d(r55159, MPFR_RNDN);
}

static mpfr_t r55160, r55161, r55162, r55163, r55164, r55165, r55166, r55167;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r55160);
        mpfr_init_set_str(r55161, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55162);
        mpfr_init(r55163);
        mpfr_init(r55164);
        mpfr_init(r55165);
        mpfr_init(r55166);
        mpfr_init(r55167);
}

double f_fm(double x, double y) {
        mpfr_set_d(r55160, x, MPFR_RNDN);
        ;
        mpfr_mul(r55162, r55160, r55161, MPFR_RNDN);
        mpfr_set_d(r55163, y, MPFR_RNDN);
        mpfr_div(r55164, r55163, r55160, MPFR_RNDN);
        mpfr_sub(r55165, r55161, r55164, MPFR_RNDN);
        mpfr_log(r55166, r55165, MPFR_RNDN);
        mpfr_mul(r55167, r55162, r55166, MPFR_RNDN);
        return mpfr_get_d(r55167, MPFR_RNDN);
}

static mpfr_t r55168, r55169, r55170, r55171, r55172, r55173, r55174, r55175;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r55168);
        mpfr_init_set_str(r55169, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55170);
        mpfr_init(r55171);
        mpfr_init(r55172);
        mpfr_init(r55173);
        mpfr_init(r55174);
        mpfr_init(r55175);
}

double f_dm(double x, double y) {
        mpfr_set_d(r55168, x, MPFR_RNDN);
        ;
        mpfr_mul(r55170, r55168, r55169, MPFR_RNDN);
        mpfr_set_d(r55171, y, MPFR_RNDN);
        mpfr_div(r55172, r55171, r55168, MPFR_RNDN);
        mpfr_sub(r55173, r55169, r55172, MPFR_RNDN);
        mpfr_log(r55174, r55173, MPFR_RNDN);
        mpfr_mul(r55175, r55170, r55174, MPFR_RNDN);
        return mpfr_get_d(r55175, MPFR_RNDN);
}

