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

char *name = "Numeric.Histogram:binBounds from Chart-1.5.3";

double f_if(float x, float y, float z, float t) {
        float r43084 = x;
        float r43085 = y;
        float r43086 = r43085 - r43084;
        float r43087 = z;
        float r43088 = r43086 * r43087;
        float r43089 = t;
        float r43090 = r43088 / r43089;
        float r43091 = r43084 + r43090;
        return r43091;
}

double f_id(double x, double y, double z, double t) {
        double r43092 = x;
        double r43093 = y;
        double r43094 = r43093 - r43092;
        double r43095 = z;
        double r43096 = r43094 * r43095;
        double r43097 = t;
        double r43098 = r43096 / r43097;
        double r43099 = r43092 + r43098;
        return r43099;
}


double f_of(float x, float y, float z, float t) {
        float r43100 = y;
        float r43101 = x;
        float r43102 = r43100 - r43101;
        float r43103 = t;
        float r43104 = z;
        float r43105 = r43103 / r43104;
        float r43106 = r43102 / r43105;
        float r43107 = r43106 + r43101;
        return r43107;
}

double f_od(double x, double y, double z, double t) {
        double r43108 = y;
        double r43109 = x;
        double r43110 = r43108 - r43109;
        double r43111 = t;
        double r43112 = z;
        double r43113 = r43111 / r43112;
        double r43114 = r43110 / r43113;
        double r43115 = r43114 + r43109;
        return r43115;
}

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 r43116, r43117, r43118, r43119, r43120, r43121, r43122, r43123;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r43116);
        mpfr_init(r43117);
        mpfr_init(r43118);
        mpfr_init(r43119);
        mpfr_init(r43120);
        mpfr_init(r43121);
        mpfr_init(r43122);
        mpfr_init(r43123);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r43116, x, MPFR_RNDN);
        mpfr_set_d(r43117, y, MPFR_RNDN);
        mpfr_sub(r43118, r43117, r43116, MPFR_RNDN);
        mpfr_set_d(r43119, z, MPFR_RNDN);
        mpfr_mul(r43120, r43118, r43119, MPFR_RNDN);
        mpfr_set_d(r43121, t, MPFR_RNDN);
        mpfr_div(r43122, r43120, r43121, MPFR_RNDN);
        mpfr_add(r43123, r43116, r43122, MPFR_RNDN);
        return mpfr_get_d(r43123, MPFR_RNDN);
}

static mpfr_t r43124, r43125, r43126, r43127, r43128, r43129, r43130, r43131;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r43124);
        mpfr_init(r43125);
        mpfr_init(r43126);
        mpfr_init(r43127);
        mpfr_init(r43128);
        mpfr_init(r43129);
        mpfr_init(r43130);
        mpfr_init(r43131);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r43124, y, MPFR_RNDN);
        mpfr_set_d(r43125, x, MPFR_RNDN);
        mpfr_sub(r43126, r43124, r43125, MPFR_RNDN);
        mpfr_set_d(r43127, t, MPFR_RNDN);
        mpfr_set_d(r43128, z, MPFR_RNDN);
        mpfr_div(r43129, r43127, r43128, MPFR_RNDN);
        mpfr_div(r43130, r43126, r43129, MPFR_RNDN);
        mpfr_add(r43131, r43130, r43125, MPFR_RNDN);
        return mpfr_get_d(r43131, MPFR_RNDN);
}

static mpfr_t r43132, r43133, r43134, r43135, r43136, r43137, r43138, r43139;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r43132);
        mpfr_init(r43133);
        mpfr_init(r43134);
        mpfr_init(r43135);
        mpfr_init(r43136);
        mpfr_init(r43137);
        mpfr_init(r43138);
        mpfr_init(r43139);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r43132, y, MPFR_RNDN);
        mpfr_set_d(r43133, x, MPFR_RNDN);
        mpfr_sub(r43134, r43132, r43133, MPFR_RNDN);
        mpfr_set_d(r43135, t, MPFR_RNDN);
        mpfr_set_d(r43136, z, MPFR_RNDN);
        mpfr_div(r43137, r43135, r43136, MPFR_RNDN);
        mpfr_div(r43138, r43134, r43137, MPFR_RNDN);
        mpfr_add(r43139, r43138, r43133, MPFR_RNDN);
        return mpfr_get_d(r43139, MPFR_RNDN);
}

