#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 r39994 = x;
        float r39995 = 1.0;
        float r39996 = y;
        float r39997 = r39995 - r39996;
        float r39998 = z;
        float r39999 = exp(r39998);
        float r40000 = r39996 * r39999;
        float r40001 = r39997 + r40000;
        float r40002 = log(r40001);
        float r40003 = t;
        float r40004 = r40002 / r40003;
        float r40005 = r39994 - r40004;
        return r40005;
}

double f_id(double x, double y, double z, double t) {
        double r40006 = x;
        double r40007 = 1.0;
        double r40008 = y;
        double r40009 = r40007 - r40008;
        double r40010 = z;
        double r40011 = exp(r40010);
        double r40012 = r40008 * r40011;
        double r40013 = r40009 + r40012;
        double r40014 = log(r40013);
        double r40015 = t;
        double r40016 = r40014 / r40015;
        double r40017 = r40006 - r40016;
        return r40017;
}


double f_of(float x, float y, float z, float t) {
        float r40018 = z;
        float r40019 = -14629085.839866638;
        bool r40020 = r40018 <= r40019;
        float r40021 = x;
        float r40022 = 1.0;
        float r40023 = y;
        float r40024 = r40022 - r40023;
        float r40025 = exp(r40018);
        float r40026 = r40023 * r40025;
        float r40027 = r40024 + r40026;
        float r40028 = log(r40027);
        float r40029 = t;
        float r40030 = r40028 / r40029;
        float r40031 = r40021 - r40030;
        float r40032 = -9.645064934801113e-64;
        bool r40033 = r40018 <= r40032;
        float r40034 = r40018 * r40023;
        float r40035 = 1/2;
        float r40036 = 2;
        float r40037 = pow(r40018, r40036);
        float r40038 = r40037 * r40023;
        float r40039 = r40035 * r40038;
        float r40040 = r40034 + r40039;
        float r40041 = r40022 + r40040;
        float r40042 = log(r40041);
        float r40043 = r40042 / r40029;
        float r40044 = r40021 - r40043;
        float r40045 = log(r40022);
        float r40046 = r40045 / r40029;
        float r40047 = r40021 - r40046;
        float r40048 = r40018 / r40029;
        float r40049 = 0.5;
        float r40050 = r40049 * r40018;
        float r40051 = r40022 + r40050;
        float r40052 = r40048 * r40051;
        float r40053 = r40023 * r40052;
        float r40054 = r40047 - r40053;
        float r40055 = r40033 ? r40044 : r40054;
        float r40056 = r40020 ? r40031 : r40055;
        return r40056;
}

double f_od(double x, double y, double z, double t) {
        double r40057 = z;
        double r40058 = -14629085.839866638;
        bool r40059 = r40057 <= r40058;
        double r40060 = x;
        double r40061 = 1.0;
        double r40062 = y;
        double r40063 = r40061 - r40062;
        double r40064 = exp(r40057);
        double r40065 = r40062 * r40064;
        double r40066 = r40063 + r40065;
        double r40067 = log(r40066);
        double r40068 = t;
        double r40069 = r40067 / r40068;
        double r40070 = r40060 - r40069;
        double r40071 = -9.645064934801113e-64;
        bool r40072 = r40057 <= r40071;
        double r40073 = r40057 * r40062;
        double r40074 = 1/2;
        double r40075 = 2;
        double r40076 = pow(r40057, r40075);
        double r40077 = r40076 * r40062;
        double r40078 = r40074 * r40077;
        double r40079 = r40073 + r40078;
        double r40080 = r40061 + r40079;
        double r40081 = log(r40080);
        double r40082 = r40081 / r40068;
        double r40083 = r40060 - r40082;
        double r40084 = log(r40061);
        double r40085 = r40084 / r40068;
        double r40086 = r40060 - r40085;
        double r40087 = r40057 / r40068;
        double r40088 = 0.5;
        double r40089 = r40088 * r40057;
        double r40090 = r40061 + r40089;
        double r40091 = r40087 * r40090;
        double r40092 = r40062 * r40091;
        double r40093 = r40086 - r40092;
        double r40094 = r40072 ? r40083 : r40093;
        double r40095 = r40059 ? r40070 : r40094;
        return r40095;
}

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 r40096, r40097, r40098, r40099, r40100, r40101, r40102, r40103, r40104, r40105, r40106, r40107;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r40096);
        mpfr_init_set_str(r40097, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40098);
        mpfr_init(r40099);
        mpfr_init(r40100);
        mpfr_init(r40101);
        mpfr_init(r40102);
        mpfr_init(r40103);
        mpfr_init(r40104);
        mpfr_init(r40105);
        mpfr_init(r40106);
        mpfr_init(r40107);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r40096, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40098, y, MPFR_RNDN);
        mpfr_sub(r40099, r40097, r40098, MPFR_RNDN);
        mpfr_set_d(r40100, z, MPFR_RNDN);
        mpfr_exp(r40101, r40100, MPFR_RNDN);
        mpfr_mul(r40102, r40098, r40101, MPFR_RNDN);
        mpfr_add(r40103, r40099, r40102, MPFR_RNDN);
        mpfr_log(r40104, r40103, MPFR_RNDN);
        mpfr_set_d(r40105, t, MPFR_RNDN);
        mpfr_div(r40106, r40104, r40105, MPFR_RNDN);
        mpfr_sub(r40107, r40096, r40106, MPFR_RNDN);
        return mpfr_get_d(r40107, MPFR_RNDN);
}

