#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 r40103 = x;
        float r40104 = 1.0;
        float r40105 = y;
        float r40106 = r40104 - r40105;
        float r40107 = z;
        float r40108 = exp(r40107);
        float r40109 = r40105 * r40108;
        float r40110 = r40106 + r40109;
        float r40111 = log(r40110);
        float r40112 = t;
        float r40113 = r40111 / r40112;
        float r40114 = r40103 - r40113;
        return r40114;
}

double f_id(double x, double y, double z, double t) {
        double r40115 = x;
        double r40116 = 1.0;
        double r40117 = y;
        double r40118 = r40116 - r40117;
        double r40119 = z;
        double r40120 = exp(r40119);
        double r40121 = r40117 * r40120;
        double r40122 = r40118 + r40121;
        double r40123 = log(r40122);
        double r40124 = t;
        double r40125 = r40123 / r40124;
        double r40126 = r40115 - r40125;
        return r40126;
}


double f_of(float x, float y, float z, float t) {
        float r40127 = z;
        float r40128 = -14629085.839866638;
        bool r40129 = r40127 <= r40128;
        float r40130 = x;
        float r40131 = 1.0;
        float r40132 = y;
        float r40133 = r40131 - r40132;
        float r40134 = exp(r40127);
        float r40135 = r40132 * r40134;
        float r40136 = r40133 + r40135;
        float r40137 = log(r40136);
        float r40138 = t;
        float r40139 = r40137 / r40138;
        float r40140 = r40130 - r40139;
        float r40141 = -5.7156032664103246e-64;
        bool r40142 = r40127 <= r40141;
        float r40143 = r40127 * r40132;
        float r40144 = 1/2;
        float r40145 = 2;
        float r40146 = pow(r40127, r40145);
        float r40147 = r40146 * r40132;
        float r40148 = r40144 * r40147;
        float r40149 = r40143 + r40148;
        float r40150 = r40131 + r40149;
        float r40151 = log(r40150);
        float r40152 = r40151 / r40138;
        float r40153 = r40130 - r40152;
        float r40154 = log(r40131);
        float r40155 = r40154 / r40138;
        float r40156 = r40130 - r40155;
        float r40157 = r40127 / r40138;
        float r40158 = 0.5;
        float r40159 = r40158 * r40127;
        float r40160 = r40131 + r40159;
        float r40161 = r40157 * r40160;
        float r40162 = r40132 * r40161;
        float r40163 = r40156 - r40162;
        float r40164 = r40142 ? r40153 : r40163;
        float r40165 = r40129 ? r40140 : r40164;
        return r40165;
}

double f_od(double x, double y, double z, double t) {
        double r40166 = z;
        double r40167 = -14629085.839866638;
        bool r40168 = r40166 <= r40167;
        double r40169 = x;
        double r40170 = 1.0;
        double r40171 = y;
        double r40172 = r40170 - r40171;
        double r40173 = exp(r40166);
        double r40174 = r40171 * r40173;
        double r40175 = r40172 + r40174;
        double r40176 = log(r40175);
        double r40177 = t;
        double r40178 = r40176 / r40177;
        double r40179 = r40169 - r40178;
        double r40180 = -5.7156032664103246e-64;
        bool r40181 = r40166 <= r40180;
        double r40182 = r40166 * r40171;
        double r40183 = 1/2;
        double r40184 = 2;
        double r40185 = pow(r40166, r40184);
        double r40186 = r40185 * r40171;
        double r40187 = r40183 * r40186;
        double r40188 = r40182 + r40187;
        double r40189 = r40170 + r40188;
        double r40190 = log(r40189);
        double r40191 = r40190 / r40177;
        double r40192 = r40169 - r40191;
        double r40193 = log(r40170);
        double r40194 = r40193 / r40177;
        double r40195 = r40169 - r40194;
        double r40196 = r40166 / r40177;
        double r40197 = 0.5;
        double r40198 = r40197 * r40166;
        double r40199 = r40170 + r40198;
        double r40200 = r40196 * r40199;
        double r40201 = r40171 * r40200;
        double r40202 = r40195 - r40201;
        double r40203 = r40181 ? r40192 : r40202;
        double r40204 = r40168 ? r40179 : r40203;
        return r40204;
}

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 r40205, r40206, r40207, r40208, r40209, r40210, r40211, r40212, r40213, r40214, r40215, r40216;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r40205);
        mpfr_init_set_str(r40206, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40207);
        mpfr_init(r40208);
        mpfr_init(r40209);
        mpfr_init(r40210);
        mpfr_init(r40211);
        mpfr_init(r40212);
        mpfr_init(r40213);
        mpfr_init(r40214);
        mpfr_init(r40215);
        mpfr_init(r40216);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r40205, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40207, y, MPFR_RNDN);
        mpfr_sub(r40208, r40206, r40207, MPFR_RNDN);
        mpfr_set_d(r40209, z, MPFR_RNDN);
        mpfr_exp(r40210, r40209, MPFR_RNDN);
        mpfr_mul(r40211, r40207, r40210, MPFR_RNDN);
        mpfr_add(r40212, r40208, r40211, MPFR_RNDN);
        mpfr_log(r40213, r40212, MPFR_RNDN);
        mpfr_set_d(r40214, t, MPFR_RNDN);
        mpfr_div(r40215, r40213, r40214, MPFR_RNDN);
        mpfr_sub(r40216, r40205, r40215, MPFR_RNDN);
        return mpfr_get_d(r40216, MPFR_RNDN);
}

