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

char *name = "System.Random.MWC.Distributions:truncatedExp from mwc-random-0.13.3.2";

double f_if(float x, float y, float z, float t) {
        float r39669 = x;
        float r39670 = 1.0;
        float r39671 = y;
        float r39672 = r39670 - r39671;
        float r39673 = z;
        float r39674 = exp(r39673);
        float r39675 = r39671 * r39674;
        float r39676 = r39672 + r39675;
        float r39677 = log(r39676);
        float r39678 = t;
        float r39679 = r39677 / r39678;
        float r39680 = r39669 - r39679;
        return r39680;
}

double f_id(double x, double y, double z, double t) {
        double r39681 = x;
        double r39682 = 1.0;
        double r39683 = y;
        double r39684 = r39682 - r39683;
        double r39685 = z;
        double r39686 = exp(r39685);
        double r39687 = r39683 * r39686;
        double r39688 = r39684 + r39687;
        double r39689 = log(r39688);
        double r39690 = t;
        double r39691 = r39689 / r39690;
        double r39692 = r39681 - r39691;
        return r39692;
}


double f_of(float x, float y, float z, float t) {
        float r39693 = z;
        float r39694 = -14629085.839866638;
        bool r39695 = r39693 <= r39694;
        float r39696 = x;
        float r39697 = 1.0;
        float r39698 = y;
        float r39699 = r39697 - r39698;
        float r39700 = exp(r39693);
        float r39701 = r39698 * r39700;
        float r39702 = r39699 + r39701;
        float r39703 = log(r39702);
        float r39704 = t;
        float r39705 = r39703 / r39704;
        float r39706 = r39696 - r39705;
        float r39707 = -1.4288974179262956e-63;
        bool r39708 = r39693 <= r39707;
        float r39709 = r39693 * r39698;
        float r39710 = 1/2;
        float r39711 = 2;
        float r39712 = pow(r39693, r39711);
        float r39713 = r39712 * r39698;
        float r39714 = r39710 * r39713;
        float r39715 = r39709 + r39714;
        float r39716 = r39697 + r39715;
        float r39717 = log(r39716);
        float r39718 = r39717 / r39704;
        float r39719 = r39696 - r39718;
        float r39720 = r39693 / r39704;
        float r39721 = 0.5;
        float r39722 = r39721 * r39693;
        float r39723 = r39722 + r39697;
        float r39724 = r39720 * r39723;
        float r39725 = r39698 * r39724;
        float r39726 = r39696 - r39725;
        float r39727 = r39708 ? r39719 : r39726;
        float r39728 = r39695 ? r39706 : r39727;
        return r39728;
}

double f_od(double x, double y, double z, double t) {
        double r39729 = z;
        double r39730 = -14629085.839866638;
        bool r39731 = r39729 <= r39730;
        double r39732 = x;
        double r39733 = 1.0;
        double r39734 = y;
        double r39735 = r39733 - r39734;
        double r39736 = exp(r39729);
        double r39737 = r39734 * r39736;
        double r39738 = r39735 + r39737;
        double r39739 = log(r39738);
        double r39740 = t;
        double r39741 = r39739 / r39740;
        double r39742 = r39732 - r39741;
        double r39743 = -1.4288974179262956e-63;
        bool r39744 = r39729 <= r39743;
        double r39745 = r39729 * r39734;
        double r39746 = 1/2;
        double r39747 = 2;
        double r39748 = pow(r39729, r39747);
        double r39749 = r39748 * r39734;
        double r39750 = r39746 * r39749;
        double r39751 = r39745 + r39750;
        double r39752 = r39733 + r39751;
        double r39753 = log(r39752);
        double r39754 = r39753 / r39740;
        double r39755 = r39732 - r39754;
        double r39756 = r39729 / r39740;
        double r39757 = 0.5;
        double r39758 = r39757 * r39729;
        double r39759 = r39758 + r39733;
        double r39760 = r39756 * r39759;
        double r39761 = r39734 * r39760;
        double r39762 = r39732 - r39761;
        double r39763 = r39744 ? r39755 : r39762;
        double r39764 = r39731 ? r39742 : r39763;
        return r39764;
}

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 r39765, r39766, r39767, r39768, r39769, r39770, r39771, r39772, r39773, r39774, r39775, r39776;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r39765);
        mpfr_init_set_str(r39766, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39767);
        mpfr_init(r39768);
        mpfr_init(r39769);
        mpfr_init(r39770);
        mpfr_init(r39771);
        mpfr_init(r39772);
        mpfr_init(r39773);
        mpfr_init(r39774);
        mpfr_init(r39775);
        mpfr_init(r39776);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r39765, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39767, y, MPFR_RNDN);
        mpfr_sub(r39768, r39766, r39767, MPFR_RNDN);
        mpfr_set_d(r39769, z, MPFR_RNDN);
        mpfr_exp(r39770, r39769, MPFR_RNDN);
        mpfr_mul(r39771, r39767, r39770, MPFR_RNDN);
        mpfr_add(r39772, r39768, r39771, MPFR_RNDN);
        mpfr_log(r39773, r39772, MPFR_RNDN);
        mpfr_set_d(r39774, t, MPFR_RNDN);
        mpfr_div(r39775, r39773, r39774, MPFR_RNDN);
        mpfr_sub(r39776, r39765, r39775, MPFR_RNDN);
        return mpfr_get_d(r39776, MPFR_RNDN);
}

