#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 r40075 = x;
        float r40076 = 1.0;
        float r40077 = y;
        float r40078 = r40076 - r40077;
        float r40079 = z;
        float r40080 = exp(r40079);
        float r40081 = r40077 * r40080;
        float r40082 = r40078 + r40081;
        float r40083 = log(r40082);
        float r40084 = t;
        float r40085 = r40083 / r40084;
        float r40086 = r40075 - r40085;
        return r40086;
}

double f_id(double x, double y, double z, double t) {
        double r40087 = x;
        double r40088 = 1.0;
        double r40089 = y;
        double r40090 = r40088 - r40089;
        double r40091 = z;
        double r40092 = exp(r40091);
        double r40093 = r40089 * r40092;
        double r40094 = r40090 + r40093;
        double r40095 = log(r40094);
        double r40096 = t;
        double r40097 = r40095 / r40096;
        double r40098 = r40087 - r40097;
        return r40098;
}


double f_of(float x, float y, float z, float t) {
        float r40099 = z;
        float r40100 = -14290970.129913107;
        bool r40101 = r40099 <= r40100;
        float r40102 = x;
        float r40103 = 1.0;
        float r40104 = y;
        float r40105 = r40103 - r40104;
        float r40106 = exp(r40099);
        float r40107 = r40104 * r40106;
        float r40108 = r40105 + r40107;
        float r40109 = log(r40108);
        float r40110 = t;
        float r40111 = r40109 / r40110;
        float r40112 = r40102 - r40111;
        float r40113 = -2.265784190424986e-69;
        bool r40114 = r40099 <= r40113;
        float r40115 = r40099 * r40104;
        float r40116 = 1/2;
        float r40117 = 2;
        float r40118 = pow(r40099, r40117);
        float r40119 = r40118 * r40104;
        float r40120 = r40116 * r40119;
        float r40121 = r40115 + r40120;
        float r40122 = r40103 + r40121;
        float r40123 = log(r40122);
        float r40124 = r40123 / r40110;
        float r40125 = r40102 - r40124;
        float r40126 = log(r40103);
        float r40127 = r40126 / r40110;
        float r40128 = r40102 - r40127;
        float r40129 = r40099 / r40110;
        float r40130 = 0.5;
        float r40131 = r40130 * r40099;
        float r40132 = r40103 + r40131;
        float r40133 = r40129 * r40132;
        float r40134 = r40104 * r40133;
        float r40135 = r40128 - r40134;
        float r40136 = r40114 ? r40125 : r40135;
        float r40137 = r40101 ? r40112 : r40136;
        return r40137;
}

double f_od(double x, double y, double z, double t) {
        double r40138 = z;
        double r40139 = -14290970.129913107;
        bool r40140 = r40138 <= r40139;
        double r40141 = x;
        double r40142 = 1.0;
        double r40143 = y;
        double r40144 = r40142 - r40143;
        double r40145 = exp(r40138);
        double r40146 = r40143 * r40145;
        double r40147 = r40144 + r40146;
        double r40148 = log(r40147);
        double r40149 = t;
        double r40150 = r40148 / r40149;
        double r40151 = r40141 - r40150;
        double r40152 = -2.265784190424986e-69;
        bool r40153 = r40138 <= r40152;
        double r40154 = r40138 * r40143;
        double r40155 = 1/2;
        double r40156 = 2;
        double r40157 = pow(r40138, r40156);
        double r40158 = r40157 * r40143;
        double r40159 = r40155 * r40158;
        double r40160 = r40154 + r40159;
        double r40161 = r40142 + r40160;
        double r40162 = log(r40161);
        double r40163 = r40162 / r40149;
        double r40164 = r40141 - r40163;
        double r40165 = log(r40142);
        double r40166 = r40165 / r40149;
        double r40167 = r40141 - r40166;
        double r40168 = r40138 / r40149;
        double r40169 = 0.5;
        double r40170 = r40169 * r40138;
        double r40171 = r40142 + r40170;
        double r40172 = r40168 * r40171;
        double r40173 = r40143 * r40172;
        double r40174 = r40167 - r40173;
        double r40175 = r40153 ? r40164 : r40174;
        double r40176 = r40140 ? r40151 : r40175;
        return r40176;
}

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 r40177, r40178, r40179, r40180, r40181, r40182, r40183, r40184, r40185, r40186, r40187, r40188;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1680);
        mpfr_init(r40177);
        mpfr_init_set_str(r40178, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40179);
        mpfr_init(r40180);
        mpfr_init(r40181);
        mpfr_init(r40182);
        mpfr_init(r40183);
        mpfr_init(r40184);
        mpfr_init(r40185);
        mpfr_init(r40186);
        mpfr_init(r40187);
        mpfr_init(r40188);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r40177, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40179, y, MPFR_RNDN);
        mpfr_sub(r40180, r40178, r40179, MPFR_RNDN);
        mpfr_set_d(r40181, z, MPFR_RNDN);
        mpfr_exp(r40182, r40181, MPFR_RNDN);
        mpfr_mul(r40183, r40179, r40182, MPFR_RNDN);
        mpfr_add(r40184, r40180, r40183, MPFR_RNDN);
        mpfr_log(r40185, r40184, MPFR_RNDN);
        mpfr_set_d(r40186, t, MPFR_RNDN);
        mpfr_div(r40187, r40185, r40186, MPFR_RNDN);
        mpfr_sub(r40188, r40177, r40187, MPFR_RNDN);
        return mpfr_get_d(r40188, MPFR_RNDN);
}

