#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 r36097 = x;
        float r36098 = 1.0f;
        float r36099 = y;
        float r36100 = r36098 - r36099;
        float r36101 = z;
        float r36102 = exp(r36101);
        float r36103 = r36099 * r36102;
        float r36104 = r36100 + r36103;
        float r36105 = log(r36104);
        float r36106 = t;
        float r36107 = r36105 / r36106;
        float r36108 = r36097 - r36107;
        return r36108;
}

double f_id(double x, double y, double z, double t) {
        double r36109 = x;
        double r36110 = 1.0;
        double r36111 = y;
        double r36112 = r36110 - r36111;
        double r36113 = z;
        double r36114 = exp(r36113);
        double r36115 = r36111 * r36114;
        double r36116 = r36112 + r36115;
        double r36117 = log(r36116);
        double r36118 = t;
        double r36119 = r36117 / r36118;
        double r36120 = r36109 - r36119;
        return r36120;
}


double f_of(float x, float y, float z, float t) {
        float r36121 = z;
        float r36122 = -5.9430640354654945e+19f;
        bool r36123 = r36121 <= r36122;
        float r36124 = x;
        float r36125 = 1.0f;
        float r36126 = y;
        float r36127 = r36125 - r36126;
        float r36128 = exp(r36121);
        float r36129 = r36126 * r36128;
        float r36130 = r36127 + r36129;
        float r36131 = log(r36130);
        float r36132 = t;
        float r36133 = r36131 / r36132;
        float r36134 = r36124 - r36133;
        float r36135 = 2.3218028994593566e-103f;
        bool r36136 = r36121 <= r36135;
        float r36137 = log(r36125);
        float r36138 = r36137 / r36132;
        float r36139 = r36124 - r36138;
        float r36140 = r36121 / r36132;
        float r36141 = r36140 * r36126;
        float r36142 = 0.5f;
        float r36143 = r36142 * r36121;
        float r36144 = r36143 + r36125;
        float r36145 = r36141 * r36144;
        float r36146 = r36139 - r36145;
        float r36147 = 0.5f;
        float r36148 = r36121 * r36121;
        float r36149 = r36126 * r36148;
        float r36150 = r36147 * r36149;
        float r36151 = r36126 * r36121;
        float r36152 = r36125 + r36151;
        float r36153 = r36150 + r36152;
        float r36154 = log(r36153);
        float r36155 = r36154 / r36132;
        float r36156 = r36124 - r36155;
        float r36157 = r36136 ? r36146 : r36156;
        float r36158 = r36123 ? r36134 : r36157;
        return r36158;
}

double f_od(double x, double y, double z, double t) {
        double r36159 = z;
        double r36160 = -5.9430640354654945e+19;
        bool r36161 = r36159 <= r36160;
        double r36162 = x;
        double r36163 = 1.0;
        double r36164 = y;
        double r36165 = r36163 - r36164;
        double r36166 = exp(r36159);
        double r36167 = r36164 * r36166;
        double r36168 = r36165 + r36167;
        double r36169 = log(r36168);
        double r36170 = t;
        double r36171 = r36169 / r36170;
        double r36172 = r36162 - r36171;
        double r36173 = 2.3218028994593566e-103;
        bool r36174 = r36159 <= r36173;
        double r36175 = log(r36163);
        double r36176 = r36175 / r36170;
        double r36177 = r36162 - r36176;
        double r36178 = r36159 / r36170;
        double r36179 = r36178 * r36164;
        double r36180 = 0.5;
        double r36181 = r36180 * r36159;
        double r36182 = r36181 + r36163;
        double r36183 = r36179 * r36182;
        double r36184 = r36177 - r36183;
        double r36185 = 0.5;
        double r36186 = r36159 * r36159;
        double r36187 = r36164 * r36186;
        double r36188 = r36185 * r36187;
        double r36189 = r36164 * r36159;
        double r36190 = r36163 + r36189;
        double r36191 = r36188 + r36190;
        double r36192 = log(r36191);
        double r36193 = r36192 / r36170;
        double r36194 = r36162 - r36193;
        double r36195 = r36174 ? r36184 : r36194;
        double r36196 = r36161 ? r36172 : r36195;
        return r36196;
}

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 r36197, r36198, r36199, r36200, r36201, r36202, r36203, r36204, r36205, r36206, r36207, r36208;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r36197);
        mpfr_init_set_str(r36198, "1.0", 10, MPFR_RNDN);
        mpfr_init(r36199);
        mpfr_init(r36200);
        mpfr_init(r36201);
        mpfr_init(r36202);
        mpfr_init(r36203);
        mpfr_init(r36204);
        mpfr_init(r36205);
        mpfr_init(r36206);
        mpfr_init(r36207);
        mpfr_init(r36208);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r36197, x, MPFR_RNDN);
        ;
        mpfr_set_d(r36199, y, MPFR_RNDN);
        mpfr_sub(r36200, r36198, r36199, MPFR_RNDN);
        mpfr_set_d(r36201, z, MPFR_RNDN);
        mpfr_exp(r36202, r36201, MPFR_RNDN);
        mpfr_mul(r36203, r36199, r36202, MPFR_RNDN);
        mpfr_add(r36204, r36200, r36203, MPFR_RNDN);
        mpfr_log(r36205, r36204, MPFR_RNDN);
        mpfr_set_d(r36206, t, MPFR_RNDN);
        mpfr_div(r36207, r36205, r36206, MPFR_RNDN);
        mpfr_sub(r36208, r36197, r36207, MPFR_RNDN);
        return mpfr_get_d(r36208, MPFR_RNDN);
}