static mpfr_t r39777, r39778, r39779, r39780, r39781, r39782, r39783, r39784, r39785, r39786, r39787, r39788, r39789, r39790, r39791, r39792, r39793, r39794, r39795, r39796, r39797, r39798, r39799, r39800, r39801, r39802, r39803, r39804, r39805, r39806, r39807, r39808, r39809, r39810, r39811, r39812;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r39777);
        mpfr_init_set_str(r39778, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r39779);
        mpfr_init(r39780);
        mpfr_init_set_str(r39781, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39782);
        mpfr_init(r39783);
        mpfr_init(r39784);
        mpfr_init(r39785);
        mpfr_init(r39786);
        mpfr_init(r39787);
        mpfr_init(r39788);
        mpfr_init(r39789);
        mpfr_init(r39790);
        mpfr_init_set_str(r39791, "-1.4288974179262956e-63", 10, MPFR_RNDN);
        mpfr_init(r39792);
        mpfr_init(r39793);
        mpfr_init_set_str(r39794, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39795, "2", 10, MPFR_RNDN);
        mpfr_init(r39796);
        mpfr_init(r39797);
        mpfr_init(r39798);
        mpfr_init(r39799);
        mpfr_init(r39800);
        mpfr_init(r39801);
        mpfr_init(r39802);
        mpfr_init(r39803);
        mpfr_init(r39804);
        mpfr_init_set_str(r39805, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39806);
        mpfr_init(r39807);
        mpfr_init(r39808);
        mpfr_init(r39809);
        mpfr_init(r39810);
        mpfr_init(r39811);
        mpfr_init(r39812);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r39777, z, MPFR_RNDN);
        ;
        mpfr_set_si(r39779, mpfr_cmp(r39777, r39778) <= 0, MPFR_RNDN);
        mpfr_set_d(r39780, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39782, y, MPFR_RNDN);
        mpfr_sub(r39783, r39781, r39782, MPFR_RNDN);
        mpfr_exp(r39784, r39777, MPFR_RNDN);
        mpfr_mul(r39785, r39782, r39784, MPFR_RNDN);
        mpfr_add(r39786, r39783, r39785, MPFR_RNDN);
        mpfr_log(r39787, r39786, MPFR_RNDN);
        mpfr_set_d(r39788, t, MPFR_RNDN);
        mpfr_div(r39789, r39787, r39788, MPFR_RNDN);
        mpfr_sub(r39790, r39780, r39789, MPFR_RNDN);
        ;
        mpfr_set_si(r39792, mpfr_cmp(r39777, r39791) <= 0, MPFR_RNDN);
        mpfr_mul(r39793, r39777, r39782, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39796, r39777, r39795, MPFR_RNDN);
        mpfr_mul(r39797, r39796, r39782, MPFR_RNDN);
        mpfr_mul(r39798, r39794, r39797, MPFR_RNDN);
        mpfr_add(r39799, r39793, r39798, MPFR_RNDN);
        mpfr_add(r39800, r39781, r39799, MPFR_RNDN);
        mpfr_log(r39801, r39800, MPFR_RNDN);
        mpfr_div(r39802, r39801, r39788, MPFR_RNDN);
        mpfr_sub(r39803, r39780, r39802, MPFR_RNDN);
        mpfr_div(r39804, r39777, r39788, MPFR_RNDN);
        ;
        mpfr_mul(r39806, r39805, r39777, MPFR_RNDN);
        mpfr_add(r39807, r39806, r39781, MPFR_RNDN);
        mpfr_mul(r39808, r39804, r39807, MPFR_RNDN);
        mpfr_mul(r39809, r39782, r39808, MPFR_RNDN);
        mpfr_sub(r39810, r39780, r39809, MPFR_RNDN);
        if (mpfr_get_si(r39792, MPFR_RNDN)) { mpfr_set(r39811, r39803, MPFR_RNDN); } else { mpfr_set(r39811, r39810, MPFR_RNDN); };
        if (mpfr_get_si(r39779, MPFR_RNDN)) { mpfr_set(r39812, r39790, MPFR_RNDN); } else { mpfr_set(r39812, r39811, MPFR_RNDN); };
        return mpfr_get_d(r39812, MPFR_RNDN);
}

