#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 r55554 = x;
        float r55555 = y;
        float r55556 = z;
        float r55557 = r55555 - r55556;
        float r55558 = t;
        float r55559 = r55558 - r55556;
        float r55560 = r55557 * r55559;
        float r55561 = r55554 / r55560;
        return r55561;
}

double f_id(double x, double y, double z, double t) {
        double r55562 = x;
        double r55563 = y;
        double r55564 = z;
        double r55565 = r55563 - r55564;
        double r55566 = t;
        double r55567 = r55566 - r55564;
        double r55568 = r55565 * r55567;
        double r55569 = r55562 / r55568;
        return r55569;
}


double f_of(float x, float y, float z, float t) {
        float r55570 = x;
        float r55571 = y;
        float r55572 = z;
        float r55573 = r55571 - r55572;
        float r55574 = r55570 / r55573;
        float r55575 = t;
        float r55576 = r55575 - r55572;
        float r55577 = r55574 / r55576;
        return r55577;
}

double f_od(double x, double y, double z, double t) {
        double r55578 = x;
        double r55579 = y;
        double r55580 = z;
        double r55581 = r55579 - r55580;
        double r55582 = r55578 / r55581;
        double r55583 = t;
        double r55584 = r55583 - r55580;
        double r55585 = r55582 / r55584;
        return r55585;
}

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 r55586, r55587, r55588, r55589, r55590, r55591, r55592, r55593;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55586);
        mpfr_init(r55587);
        mpfr_init(r55588);
        mpfr_init(r55589);
        mpfr_init(r55590);
        mpfr_init(r55591);
        mpfr_init(r55592);
        mpfr_init(r55593);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r55586, x, MPFR_RNDN);
        mpfr_set_d(r55587, y, MPFR_RNDN);
        mpfr_set_d(r55588, z, MPFR_RNDN);
        mpfr_sub(r55589, r55587, r55588, MPFR_RNDN);
        mpfr_set_d(r55590, t, MPFR_RNDN);
        mpfr_sub(r55591, r55590, r55588, MPFR_RNDN);
        mpfr_mul(r55592, r55589, r55591, MPFR_RNDN);
        mpfr_div(r55593, r55586, r55592, MPFR_RNDN);
        return mpfr_get_d(r55593, MPFR_RNDN);
}

static mpfr_t r55594, r55595, r55596, r55597, r55598, r55599, r55600, r55601;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55594);
        mpfr_init(r55595);
        mpfr_init(r55596);
        mpfr_init(r55597);
        mpfr_init(r55598);
        mpfr_init(r55599);
        mpfr_init(r55600);
        mpfr_init(r55601);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r55594, x, MPFR_RNDN);
        mpfr_set_d(r55595, y, MPFR_RNDN);
        mpfr_set_d(r55596, z, MPFR_RNDN);
        mpfr_sub(r55597, r55595, r55596, MPFR_RNDN);
        mpfr_div(r55598, r55594, r55597, MPFR_RNDN);
        mpfr_set_d(r55599, t, MPFR_RNDN);
        mpfr_sub(r55600, r55599, r55596, MPFR_RNDN);
        mpfr_div(r55601, r55598, r55600, MPFR_RNDN);
        return mpfr_get_d(r55601, MPFR_RNDN);
}

static mpfr_t r55602, r55603, r55604, r55605, r55606, r55607, r55608, r55609;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55602);
        mpfr_init(r55603);
        mpfr_init(r55604);
        mpfr_init(r55605);
        mpfr_init(r55606);
        mpfr_init(r55607);
        mpfr_init(r55608);
        mpfr_init(r55609);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r55602, x, MPFR_RNDN);
        mpfr_set_d(r55603, y, MPFR_RNDN);
        mpfr_set_d(r55604, z, MPFR_RNDN);
        mpfr_sub(r55605, r55603, r55604, MPFR_RNDN);
        mpfr_div(r55606, r55602, r55605, MPFR_RNDN);
        mpfr_set_d(r55607, t, MPFR_RNDN);
        mpfr_sub(r55608, r55607, r55604, MPFR_RNDN);
        mpfr_div(r55609, r55606, r55608, MPFR_RNDN);
        return mpfr_get_d(r55609, MPFR_RNDN);
}