static mpfr_t r36209, r36210, r36211, r36212, r36213, r36214, r36215, r36216, r36217, r36218, r36219, r36220, r36221, r36222, r36223, r36224, r36225, r36226, r36227, r36228, r36229, r36230, r36231, r36232, r36233, r36234, r36235, r36236, r36237, r36238, r36239, r36240, r36241, r36242, r36243, r36244, r36245, r36246;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36209);
        mpfr_init_set_str(r36210, "-5.9430640354654945e+19", 10, MPFR_RNDN);
        mpfr_init(r36211);
        mpfr_init(r36212);
        mpfr_init_set_str(r36213, "1.0", 10, MPFR_RNDN);
        mpfr_init(r36214);
        mpfr_init(r36215);
        mpfr_init(r36216);
        mpfr_init(r36217);
        mpfr_init(r36218);
        mpfr_init(r36219);
        mpfr_init(r36220);
        mpfr_init(r36221);
        mpfr_init(r36222);
        mpfr_init_set_str(r36223, "2.3218028994593566e-103", 10, MPFR_RNDN);
        mpfr_init(r36224);
        mpfr_init(r36225);
        mpfr_init(r36226);
        mpfr_init(r36227);
        mpfr_init(r36228);
        mpfr_init(r36229);
        mpfr_init_set_str(r36230, "0.5", 10, MPFR_RNDN);
        mpfr_init(r36231);
        mpfr_init(r36232);
        mpfr_init(r36233);
        mpfr_init(r36234);
        mpfr_init_set_str(r36235, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36236);
        mpfr_init(r36237);
        mpfr_init(r36238);
        mpfr_init(r36239);
        mpfr_init(r36240);
        mpfr_init(r36241);
        mpfr_init(r36242);
        mpfr_init(r36243);
        mpfr_init(r36244);
        mpfr_init(r36245);
        mpfr_init(r36246);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r36209, z, MPFR_RNDN);
        ;
        mpfr_set_si(r36211, mpfr_cmp(r36209, r36210) <= 0, MPFR_RNDN);
        mpfr_set_d(r36212, x, MPFR_RNDN);
        ;
        mpfr_set_d(r36214, y, MPFR_RNDN);
        mpfr_sub(r36215, r36213, r36214, MPFR_RNDN);
        mpfr_exp(r36216, r36209, MPFR_RNDN);
        mpfr_mul(r36217, r36214, r36216, MPFR_RNDN);
        mpfr_add(r36218, r36215, r36217, MPFR_RNDN);
        mpfr_log(r36219, r36218, MPFR_RNDN);
        mpfr_set_d(r36220, t, MPFR_RNDN);
        mpfr_div(r36221, r36219, r36220, MPFR_RNDN);
        mpfr_sub(r36222, r36212, r36221, MPFR_RNDN);
        ;
        mpfr_set_si(r36224, mpfr_cmp(r36209, r36223) <= 0, MPFR_RNDN);
        mpfr_log(r36225, r36213, MPFR_RNDN);
        mpfr_div(r36226, r36225, r36220, MPFR_RNDN);
        mpfr_sub(r36227, r36212, r36226, MPFR_RNDN);
        mpfr_div(r36228, r36209, r36220, MPFR_RNDN);
        mpfr_mul(r36229, r36228, r36214, MPFR_RNDN);
        ;
        mpfr_mul(r36231, r36230, r36209, MPFR_RNDN);
        mpfr_add(r36232, r36231, r36213, MPFR_RNDN);
        mpfr_mul(r36233, r36229, r36232, MPFR_RNDN);
        mpfr_sub(r36234, r36227, r36233, MPFR_RNDN);
        ;
        mpfr_sqr(r36236, r36209, MPFR_RNDN);
        mpfr_mul(r36237, r36214, r36236, MPFR_RNDN);
        mpfr_mul(r36238, r36235, r36237, MPFR_RNDN);
        mpfr_mul(r36239, r36214, r36209, MPFR_RNDN);
        mpfr_add(r36240, r36213, r36239, MPFR_RNDN);
        mpfr_add(r36241, r36238, r36240, MPFR_RNDN);
        mpfr_log(r36242, r36241, MPFR_RNDN);
        mpfr_div(r36243, r36242, r36220, MPFR_RNDN);
        mpfr_sub(r36244, r36212, r36243, MPFR_RNDN);
        if (mpfr_get_si(r36224, MPFR_RNDN)) { mpfr_set(r36245, r36234, MPFR_RNDN); } else { mpfr_set(r36245, r36244, MPFR_RNDN); };
        if (mpfr_get_si(r36211, MPFR_RNDN)) { mpfr_set(r36246, r36222, MPFR_RNDN); } else { mpfr_set(r36246, r36245, MPFR_RNDN); };
        return mpfr_get_d(r36246, MPFR_RNDN);
}

