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

char *name = "Data.Random.Distribution.Triangular:triangularCDF from random-fu-0.2.6.2, B";

double f_if(float x, float y, float z, float t) {
        float r55838 = x;
        float r55839 = y;
        float r55840 = z;
        float r55841 = r55839 - r55840;
        float r55842 = t;
        float r55843 = r55842 - r55840;
        float r55844 = r55841 * r55843;
        float r55845 = r55838 / r55844;
        return r55845;
}

double f_id(double x, double y, double z, double t) {
        double r55846 = x;
        double r55847 = y;
        double r55848 = z;
        double r55849 = r55847 - r55848;
        double r55850 = t;
        double r55851 = r55850 - r55848;
        double r55852 = r55849 * r55851;
        double r55853 = r55846 / r55852;
        return r55853;
}


double f_of(float x, float y, float z, float t) {
        float r55854 = x;
        float r55855 = y;
        float r55856 = z;
        float r55857 = r55855 - r55856;
        float r55858 = r55854 / r55857;
        float r55859 = t;
        float r55860 = r55859 - r55856;
        float r55861 = r55858 / r55860;
        return r55861;
}

double f_od(double x, double y, double z, double t) {
        double r55862 = x;
        double r55863 = y;
        double r55864 = z;
        double r55865 = r55863 - r55864;
        double r55866 = r55862 / r55865;
        double r55867 = t;
        double r55868 = r55867 - r55864;
        double r55869 = r55866 / r55868;
        return r55869;
}

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 r55870, r55871, r55872, r55873, r55874, r55875, r55876, r55877;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55870);
        mpfr_init(r55871);
        mpfr_init(r55872);
        mpfr_init(r55873);
        mpfr_init(r55874);
        mpfr_init(r55875);
        mpfr_init(r55876);
        mpfr_init(r55877);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r55870, x, MPFR_RNDN);
        mpfr_set_d(r55871, y, MPFR_RNDN);
        mpfr_set_d(r55872, z, MPFR_RNDN);
        mpfr_sub(r55873, r55871, r55872, MPFR_RNDN);
        mpfr_set_d(r55874, t, MPFR_RNDN);
        mpfr_sub(r55875, r55874, r55872, MPFR_RNDN);
        mpfr_mul(r55876, r55873, r55875, MPFR_RNDN);
        mpfr_div(r55877, r55870, r55876, MPFR_RNDN);
        return mpfr_get_d(r55877, MPFR_RNDN);
}

static mpfr_t r55878, r55879, r55880, r55881, r55882, r55883, r55884, r55885;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55878);
        mpfr_init(r55879);
        mpfr_init(r55880);
        mpfr_init(r55881);
        mpfr_init(r55882);
        mpfr_init(r55883);
        mpfr_init(r55884);
        mpfr_init(r55885);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r55878, x, MPFR_RNDN);
        mpfr_set_d(r55879, y, MPFR_RNDN);
        mpfr_set_d(r55880, z, MPFR_RNDN);
        mpfr_sub(r55881, r55879, r55880, MPFR_RNDN);
        mpfr_div(r55882, r55878, r55881, MPFR_RNDN);
        mpfr_set_d(r55883, t, MPFR_RNDN);
        mpfr_sub(r55884, r55883, r55880, MPFR_RNDN);
        mpfr_div(r55885, r55882, r55884, MPFR_RNDN);
        return mpfr_get_d(r55885, MPFR_RNDN);
}

static mpfr_t r55886, r55887, r55888, r55889, r55890, r55891, r55892, r55893;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55886);
        mpfr_init(r55887);
        mpfr_init(r55888);
        mpfr_init(r55889);
        mpfr_init(r55890);
        mpfr_init(r55891);
        mpfr_init(r55892);
        mpfr_init(r55893);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r55886, x, MPFR_RNDN);
        mpfr_set_d(r55887, y, MPFR_RNDN);
        mpfr_set_d(r55888, z, MPFR_RNDN);
        mpfr_sub(r55889, r55887, r55888, MPFR_RNDN);
        mpfr_div(r55890, r55886, r55889, MPFR_RNDN);
        mpfr_set_d(r55891, t, MPFR_RNDN);
        mpfr_sub(r55892, r55891, r55888, MPFR_RNDN);
        mpfr_div(r55893, r55890, r55892, MPFR_RNDN);
        return mpfr_get_d(r55893, MPFR_RNDN);
}