static mpfr_t r40217, r40218, r40219, r40220, r40221, r40222, r40223, r40224, r40225, r40226, r40227, r40228, r40229, r40230, r40231, r40232, r40233, r40234, r40235, r40236, r40237, r40238, r40239, r40240, r40241, r40242, r40243, r40244, r40245, r40246, r40247, r40248, r40249, r40250, r40251, r40252, r40253, r40254, r40255;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r40217);
        mpfr_init_set_str(r40218, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r40219);
        mpfr_init(r40220);
        mpfr_init_set_str(r40221, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40222);
        mpfr_init(r40223);
        mpfr_init(r40224);
        mpfr_init(r40225);
        mpfr_init(r40226);
        mpfr_init(r40227);
        mpfr_init(r40228);
        mpfr_init(r40229);
        mpfr_init(r40230);
        mpfr_init_set_str(r40231, "-5.7156032664103246e-64", 10, MPFR_RNDN);
        mpfr_init(r40232);
        mpfr_init(r40233);
        mpfr_init_set_str(r40234, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40235, "2", 10, MPFR_RNDN);
        mpfr_init(r40236);
        mpfr_init(r40237);
        mpfr_init(r40238);
        mpfr_init(r40239);
        mpfr_init(r40240);
        mpfr_init(r40241);
        mpfr_init(r40242);
        mpfr_init(r40243);
        mpfr_init(r40244);
        mpfr_init(r40245);
        mpfr_init(r40246);
        mpfr_init(r40247);
        mpfr_init_set_str(r40248, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40249);
        mpfr_init(r40250);
        mpfr_init(r40251);
        mpfr_init(r40252);
        mpfr_init(r40253);
        mpfr_init(r40254);
        mpfr_init(r40255);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r40217, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40219, mpfr_cmp(r40217, r40218) <= 0, MPFR_RNDN);
        mpfr_set_d(r40220, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40222, y, MPFR_RNDN);
        mpfr_sub(r40223, r40221, r40222, MPFR_RNDN);
        mpfr_exp(r40224, r40217, MPFR_RNDN);
        mpfr_mul(r40225, r40222, r40224, MPFR_RNDN);
        mpfr_add(r40226, r40223, r40225, MPFR_RNDN);
        mpfr_log(r40227, r40226, MPFR_RNDN);
        mpfr_set_d(r40228, t, MPFR_RNDN);
        mpfr_div(r40229, r40227, r40228, MPFR_RNDN);
        mpfr_sub(r40230, r40220, r40229, MPFR_RNDN);
        ;
        mpfr_set_si(r40232, mpfr_cmp(r40217, r40231) <= 0, MPFR_RNDN);
        mpfr_mul(r40233, r40217, r40222, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40236, r40217, r40235, MPFR_RNDN);
        mpfr_mul(r40237, r40236, r40222, MPFR_RNDN);
        mpfr_mul(r40238, r40234, r40237, MPFR_RNDN);
        mpfr_add(r40239, r40233, r40238, MPFR_RNDN);
        mpfr_add(r40240, r40221, r40239, MPFR_RNDN);
        mpfr_log(r40241, r40240, MPFR_RNDN);
        mpfr_div(r40242, r40241, r40228, MPFR_RNDN);
        mpfr_sub(r40243, r40220, r40242, MPFR_RNDN);
        mpfr_log(r40244, r40221, MPFR_RNDN);
        mpfr_div(r40245, r40244, r40228, MPFR_RNDN);
        mpfr_sub(r40246, r40220, r40245, MPFR_RNDN);
        mpfr_div(r40247, r40217, r40228, MPFR_RNDN);
        ;
        mpfr_mul(r40249, r40248, r40217, MPFR_RNDN);
        mpfr_add(r40250, r40221, r40249, MPFR_RNDN);
        mpfr_mul(r40251, r40247, r40250, MPFR_RNDN);
        mpfr_mul(r40252, r40222, r40251, MPFR_RNDN);
        mpfr_sub(r40253, r40246, r40252, MPFR_RNDN);
        if (mpfr_get_si(r40232, MPFR_RNDN)) { mpfr_set(r40254, r40243, MPFR_RNDN); } else { mpfr_set(r40254, r40253, MPFR_RNDN); };
        if (mpfr_get_si(r40219, MPFR_RNDN)) { mpfr_set(r40255, r40230, MPFR_RNDN); } else { mpfr_set(r40255, r40254, MPFR_RNDN); };
        return mpfr_get_d(r40255, MPFR_RNDN);
}