static mpfr_t r36247, r36248, r36249, r36250, r36251, r36252, r36253, r36254, r36255, r36256, r36257, r36258, r36259, r36260, r36261, r36262, r36263, r36264, r36265, r36266, r36267, r36268, r36269, r36270, r36271, r36272, r36273, r36274, r36275, r36276, r36277, r36278, r36279, r36280, r36281, r36282, r36283, r36284;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36247);
        mpfr_init_set_str(r36248, "-5.9430640354654945e+19", 10, MPFR_RNDN);
        mpfr_init(r36249);
        mpfr_init(r36250);
        mpfr_init_set_str(r36251, "1.0", 10, MPFR_RNDN);
        mpfr_init(r36252);
        mpfr_init(r36253);
        mpfr_init(r36254);
        mpfr_init(r36255);
        mpfr_init(r36256);
        mpfr_init(r36257);
        mpfr_init(r36258);
        mpfr_init(r36259);
        mpfr_init(r36260);
        mpfr_init_set_str(r36261, "2.3218028994593566e-103", 10, MPFR_RNDN);
        mpfr_init(r36262);
        mpfr_init(r36263);
        mpfr_init(r36264);
        mpfr_init(r36265);
        mpfr_init(r36266);
        mpfr_init(r36267);
        mpfr_init_set_str(r36268, "0.5", 10, MPFR_RNDN);
        mpfr_init(r36269);
        mpfr_init(r36270);
        mpfr_init(r36271);
        mpfr_init(r36272);
        mpfr_init_set_str(r36273, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36274);
        mpfr_init(r36275);
        mpfr_init(r36276);
        mpfr_init(r36277);
        mpfr_init(r36278);
        mpfr_init(r36279);
        mpfr_init(r36280);
        mpfr_init(r36281);
        mpfr_init(r36282);
        mpfr_init(r36283);
        mpfr_init(r36284);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r36247, z, MPFR_RNDN);
        ;
        mpfr_set_si(r36249, mpfr_cmp(r36247, r36248) <= 0, MPFR_RNDN);
        mpfr_set_d(r36250, x, MPFR_RNDN);
        ;
        mpfr_set_d(r36252, y, MPFR_RNDN);
        mpfr_sub(r36253, r36251, r36252, MPFR_RNDN);
        mpfr_exp(r36254, r36247, MPFR_RNDN);
        mpfr_mul(r36255, r36252, r36254, MPFR_RNDN);
        mpfr_add(r36256, r36253, r36255, MPFR_RNDN);
        mpfr_log(r36257, r36256, MPFR_RNDN);
        mpfr_set_d(r36258, t, MPFR_RNDN);
        mpfr_div(r36259, r36257, r36258, MPFR_RNDN);
        mpfr_sub(r36260, r36250, r36259, MPFR_RNDN);
        ;
        mpfr_set_si(r36262, mpfr_cmp(r36247, r36261) <= 0, MPFR_RNDN);
        mpfr_log(r36263, r36251, MPFR_RNDN);
        mpfr_div(r36264, r36263, r36258, MPFR_RNDN);
        mpfr_sub(r36265, r36250, r36264, MPFR_RNDN);
        mpfr_div(r36266, r36247, r36258, MPFR_RNDN);
        mpfr_mul(r36267, r36266, r36252, MPFR_RNDN);
        ;
        mpfr_mul(r36269, r36268, r36247, MPFR_RNDN);
        mpfr_add(r36270, r36269, r36251, MPFR_RNDN);
        mpfr_mul(r36271, r36267, r36270, MPFR_RNDN);
        mpfr_sub(r36272, r36265, r36271, MPFR_RNDN);
        ;
        mpfr_sqr(r36274, r36247, MPFR_RNDN);
        mpfr_mul(r36275, r36252, r36274, MPFR_RNDN);
        mpfr_mul(r36276, r36273, r36275, MPFR_RNDN);
        mpfr_mul(r36277, r36252, r36247, MPFR_RNDN);
        mpfr_add(r36278, r36251, r36277, MPFR_RNDN);
        mpfr_add(r36279, r36276, r36278, MPFR_RNDN);
        mpfr_log(r36280, r36279, MPFR_RNDN);
        mpfr_div(r36281, r36280, r36258, MPFR_RNDN);
        mpfr_sub(r36282, r36250, r36281, MPFR_RNDN);
        if (mpfr_get_si(r36262, MPFR_RNDN)) { mpfr_set(r36283, r36272, MPFR_RNDN); } else { mpfr_set(r36283, r36282, MPFR_RNDN); };
        if (mpfr_get_si(r36249, MPFR_RNDN)) { mpfr_set(r36284, r36260, MPFR_RNDN); } else { mpfr_set(r36284, r36283, MPFR_RNDN); };
        return mpfr_get_d(r36284, MPFR_RNDN);
}