static mpfr_t r40189, r40190, r40191, r40192, r40193, r40194, r40195, r40196, r40197, r40198, r40199, r40200, r40201, r40202, r40203, r40204, r40205, r40206, r40207, r40208, r40209, r40210, r40211, r40212, r40213, r40214, r40215, r40216, r40217, r40218, r40219, r40220, r40221, r40222, r40223, r40224, r40225, r40226, r40227;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r40189);
        mpfr_init_set_str(r40190, "-14290970.129913107", 10, MPFR_RNDN);
        mpfr_init(r40191);
        mpfr_init(r40192);
        mpfr_init_set_str(r40193, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40194);
        mpfr_init(r40195);
        mpfr_init(r40196);
        mpfr_init(r40197);
        mpfr_init(r40198);
        mpfr_init(r40199);
        mpfr_init(r40200);
        mpfr_init(r40201);
        mpfr_init(r40202);
        mpfr_init_set_str(r40203, "-2.265784190424986e-69", 10, MPFR_RNDN);
        mpfr_init(r40204);
        mpfr_init(r40205);
        mpfr_init_set_str(r40206, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40207, "2", 10, MPFR_RNDN);
        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);
        mpfr_init(r40217);
        mpfr_init(r40218);
        mpfr_init(r40219);
        mpfr_init_set_str(r40220, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40221);
        mpfr_init(r40222);
        mpfr_init(r40223);
        mpfr_init(r40224);
        mpfr_init(r40225);
        mpfr_init(r40226);
        mpfr_init(r40227);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r40189, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40191, mpfr_cmp(r40189, r40190) <= 0, MPFR_RNDN);
        mpfr_set_d(r40192, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40194, y, MPFR_RNDN);
        mpfr_sub(r40195, r40193, r40194, MPFR_RNDN);
        mpfr_exp(r40196, r40189, MPFR_RNDN);
        mpfr_mul(r40197, r40194, r40196, MPFR_RNDN);
        mpfr_add(r40198, r40195, r40197, MPFR_RNDN);
        mpfr_log(r40199, r40198, MPFR_RNDN);
        mpfr_set_d(r40200, t, MPFR_RNDN);
        mpfr_div(r40201, r40199, r40200, MPFR_RNDN);
        mpfr_sub(r40202, r40192, r40201, MPFR_RNDN);
        ;
        mpfr_set_si(r40204, mpfr_cmp(r40189, r40203) <= 0, MPFR_RNDN);
        mpfr_mul(r40205, r40189, r40194, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40208, r40189, r40207, MPFR_RNDN);
        mpfr_mul(r40209, r40208, r40194, MPFR_RNDN);
        mpfr_mul(r40210, r40206, r40209, MPFR_RNDN);
        mpfr_add(r40211, r40205, r40210, MPFR_RNDN);
        mpfr_add(r40212, r40193, r40211, MPFR_RNDN);
        mpfr_log(r40213, r40212, MPFR_RNDN);
        mpfr_div(r40214, r40213, r40200, MPFR_RNDN);
        mpfr_sub(r40215, r40192, r40214, MPFR_RNDN);
        mpfr_log(r40216, r40193, MPFR_RNDN);
        mpfr_div(r40217, r40216, r40200, MPFR_RNDN);
        mpfr_sub(r40218, r40192, r40217, MPFR_RNDN);
        mpfr_div(r40219, r40189, r40200, MPFR_RNDN);
        ;
        mpfr_mul(r40221, r40220, r40189, MPFR_RNDN);
        mpfr_add(r40222, r40193, r40221, MPFR_RNDN);
        mpfr_mul(r40223, r40219, r40222, MPFR_RNDN);
        mpfr_mul(r40224, r40194, r40223, MPFR_RNDN);
        mpfr_sub(r40225, r40218, r40224, MPFR_RNDN);
        if (mpfr_get_si(r40204, MPFR_RNDN)) { mpfr_set(r40226, r40215, MPFR_RNDN); } else { mpfr_set(r40226, r40225, MPFR_RNDN); };
        if (mpfr_get_si(r40191, MPFR_RNDN)) { mpfr_set(r40227, r40202, MPFR_RNDN); } else { mpfr_set(r40227, r40226, MPFR_RNDN); };
        return mpfr_get_d(r40227, MPFR_RNDN);
}

