#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 r39891 = x;
        float r39892 = 1.0;
        float r39893 = y;
        float r39894 = r39892 - r39893;
        float r39895 = z;
        float r39896 = exp(r39895);
        float r39897 = r39893 * r39896;
        float r39898 = r39894 + r39897;
        float r39899 = log(r39898);
        float r39900 = t;
        float r39901 = r39899 / r39900;
        float r39902 = r39891 - r39901;
        return r39902;
}

double f_id(double x, double y, double z, double t) {
        double r39903 = x;
        double r39904 = 1.0;
        double r39905 = y;
        double r39906 = r39904 - r39905;
        double r39907 = z;
        double r39908 = exp(r39907);
        double r39909 = r39905 * r39908;
        double r39910 = r39906 + r39909;
        double r39911 = log(r39910);
        double r39912 = t;
        double r39913 = r39911 / r39912;
        double r39914 = r39903 - r39913;
        return r39914;
}


double f_of(float x, float y, float z, float t) {
        float r39915 = z;
        float r39916 = -14629085.839866638;
        bool r39917 = r39915 <= r39916;
        float r39918 = x;
        float r39919 = 1.0;
        float r39920 = y;
        float r39921 = r39919 - r39920;
        float r39922 = exp(r39915);
        float r39923 = r39920 * r39922;
        float r39924 = r39921 + r39923;
        float r39925 = log(r39924);
        float r39926 = t;
        float r39927 = r39925 / r39926;
        float r39928 = r39918 - r39927;
        float r39929 = -1.6432316907476113e-63;
        bool r39930 = r39915 <= r39929;
        float r39931 = r39915 * r39920;
        float r39932 = 1/2;
        float r39933 = 2;
        float r39934 = pow(r39915, r39933);
        float r39935 = r39934 * r39920;
        float r39936 = r39932 * r39935;
        float r39937 = r39931 + r39936;
        float r39938 = r39919 + r39937;
        float r39939 = log(r39938);
        float r39940 = r39939 / r39926;
        float r39941 = r39918 - r39940;
        float r39942 = log(r39919);
        float r39943 = r39942 / r39926;
        float r39944 = r39918 - r39943;
        float r39945 = r39915 / r39926;
        float r39946 = 0.5;
        float r39947 = r39946 * r39915;
        float r39948 = r39919 + r39947;
        float r39949 = r39945 * r39948;
        float r39950 = r39920 * r39949;
        float r39951 = r39944 - r39950;
        float r39952 = r39930 ? r39941 : r39951;
        float r39953 = r39917 ? r39928 : r39952;
        return r39953;
}

double f_od(double x, double y, double z, double t) {
        double r39954 = z;
        double r39955 = -14629085.839866638;
        bool r39956 = r39954 <= r39955;
        double r39957 = x;
        double r39958 = 1.0;
        double r39959 = y;
        double r39960 = r39958 - r39959;
        double r39961 = exp(r39954);
        double r39962 = r39959 * r39961;
        double r39963 = r39960 + r39962;
        double r39964 = log(r39963);
        double r39965 = t;
        double r39966 = r39964 / r39965;
        double r39967 = r39957 - r39966;
        double r39968 = -1.6432316907476113e-63;
        bool r39969 = r39954 <= r39968;
        double r39970 = r39954 * r39959;
        double r39971 = 1/2;
        double r39972 = 2;
        double r39973 = pow(r39954, r39972);
        double r39974 = r39973 * r39959;
        double r39975 = r39971 * r39974;
        double r39976 = r39970 + r39975;
        double r39977 = r39958 + r39976;
        double r39978 = log(r39977);
        double r39979 = r39978 / r39965;
        double r39980 = r39957 - r39979;
        double r39981 = log(r39958);
        double r39982 = r39981 / r39965;
        double r39983 = r39957 - r39982;
        double r39984 = r39954 / r39965;
        double r39985 = 0.5;
        double r39986 = r39985 * r39954;
        double r39987 = r39958 + r39986;
        double r39988 = r39984 * r39987;
        double r39989 = r39959 * r39988;
        double r39990 = r39983 - r39989;
        double r39991 = r39969 ? r39980 : r39990;
        double r39992 = r39956 ? r39967 : r39991;
        return r39992;
}

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 r39993, r39994, r39995, r39996, r39997, r39998, r39999, r40000, r40001, r40002, r40003, r40004;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r39993);
        mpfr_init_set_str(r39994, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39995);
        mpfr_init(r39996);
        mpfr_init(r39997);
        mpfr_init(r39998);
        mpfr_init(r39999);
        mpfr_init(r40000);
        mpfr_init(r40001);
        mpfr_init(r40002);
        mpfr_init(r40003);
        mpfr_init(r40004);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r39993, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39995, y, MPFR_RNDN);
        mpfr_sub(r39996, r39994, r39995, MPFR_RNDN);
        mpfr_set_d(r39997, z, MPFR_RNDN);
        mpfr_exp(r39998, r39997, MPFR_RNDN);
        mpfr_mul(r39999, r39995, r39998, MPFR_RNDN);
        mpfr_add(r40000, r39996, r39999, MPFR_RNDN);
        mpfr_log(r40001, r40000, MPFR_RNDN);
        mpfr_set_d(r40002, t, MPFR_RNDN);
        mpfr_div(r40003, r40001, r40002, MPFR_RNDN);
        mpfr_sub(r40004, r39993, r40003, MPFR_RNDN);
        return mpfr_get_d(r40004, MPFR_RNDN);
}

