#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 r55612 = x;
        float r55613 = y;
        float r55614 = z;
        float r55615 = r55613 - r55614;
        float r55616 = t;
        float r55617 = r55616 - r55614;
        float r55618 = r55615 * r55617;
        float r55619 = r55612 / r55618;
        return r55619;
}

double f_id(double x, double y, double z, double t) {
        double r55620 = x;
        double r55621 = y;
        double r55622 = z;
        double r55623 = r55621 - r55622;
        double r55624 = t;
        double r55625 = r55624 - r55622;
        double r55626 = r55623 * r55625;
        double r55627 = r55620 / r55626;
        return r55627;
}


double f_of(float x, float y, float z, float t) {
        float r55628 = x;
        float r55629 = y;
        float r55630 = z;
        float r55631 = r55629 - r55630;
        float r55632 = r55628 / r55631;
        float r55633 = t;
        float r55634 = r55633 - r55630;
        float r55635 = r55632 / r55634;
        return r55635;
}

double f_od(double x, double y, double z, double t) {
        double r55636 = x;
        double r55637 = y;
        double r55638 = z;
        double r55639 = r55637 - r55638;
        double r55640 = r55636 / r55639;
        double r55641 = t;
        double r55642 = r55641 - r55638;
        double r55643 = r55640 / r55642;
        return r55643;
}

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 r55644, r55645, r55646, r55647, r55648, r55649, r55650, r55651;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55644);
        mpfr_init(r55645);
        mpfr_init(r55646);
        mpfr_init(r55647);
        mpfr_init(r55648);
        mpfr_init(r55649);
        mpfr_init(r55650);
        mpfr_init(r55651);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r55644, x, MPFR_RNDN);
        mpfr_set_d(r55645, y, MPFR_RNDN);
        mpfr_set_d(r55646, z, MPFR_RNDN);
        mpfr_sub(r55647, r55645, r55646, MPFR_RNDN);
        mpfr_set_d(r55648, t, MPFR_RNDN);
        mpfr_sub(r55649, r55648, r55646, MPFR_RNDN);
        mpfr_mul(r55650, r55647, r55649, MPFR_RNDN);
        mpfr_div(r55651, r55644, r55650, MPFR_RNDN);
        return mpfr_get_d(r55651, MPFR_RNDN);
}

static mpfr_t r55652, r55653, r55654, r55655, r55656, r55657, r55658, r55659;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55652);
        mpfr_init(r55653);
        mpfr_init(r55654);
        mpfr_init(r55655);
        mpfr_init(r55656);
        mpfr_init(r55657);
        mpfr_init(r55658);
        mpfr_init(r55659);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r55652, x, MPFR_RNDN);
        mpfr_set_d(r55653, y, MPFR_RNDN);
        mpfr_set_d(r55654, z, MPFR_RNDN);
        mpfr_sub(r55655, r55653, r55654, MPFR_RNDN);
        mpfr_div(r55656, r55652, r55655, MPFR_RNDN);
        mpfr_set_d(r55657, t, MPFR_RNDN);
        mpfr_sub(r55658, r55657, r55654, MPFR_RNDN);
        mpfr_div(r55659, r55656, r55658, MPFR_RNDN);
        return mpfr_get_d(r55659, MPFR_RNDN);
}

static mpfr_t r55660, r55661, r55662, r55663, r55664, r55665, r55666, r55667;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55660);
        mpfr_init(r55661);
        mpfr_init(r55662);
        mpfr_init(r55663);
        mpfr_init(r55664);
        mpfr_init(r55665);
        mpfr_init(r55666);
        mpfr_init(r55667);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r55660, x, MPFR_RNDN);
        mpfr_set_d(r55661, y, MPFR_RNDN);
        mpfr_set_d(r55662, z, MPFR_RNDN);
        mpfr_sub(r55663, r55661, r55662, MPFR_RNDN);
        mpfr_div(r55664, r55660, r55663, MPFR_RNDN);
        mpfr_set_d(r55665, t, MPFR_RNDN);
        mpfr_sub(r55666, r55665, r55662, MPFR_RNDN);
        mpfr_div(r55667, r55664, r55666, MPFR_RNDN);
        return mpfr_get_d(r55667, MPFR_RNDN);
}