static mpfr_t r40108, r40109, r40110, r40111, r40112, r40113, r40114, r40115, r40116, r40117, r40118, r40119, r40120, r40121, r40122, r40123, r40124, r40125, r40126, r40127, r40128, r40129, r40130, r40131, r40132, r40133, r40134, r40135, r40136, r40137, r40138, r40139, r40140, r40141, r40142, r40143, r40144, r40145, r40146;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r40108);
        mpfr_init_set_str(r40109, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r40110);
        mpfr_init(r40111);
        mpfr_init_set_str(r40112, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40113);
        mpfr_init(r40114);
        mpfr_init(r40115);
        mpfr_init(r40116);
        mpfr_init(r40117);
        mpfr_init(r40118);
        mpfr_init(r40119);
        mpfr_init(r40120);
        mpfr_init(r40121);
        mpfr_init_set_str(r40122, "-9.645064934801113e-64", 10, MPFR_RNDN);
        mpfr_init(r40123);
        mpfr_init(r40124);
        mpfr_init_set_str(r40125, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40126, "2", 10, MPFR_RNDN);
        mpfr_init(r40127);
        mpfr_init(r40128);
        mpfr_init(r40129);
        mpfr_init(r40130);
        mpfr_init(r40131);
        mpfr_init(r40132);
        mpfr_init(r40133);
        mpfr_init(r40134);
        mpfr_init(r40135);
        mpfr_init(r40136);
        mpfr_init(r40137);
        mpfr_init(r40138);
        mpfr_init_set_str(r40139, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40140);
        mpfr_init(r40141);
        mpfr_init(r40142);
        mpfr_init(r40143);
        mpfr_init(r40144);
        mpfr_init(r40145);
        mpfr_init(r40146);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r40108, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40110, mpfr_cmp(r40108, r40109) <= 0, MPFR_RNDN);
        mpfr_set_d(r40111, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40113, y, MPFR_RNDN);
        mpfr_sub(r40114, r40112, r40113, MPFR_RNDN);
        mpfr_exp(r40115, r40108, MPFR_RNDN);
        mpfr_mul(r40116, r40113, r40115, MPFR_RNDN);
        mpfr_add(r40117, r40114, r40116, MPFR_RNDN);
        mpfr_log(r40118, r40117, MPFR_RNDN);
        mpfr_set_d(r40119, t, MPFR_RNDN);
        mpfr_div(r40120, r40118, r40119, MPFR_RNDN);
        mpfr_sub(r40121, r40111, r40120, MPFR_RNDN);
        ;
        mpfr_set_si(r40123, mpfr_cmp(r40108, r40122) <= 0, MPFR_RNDN);
        mpfr_mul(r40124, r40108, r40113, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40127, r40108, r40126, MPFR_RNDN);
        mpfr_mul(r40128, r40127, r40113, MPFR_RNDN);
        mpfr_mul(r40129, r40125, r40128, MPFR_RNDN);
        mpfr_add(r40130, r40124, r40129, MPFR_RNDN);
        mpfr_add(r40131, r40112, r40130, MPFR_RNDN);
        mpfr_log(r40132, r40131, MPFR_RNDN);
        mpfr_div(r40133, r40132, r40119, MPFR_RNDN);
        mpfr_sub(r40134, r40111, r40133, MPFR_RNDN);
        mpfr_log(r40135, r40112, MPFR_RNDN);
        mpfr_div(r40136, r40135, r40119, MPFR_RNDN);
        mpfr_sub(r40137, r40111, r40136, MPFR_RNDN);
        mpfr_div(r40138, r40108, r40119, MPFR_RNDN);
        ;
        mpfr_mul(r40140, r40139, r40108, MPFR_RNDN);
        mpfr_add(r40141, r40112, r40140, MPFR_RNDN);
        mpfr_mul(r40142, r40138, r40141, MPFR_RNDN);
        mpfr_mul(r40143, r40113, r40142, MPFR_RNDN);
        mpfr_sub(r40144, r40137, r40143, MPFR_RNDN);
        if (mpfr_get_si(r40123, MPFR_RNDN)) { mpfr_set(r40145, r40134, MPFR_RNDN); } else { mpfr_set(r40145, r40144, MPFR_RNDN); };
        if (mpfr_get_si(r40110, MPFR_RNDN)) { mpfr_set(r40146, r40121, MPFR_RNDN); } else { mpfr_set(r40146, r40145, MPFR_RNDN); };
        return mpfr_get_d(r40146, MPFR_RNDN);
}