static mpfr_t r40005, r40006, r40007, r40008, r40009, r40010, r40011, r40012, r40013, r40014, r40015, r40016, r40017, r40018, r40019, r40020, r40021, r40022, r40023, r40024, r40025, r40026, r40027, r40028, r40029, r40030, r40031, r40032, r40033, r40034, r40035, r40036, r40037, r40038, r40039, r40040, r40041, r40042, r40043;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r40005);
        mpfr_init_set_str(r40006, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r40007);
        mpfr_init(r40008);
        mpfr_init_set_str(r40009, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40010);
        mpfr_init(r40011);
        mpfr_init(r40012);
        mpfr_init(r40013);
        mpfr_init(r40014);
        mpfr_init(r40015);
        mpfr_init(r40016);
        mpfr_init(r40017);
        mpfr_init(r40018);
        mpfr_init_set_str(r40019, "-1.6432316907476113e-63", 10, MPFR_RNDN);
        mpfr_init(r40020);
        mpfr_init(r40021);
        mpfr_init_set_str(r40022, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40023, "2", 10, MPFR_RNDN);
        mpfr_init(r40024);
        mpfr_init(r40025);
        mpfr_init(r40026);
        mpfr_init(r40027);
        mpfr_init(r40028);
        mpfr_init(r40029);
        mpfr_init(r40030);
        mpfr_init(r40031);
        mpfr_init(r40032);
        mpfr_init(r40033);
        mpfr_init(r40034);
        mpfr_init(r40035);
        mpfr_init_set_str(r40036, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40037);
        mpfr_init(r40038);
        mpfr_init(r40039);
        mpfr_init(r40040);
        mpfr_init(r40041);
        mpfr_init(r40042);
        mpfr_init(r40043);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r40005, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40007, mpfr_cmp(r40005, r40006) <= 0, MPFR_RNDN);
        mpfr_set_d(r40008, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40010, y, MPFR_RNDN);
        mpfr_sub(r40011, r40009, r40010, MPFR_RNDN);
        mpfr_exp(r40012, r40005, MPFR_RNDN);
        mpfr_mul(r40013, r40010, r40012, MPFR_RNDN);
        mpfr_add(r40014, r40011, r40013, MPFR_RNDN);
        mpfr_log(r40015, r40014, MPFR_RNDN);
        mpfr_set_d(r40016, t, MPFR_RNDN);
        mpfr_div(r40017, r40015, r40016, MPFR_RNDN);
        mpfr_sub(r40018, r40008, r40017, MPFR_RNDN);
        ;
        mpfr_set_si(r40020, mpfr_cmp(r40005, r40019) <= 0, MPFR_RNDN);
        mpfr_mul(r40021, r40005, r40010, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40024, r40005, r40023, MPFR_RNDN);
        mpfr_mul(r40025, r40024, r40010, MPFR_RNDN);
        mpfr_mul(r40026, r40022, r40025, MPFR_RNDN);
        mpfr_add(r40027, r40021, r40026, MPFR_RNDN);
        mpfr_add(r40028, r40009, r40027, MPFR_RNDN);
        mpfr_log(r40029, r40028, MPFR_RNDN);
        mpfr_div(r40030, r40029, r40016, MPFR_RNDN);
        mpfr_sub(r40031, r40008, r40030, MPFR_RNDN);
        mpfr_log(r40032, r40009, MPFR_RNDN);
        mpfr_div(r40033, r40032, r40016, MPFR_RNDN);
        mpfr_sub(r40034, r40008, r40033, MPFR_RNDN);
        mpfr_div(r40035, r40005, r40016, MPFR_RNDN);
        ;
        mpfr_mul(r40037, r40036, r40005, MPFR_RNDN);
        mpfr_add(r40038, r40009, r40037, MPFR_RNDN);
        mpfr_mul(r40039, r40035, r40038, MPFR_RNDN);
        mpfr_mul(r40040, r40010, r40039, MPFR_RNDN);
        mpfr_sub(r40041, r40034, r40040, MPFR_RNDN);
        if (mpfr_get_si(r40020, MPFR_RNDN)) { mpfr_set(r40042, r40031, MPFR_RNDN); } else { mpfr_set(r40042, r40041, MPFR_RNDN); };
        if (mpfr_get_si(r40007, MPFR_RNDN)) { mpfr_set(r40043, r40018, MPFR_RNDN); } else { mpfr_set(r40043, r40042, MPFR_RNDN); };
        return mpfr_get_d(r40043, MPFR_RNDN);
}

