#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Data.Histogram.Bin.LogBinD:$cbinSizeN from histogram-fill-0.8.4.1";

double f_if(float x, float y) {
        float r55264 = x;
        float r55265 = y;
        float r55266 = r55264 * r55265;
        float r55267 = r55266 - r55264;
        return r55267;
}

double f_id(double x, double y) {
        double r55268 = x;
        double r55269 = y;
        double r55270 = r55268 * r55269;
        double r55271 = r55270 - r55268;
        return r55271;
}


double f_of(float x, float y) {
        float r55272 = x;
        float r55273 = y;
        float r55274 = r55272 * r55273;
        float r55275 = r55274 - r55272;
        return r55275;
}

double f_od(double x, double y) {
        double r55276 = x;
        double r55277 = y;
        double r55278 = r55276 * r55277;
        double r55279 = r55278 - r55276;
        return r55279;
}

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 r55280, r55281, r55282, r55283;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55280);
        mpfr_init(r55281);
        mpfr_init(r55282);
        mpfr_init(r55283);
}

double f_im(double x, double y) {
        mpfr_set_d(r55280, x, MPFR_RNDN);
        mpfr_set_d(r55281, y, MPFR_RNDN);
        mpfr_mul(r55282, r55280, r55281, MPFR_RNDN);
        mpfr_sub(r55283, r55282, r55280, MPFR_RNDN);
        return mpfr_get_d(r55283, MPFR_RNDN);
}

static mpfr_t r55284, r55285, r55286, r55287;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55284);
        mpfr_init(r55285);
        mpfr_init(r55286);
        mpfr_init(r55287);
}

double f_fm(double x, double y) {
        mpfr_set_d(r55284, x, MPFR_RNDN);
        mpfr_set_d(r55285, y, MPFR_RNDN);
        mpfr_mul(r55286, r55284, r55285, MPFR_RNDN);
        mpfr_sub(r55287, r55286, r55284, MPFR_RNDN);
        return mpfr_get_d(r55287, MPFR_RNDN);
}

static mpfr_t r55288, r55289, r55290, r55291;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55288);
        mpfr_init(r55289);
        mpfr_init(r55290);
        mpfr_init(r55291);
}

double f_dm(double x, double y) {
        mpfr_set_d(r55288, x, MPFR_RNDN);
        mpfr_set_d(r55289, y, MPFR_RNDN);
        mpfr_mul(r55290, r55288, r55289, MPFR_RNDN);
        mpfr_sub(r55291, r55290, r55288, MPFR_RNDN);
        return mpfr_get_d(r55291, MPFR_RNDN);
}