static mpfr_t r40147, r40148, r40149, r40150, r40151, r40152, r40153, r40154, r40155, r40156, r40157, r40158, r40159, r40160, r40161, r40162, r40163, r40164, r40165, r40166, r40167, r40168, r40169, r40170, r40171, r40172, r40173, r40174, r40175, r40176, r40177, r40178, r40179, r40180, r40181, r40182, r40183, r40184, r40185;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r40147);
        mpfr_init_set_str(r40148, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r40149);
        mpfr_init(r40150);
        mpfr_init_set_str(r40151, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40152);
        mpfr_init(r40153);
        mpfr_init(r40154);
        mpfr_init(r40155);
        mpfr_init(r40156);
        mpfr_init(r40157);
        mpfr_init(r40158);
        mpfr_init(r40159);
        mpfr_init(r40160);
        mpfr_init_set_str(r40161, "-9.645064934801113e-64", 10, MPFR_RNDN);
        mpfr_init(r40162);
        mpfr_init(r40163);
        mpfr_init_set_str(r40164, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40165, "2", 10, MPFR_RNDN);
        mpfr_init(r40166);
        mpfr_init(r40167);
        mpfr_init(r40168);
        mpfr_init(r40169);
        mpfr_init(r40170);
        mpfr_init(r40171);
        mpfr_init(r40172);
        mpfr_init(r40173);
        mpfr_init(r40174);
        mpfr_init(r40175);
        mpfr_init(r40176);
        mpfr_init(r40177);
        mpfr_init_set_str(r40178, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40179);
        mpfr_init(r40180);
        mpfr_init(r40181);
        mpfr_init(r40182);
        mpfr_init(r40183);
        mpfr_init(r40184);
        mpfr_init(r40185);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r40147, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40149, mpfr_cmp(r40147, r40148) <= 0, MPFR_RNDN);
        mpfr_set_d(r40150, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40152, y, MPFR_RNDN);
        mpfr_sub(r40153, r40151, r40152, MPFR_RNDN);
        mpfr_exp(r40154, r40147, MPFR_RNDN);
        mpfr_mul(r40155, r40152, r40154, MPFR_RNDN);
        mpfr_add(r40156, r40153, r40155, MPFR_RNDN);
        mpfr_log(r40157, r40156, MPFR_RNDN);
        mpfr_set_d(r40158, t, MPFR_RNDN);
        mpfr_div(r40159, r40157, r40158, MPFR_RNDN);
        mpfr_sub(r40160, r40150, r40159, MPFR_RNDN);
        ;
        mpfr_set_si(r40162, mpfr_cmp(r40147, r40161) <= 0, MPFR_RNDN);
        mpfr_mul(r40163, r40147, r40152, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40166, r40147, r40165, MPFR_RNDN);
        mpfr_mul(r40167, r40166, r40152, MPFR_RNDN);
        mpfr_mul(r40168, r40164, r40167, MPFR_RNDN);
        mpfr_add(r40169, r40163, r40168, MPFR_RNDN);
        mpfr_add(r40170, r40151, r40169, MPFR_RNDN);
        mpfr_log(r40171, r40170, MPFR_RNDN);
        mpfr_div(r40172, r40171, r40158, MPFR_RNDN);
        mpfr_sub(r40173, r40150, r40172, MPFR_RNDN);
        mpfr_log(r40174, r40151, MPFR_RNDN);
        mpfr_div(r40175, r40174, r40158, MPFR_RNDN);
        mpfr_sub(r40176, r40150, r40175, MPFR_RNDN);
        mpfr_div(r40177, r40147, r40158, MPFR_RNDN);
        ;
        mpfr_mul(r40179, r40178, r40147, MPFR_RNDN);
        mpfr_add(r40180, r40151, r40179, MPFR_RNDN);
        mpfr_mul(r40181, r40177, r40180, MPFR_RNDN);
        mpfr_mul(r40182, r40152, r40181, MPFR_RNDN);
        mpfr_sub(r40183, r40176, r40182, MPFR_RNDN);
        if (mpfr_get_si(r40162, MPFR_RNDN)) { mpfr_set(r40184, r40173, MPFR_RNDN); } else { mpfr_set(r40184, r40183, MPFR_RNDN); };
        if (mpfr_get_si(r40149, MPFR_RNDN)) { mpfr_set(r40185, r40160, MPFR_RNDN); } else { mpfr_set(r40185, r40184, MPFR_RNDN); };
        return mpfr_get_d(r40185, MPFR_RNDN);
}

