#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 r56513 = x;
        float r56514 = y;
        float r56515 = r56513 * r56514;
        float r56516 = r56515 - r56513;
        return r56516;
}

double f_id(double x, double y) {
        double r56517 = x;
        double r56518 = y;
        double r56519 = r56517 * r56518;
        double r56520 = r56519 - r56517;
        return r56520;
}


double f_of(float x, float y) {
        float r56521 = x;
        float r56522 = y;
        float r56523 = r56521 * r56522;
        float r56524 = r56523 - r56521;
        return r56524;
}

double f_od(double x, double y) {
        double r56525 = x;
        double r56526 = y;
        double r56527 = r56525 * r56526;
        double r56528 = r56527 - r56525;
        return r56528;
}

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 r56529, r56530, r56531, r56532;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56529);
        mpfr_init(r56530);
        mpfr_init(r56531);
        mpfr_init(r56532);
}

double f_im(double x, double y) {
        mpfr_set_d(r56529, x, MPFR_RNDN);
        mpfr_set_d(r56530, y, MPFR_RNDN);
        mpfr_mul(r56531, r56529, r56530, MPFR_RNDN);
        mpfr_sub(r56532, r56531, r56529, MPFR_RNDN);
        return mpfr_get_d(r56532, MPFR_RNDN);
}

static mpfr_t r56533, r56534, r56535, r56536;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56533);
        mpfr_init(r56534);
        mpfr_init(r56535);
        mpfr_init(r56536);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56533, x, MPFR_RNDN);
        mpfr_set_d(r56534, y, MPFR_RNDN);
        mpfr_mul(r56535, r56533, r56534, MPFR_RNDN);
        mpfr_sub(r56536, r56535, r56533, MPFR_RNDN);
        return mpfr_get_d(r56536, MPFR_RNDN);
}

static mpfr_t r56537, r56538, r56539, r56540;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56537);
        mpfr_init(r56538);
        mpfr_init(r56539);
        mpfr_init(r56540);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56537, x, MPFR_RNDN);
        mpfr_set_d(r56538, y, MPFR_RNDN);
        mpfr_mul(r56539, r56537, r56538, MPFR_RNDN);
        mpfr_sub(r56540, r56539, r56537, MPFR_RNDN);
        return mpfr_get_d(r56540, MPFR_RNDN);
}