static mpfr_t r39813, r39814, r39815, r39816, r39817, r39818, r39819, r39820, r39821, r39822, r39823, r39824, r39825, r39826, r39827, r39828, r39829, r39830, r39831, r39832, r39833, r39834, r39835, r39836, r39837, r39838, r39839, r39840, r39841, r39842, r39843, r39844, r39845, r39846, r39847, r39848;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r39813);
        mpfr_init_set_str(r39814, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r39815);
        mpfr_init(r39816);
        mpfr_init_set_str(r39817, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39818);
        mpfr_init(r39819);
        mpfr_init(r39820);
        mpfr_init(r39821);
        mpfr_init(r39822);
        mpfr_init(r39823);
        mpfr_init(r39824);
        mpfr_init(r39825);
        mpfr_init(r39826);
        mpfr_init_set_str(r39827, "-1.4288974179262956e-63", 10, MPFR_RNDN);
        mpfr_init(r39828);
        mpfr_init(r39829);
        mpfr_init_set_str(r39830, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39831, "2", 10, MPFR_RNDN);
        mpfr_init(r39832);
        mpfr_init(r39833);
        mpfr_init(r39834);
        mpfr_init(r39835);
        mpfr_init(r39836);
        mpfr_init(r39837);
        mpfr_init(r39838);
        mpfr_init(r39839);
        mpfr_init(r39840);
        mpfr_init_set_str(r39841, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39842);
        mpfr_init(r39843);
        mpfr_init(r39844);
        mpfr_init(r39845);
        mpfr_init(r39846);
        mpfr_init(r39847);
        mpfr_init(r39848);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r39813, z, MPFR_RNDN);
        ;
        mpfr_set_si(r39815, mpfr_cmp(r39813, r39814) <= 0, MPFR_RNDN);
        mpfr_set_d(r39816, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39818, y, MPFR_RNDN);
        mpfr_sub(r39819, r39817, r39818, MPFR_RNDN);
        mpfr_exp(r39820, r39813, MPFR_RNDN);
        mpfr_mul(r39821, r39818, r39820, MPFR_RNDN);
        mpfr_add(r39822, r39819, r39821, MPFR_RNDN);
        mpfr_log(r39823, r39822, MPFR_RNDN);
        mpfr_set_d(r39824, t, MPFR_RNDN);
        mpfr_div(r39825, r39823, r39824, MPFR_RNDN);
        mpfr_sub(r39826, r39816, r39825, MPFR_RNDN);
        ;
        mpfr_set_si(r39828, mpfr_cmp(r39813, r39827) <= 0, MPFR_RNDN);
        mpfr_mul(r39829, r39813, r39818, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39832, r39813, r39831, MPFR_RNDN);
        mpfr_mul(r39833, r39832, r39818, MPFR_RNDN);
        mpfr_mul(r39834, r39830, r39833, MPFR_RNDN);
        mpfr_add(r39835, r39829, r39834, MPFR_RNDN);
        mpfr_add(r39836, r39817, r39835, MPFR_RNDN);
        mpfr_log(r39837, r39836, MPFR_RNDN);
        mpfr_div(r39838, r39837, r39824, MPFR_RNDN);
        mpfr_sub(r39839, r39816, r39838, MPFR_RNDN);
        mpfr_div(r39840, r39813, r39824, MPFR_RNDN);
        ;
        mpfr_mul(r39842, r39841, r39813, MPFR_RNDN);
        mpfr_add(r39843, r39842, r39817, MPFR_RNDN);
        mpfr_mul(r39844, r39840, r39843, MPFR_RNDN);
        mpfr_mul(r39845, r39818, r39844, MPFR_RNDN);
        mpfr_sub(r39846, r39816, r39845, MPFR_RNDN);
        if (mpfr_get_si(r39828, MPFR_RNDN)) { mpfr_set(r39847, r39839, MPFR_RNDN); } else { mpfr_set(r39847, r39846, MPFR_RNDN); };
        if (mpfr_get_si(r39815, MPFR_RNDN)) { mpfr_set(r39848, r39826, MPFR_RNDN); } else { mpfr_set(r39848, r39847, MPFR_RNDN); };
        return mpfr_get_d(r39848, MPFR_RNDN);
}