static mpfr_t r40256, r40257, r40258, r40259, r40260, r40261, r40262, r40263, r40264, r40265, r40266, r40267, r40268, r40269, r40270, r40271, r40272, r40273, r40274, r40275, r40276, r40277, r40278, r40279, r40280, r40281, r40282, r40283, r40284, r40285, r40286, r40287, r40288, r40289, r40290, r40291, r40292, r40293, r40294;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r40256);
        mpfr_init_set_str(r40257, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r40258);
        mpfr_init(r40259);
        mpfr_init_set_str(r40260, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40261);
        mpfr_init(r40262);
        mpfr_init(r40263);
        mpfr_init(r40264);
        mpfr_init(r40265);
        mpfr_init(r40266);
        mpfr_init(r40267);
        mpfr_init(r40268);
        mpfr_init(r40269);
        mpfr_init_set_str(r40270, "-5.7156032664103246e-64", 10, MPFR_RNDN);
        mpfr_init(r40271);
        mpfr_init(r40272);
        mpfr_init_set_str(r40273, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40274, "2", 10, MPFR_RNDN);
        mpfr_init(r40275);
        mpfr_init(r40276);
        mpfr_init(r40277);
        mpfr_init(r40278);
        mpfr_init(r40279);
        mpfr_init(r40280);
        mpfr_init(r40281);
        mpfr_init(r40282);
        mpfr_init(r40283);
        mpfr_init(r40284);
        mpfr_init(r40285);
        mpfr_init(r40286);
        mpfr_init_set_str(r40287, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40288);
        mpfr_init(r40289);
        mpfr_init(r40290);
        mpfr_init(r40291);
        mpfr_init(r40292);
        mpfr_init(r40293);
        mpfr_init(r40294);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r40256, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40258, mpfr_cmp(r40256, r40257) <= 0, MPFR_RNDN);
        mpfr_set_d(r40259, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40261, y, MPFR_RNDN);
        mpfr_sub(r40262, r40260, r40261, MPFR_RNDN);
        mpfr_exp(r40263, r40256, MPFR_RNDN);
        mpfr_mul(r40264, r40261, r40263, MPFR_RNDN);
        mpfr_add(r40265, r40262, r40264, MPFR_RNDN);
        mpfr_log(r40266, r40265, MPFR_RNDN);
        mpfr_set_d(r40267, t, MPFR_RNDN);
        mpfr_div(r40268, r40266, r40267, MPFR_RNDN);
        mpfr_sub(r40269, r40259, r40268, MPFR_RNDN);
        ;
        mpfr_set_si(r40271, mpfr_cmp(r40256, r40270) <= 0, MPFR_RNDN);
        mpfr_mul(r40272, r40256, r40261, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40275, r40256, r40274, MPFR_RNDN);
        mpfr_mul(r40276, r40275, r40261, MPFR_RNDN);
        mpfr_mul(r40277, r40273, r40276, MPFR_RNDN);
        mpfr_add(r40278, r40272, r40277, MPFR_RNDN);
        mpfr_add(r40279, r40260, r40278, MPFR_RNDN);
        mpfr_log(r40280, r40279, MPFR_RNDN);
        mpfr_div(r40281, r40280, r40267, MPFR_RNDN);
        mpfr_sub(r40282, r40259, r40281, MPFR_RNDN);
        mpfr_log(r40283, r40260, MPFR_RNDN);
        mpfr_div(r40284, r40283, r40267, MPFR_RNDN);
        mpfr_sub(r40285, r40259, r40284, MPFR_RNDN);
        mpfr_div(r40286, r40256, r40267, MPFR_RNDN);
        ;
        mpfr_mul(r40288, r40287, r40256, MPFR_RNDN);
        mpfr_add(r40289, r40260, r40288, MPFR_RNDN);
        mpfr_mul(r40290, r40286, r40289, MPFR_RNDN);
        mpfr_mul(r40291, r40261, r40290, MPFR_RNDN);
        mpfr_sub(r40292, r40285, r40291, MPFR_RNDN);
        if (mpfr_get_si(r40271, MPFR_RNDN)) { mpfr_set(r40293, r40282, MPFR_RNDN); } else { mpfr_set(r40293, r40292, MPFR_RNDN); };
        if (mpfr_get_si(r40258, MPFR_RNDN)) { mpfr_set(r40294, r40269, MPFR_RNDN); } else { mpfr_set(r40294, r40293, MPFR_RNDN); };
        return mpfr_get_d(r40294, MPFR_RNDN);
}

