#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 r45882 = x;
        float r45883 = y;
        float r45884 = r45883 - r45882;
        float r45885 = z;
        float r45886 = r45884 * r45885;
        float r45887 = t;
        float r45888 = r45886 / r45887;
        float r45889 = r45882 + r45888;
        return r45889;
}

double f_id(double x, double y, double z, double t) {
        double r45890 = x;
        double r45891 = y;
        double r45892 = r45891 - r45890;
        double r45893 = z;
        double r45894 = r45892 * r45893;
        double r45895 = t;
        double r45896 = r45894 / r45895;
        double r45897 = r45890 + r45896;
        return r45897;
}


double f_of(float x, float y, float z, float t) {
        float r45898 = x;
        float r45899 = y;
        float r45900 = r45899 - r45898;
        float r45901 = t;
        float r45902 = z;
        float r45903 = r45901 / r45902;
        float r45904 = r45900 / r45903;
        float r45905 = r45898 + r45904;
        return r45905;
}

double f_od(double x, double y, double z, double t) {
        double r45906 = x;
        double r45907 = y;
        double r45908 = r45907 - r45906;
        double r45909 = t;
        double r45910 = z;
        double r45911 = r45909 / r45910;
        double r45912 = r45908 / r45911;
        double r45913 = r45906 + r45912;
        return r45913;
}

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 r45914, r45915, r45916, r45917, r45918, r45919, r45920, r45921;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45914);
        mpfr_init(r45915);
        mpfr_init(r45916);
        mpfr_init(r45917);
        mpfr_init(r45918);
        mpfr_init(r45919);
        mpfr_init(r45920);
        mpfr_init(r45921);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r45914, x, MPFR_RNDN);
        mpfr_set_d(r45915, y, MPFR_RNDN);
        mpfr_sub(r45916, r45915, r45914, MPFR_RNDN);
        mpfr_set_d(r45917, z, MPFR_RNDN);
        mpfr_mul(r45918, r45916, r45917, MPFR_RNDN);
        mpfr_set_d(r45919, t, MPFR_RNDN);
        mpfr_div(r45920, r45918, r45919, MPFR_RNDN);
        mpfr_add(r45921, r45914, r45920, MPFR_RNDN);
        return mpfr_get_d(r45921, MPFR_RNDN);
}

static mpfr_t r45922, r45923, r45924, r45925, r45926, r45927, r45928, r45929;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45922);
        mpfr_init(r45923);
        mpfr_init(r45924);
        mpfr_init(r45925);
        mpfr_init(r45926);
        mpfr_init(r45927);
        mpfr_init(r45928);
        mpfr_init(r45929);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r45922, x, MPFR_RNDN);
        mpfr_set_d(r45923, y, MPFR_RNDN);
        mpfr_sub(r45924, r45923, r45922, MPFR_RNDN);
        mpfr_set_d(r45925, t, MPFR_RNDN);
        mpfr_set_d(r45926, z, MPFR_RNDN);
        mpfr_div(r45927, r45925, r45926, MPFR_RNDN);
        mpfr_div(r45928, r45924, r45927, MPFR_RNDN);
        mpfr_add(r45929, r45922, r45928, MPFR_RNDN);
        return mpfr_get_d(r45929, MPFR_RNDN);
}

static mpfr_t r45930, r45931, r45932, r45933, r45934, r45935, r45936, r45937;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45930);
        mpfr_init(r45931);
        mpfr_init(r45932);
        mpfr_init(r45933);
        mpfr_init(r45934);
        mpfr_init(r45935);
        mpfr_init(r45936);
        mpfr_init(r45937);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r45930, x, MPFR_RNDN);
        mpfr_set_d(r45931, y, MPFR_RNDN);
        mpfr_sub(r45932, r45931, r45930, MPFR_RNDN);
        mpfr_set_d(r45933, t, MPFR_RNDN);
        mpfr_set_d(r45934, z, MPFR_RNDN);
        mpfr_div(r45935, r45933, r45934, MPFR_RNDN);
        mpfr_div(r45936, r45932, r45935, MPFR_RNDN);
        mpfr_add(r45937, r45930, r45936, MPFR_RNDN);
        return mpfr_get_d(r45937, MPFR_RNDN);
}