static mpfr_t 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, r40256, r40257, r40258, r40259, r40260, r40261, r40262, r40263, r40264, r40265, r40266;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r40228);
        mpfr_init_set_str(r40229, "-14290970.129913107", 10, MPFR_RNDN);
        mpfr_init(r40230);
        mpfr_init(r40231);
        mpfr_init_set_str(r40232, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40233);
        mpfr_init(r40234);
        mpfr_init(r40235);
        mpfr_init(r40236);
        mpfr_init(r40237);
        mpfr_init(r40238);
        mpfr_init(r40239);
        mpfr_init(r40240);
        mpfr_init(r40241);
        mpfr_init_set_str(r40242, "-2.265784190424986e-69", 10, MPFR_RNDN);
        mpfr_init(r40243);
        mpfr_init(r40244);
        mpfr_init_set_str(r40245, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40246, "2", 10, MPFR_RNDN);
        mpfr_init(r40247);
        mpfr_init(r40248);
        mpfr_init(r40249);
        mpfr_init(r40250);
        mpfr_init(r40251);
        mpfr_init(r40252);
        mpfr_init(r40253);
        mpfr_init(r40254);
        mpfr_init(r40255);
        mpfr_init(r40256);
        mpfr_init(r40257);
        mpfr_init(r40258);
        mpfr_init_set_str(r40259, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40260);
        mpfr_init(r40261);
        mpfr_init(r40262);
        mpfr_init(r40263);
        mpfr_init(r40264);
        mpfr_init(r40265);
        mpfr_init(r40266);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r40228, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40230, mpfr_cmp(r40228, r40229) <= 0, MPFR_RNDN);
        mpfr_set_d(r40231, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40233, y, MPFR_RNDN);
        mpfr_sub(r40234, r40232, r40233, MPFR_RNDN);
        mpfr_exp(r40235, r40228, MPFR_RNDN);
        mpfr_mul(r40236, r40233, r40235, MPFR_RNDN);
        mpfr_add(r40237, r40234, r40236, MPFR_RNDN);
        mpfr_log(r40238, r40237, MPFR_RNDN);
        mpfr_set_d(r40239, t, MPFR_RNDN);
        mpfr_div(r40240, r40238, r40239, MPFR_RNDN);
        mpfr_sub(r40241, r40231, r40240, MPFR_RNDN);
        ;
        mpfr_set_si(r40243, mpfr_cmp(r40228, r40242) <= 0, MPFR_RNDN);
        mpfr_mul(r40244, r40228, r40233, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40247, r40228, r40246, MPFR_RNDN);
        mpfr_mul(r40248, r40247, r40233, MPFR_RNDN);
        mpfr_mul(r40249, r40245, r40248, MPFR_RNDN);
        mpfr_add(r40250, r40244, r40249, MPFR_RNDN);
        mpfr_add(r40251, r40232, r40250, MPFR_RNDN);
        mpfr_log(r40252, r40251, MPFR_RNDN);
        mpfr_div(r40253, r40252, r40239, MPFR_RNDN);
        mpfr_sub(r40254, r40231, r40253, MPFR_RNDN);
        mpfr_log(r40255, r40232, MPFR_RNDN);
        mpfr_div(r40256, r40255, r40239, MPFR_RNDN);
        mpfr_sub(r40257, r40231, r40256, MPFR_RNDN);
        mpfr_div(r40258, r40228, r40239, MPFR_RNDN);
        ;
        mpfr_mul(r40260, r40259, r40228, MPFR_RNDN);
        mpfr_add(r40261, r40232, r40260, MPFR_RNDN);
        mpfr_mul(r40262, r40258, r40261, MPFR_RNDN);
        mpfr_mul(r40263, r40233, r40262, MPFR_RNDN);
        mpfr_sub(r40264, r40257, r40263, MPFR_RNDN);
        if (mpfr_get_si(r40243, MPFR_RNDN)) { mpfr_set(r40265, r40254, MPFR_RNDN); } else { mpfr_set(r40265, r40264, MPFR_RNDN); };
        if (mpfr_get_si(r40230, MPFR_RNDN)) { mpfr_set(r40266, r40241, MPFR_RNDN); } else { mpfr_set(r40266, r40265, MPFR_RNDN); };
        return mpfr_get_d(r40266, MPFR_RNDN);
}