static mpfr_t r40044, r40045, r40046, r40047, r40048, r40049, r40050, r40051, r40052, r40053, r40054, r40055, r40056, r40057, r40058, r40059, r40060, r40061, r40062, r40063, r40064, r40065, r40066, r40067, r40068, r40069, r40070, r40071, r40072, r40073, r40074, r40075, r40076, r40077, r40078, r40079, r40080, r40081, r40082;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r40044);
        mpfr_init_set_str(r40045, "-14629085.839866638", 10, MPFR_RNDN);
        mpfr_init(r40046);
        mpfr_init(r40047);
        mpfr_init_set_str(r40048, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40049);
        mpfr_init(r40050);
        mpfr_init(r40051);
        mpfr_init(r40052);
        mpfr_init(r40053);
        mpfr_init(r40054);
        mpfr_init(r40055);
        mpfr_init(r40056);
        mpfr_init(r40057);
        mpfr_init_set_str(r40058, "-1.6432316907476113e-63", 10, MPFR_RNDN);
        mpfr_init(r40059);
        mpfr_init(r40060);
        mpfr_init_set_str(r40061, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r40062, "2", 10, MPFR_RNDN);
        mpfr_init(r40063);
        mpfr_init(r40064);
        mpfr_init(r40065);
        mpfr_init(r40066);
        mpfr_init(r40067);
        mpfr_init(r40068);
        mpfr_init(r40069);
        mpfr_init(r40070);
        mpfr_init(r40071);
        mpfr_init(r40072);
        mpfr_init(r40073);
        mpfr_init(r40074);
        mpfr_init_set_str(r40075, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40076);
        mpfr_init(r40077);
        mpfr_init(r40078);
        mpfr_init(r40079);
        mpfr_init(r40080);
        mpfr_init(r40081);
        mpfr_init(r40082);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r40044, z, MPFR_RNDN);
        ;
        mpfr_set_si(r40046, mpfr_cmp(r40044, r40045) <= 0, MPFR_RNDN);
        mpfr_set_d(r40047, x, MPFR_RNDN);
        ;
        mpfr_set_d(r40049, y, MPFR_RNDN);
        mpfr_sub(r40050, r40048, r40049, MPFR_RNDN);
        mpfr_exp(r40051, r40044, MPFR_RNDN);
        mpfr_mul(r40052, r40049, r40051, MPFR_RNDN);
        mpfr_add(r40053, r40050, r40052, MPFR_RNDN);
        mpfr_log(r40054, r40053, MPFR_RNDN);
        mpfr_set_d(r40055, t, MPFR_RNDN);
        mpfr_div(r40056, r40054, r40055, MPFR_RNDN);
        mpfr_sub(r40057, r40047, r40056, MPFR_RNDN);
        ;
        mpfr_set_si(r40059, mpfr_cmp(r40044, r40058) <= 0, MPFR_RNDN);
        mpfr_mul(r40060, r40044, r40049, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r40063, r40044, r40062, MPFR_RNDN);
        mpfr_mul(r40064, r40063, r40049, MPFR_RNDN);
        mpfr_mul(r40065, r40061, r40064, MPFR_RNDN);
        mpfr_add(r40066, r40060, r40065, MPFR_RNDN);
        mpfr_add(r40067, r40048, r40066, MPFR_RNDN);
        mpfr_log(r40068, r40067, MPFR_RNDN);
        mpfr_div(r40069, r40068, r40055, MPFR_RNDN);
        mpfr_sub(r40070, r40047, r40069, MPFR_RNDN);
        mpfr_log(r40071, r40048, MPFR_RNDN);
        mpfr_div(r40072, r40071, r40055, MPFR_RNDN);
        mpfr_sub(r40073, r40047, r40072, MPFR_RNDN);
        mpfr_div(r40074, r40044, r40055, MPFR_RNDN);
        ;
        mpfr_mul(r40076, r40075, r40044, MPFR_RNDN);
        mpfr_add(r40077, r40048, r40076, MPFR_RNDN);
        mpfr_mul(r40078, r40074, r40077, MPFR_RNDN);
        mpfr_mul(r40079, r40049, r40078, MPFR_RNDN);
        mpfr_sub(r40080, r40073, r40079, MPFR_RNDN);
        if (mpfr_get_si(r40059, MPFR_RNDN)) { mpfr_set(r40081, r40070, MPFR_RNDN); } else { mpfr_set(r40081, r40080, MPFR_RNDN); };
        if (mpfr_get_si(r40046, MPFR_RNDN)) { mpfr_set(r40082, r40057, MPFR_RNDN); } else { mpfr_set(r40082, r40081, MPFR_RNDN); };
        return mpfr_get_d(r40082, MPFR_RNDN);
}

