#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 r39823 = x;
        float r39824 = 1.0;
        float r39825 = y;
        float r39826 = r39824 - r39825;
        float r39827 = z;
        float r39828 = exp(r39827);
        float r39829 = r39825 * r39828;
        float r39830 = r39826 + r39829;
        float r39831 = log(r39830);
        float r39832 = t;
        float r39833 = r39831 / r39832;
        float r39834 = r39823 - r39833;
        return r39834;
}

double f_id(double x, double y, double z, double t) {
        double r39835 = x;
        double r39836 = 1.0;
        double r39837 = y;
        double r39838 = r39836 - r39837;
        double r39839 = z;
        double r39840 = exp(r39839);
        double r39841 = r39837 * r39840;
        double r39842 = r39838 + r39841;
        double r39843 = log(r39842);
        double r39844 = t;
        double r39845 = r39843 / r39844;
        double r39846 = r39835 - r39845;
        return r39846;
}


double f_of(float x, float y, float z, float t) {
        float r39847 = z;
        float r39848 = -14290970.129913107;
        bool r39849 = r39847 <= r39848;
        float r39850 = x;
        float r39851 = 1.0;
        float r39852 = y;
        float r39853 = r39851 - r39852;
        float r39854 = exp(r39847);
        float r39855 = r39852 * r39854;
        float r39856 = r39853 + r39855;
        float r39857 = log(r39856);
        float r39858 = t;
        float r39859 = r39857 / r39858;
        float r39860 = r39850 - r39859;
        float r39861 = -2.265784190424986e-69;
        bool r39862 = r39847 <= r39861;
        float r39863 = r39847 * r39852;
        float r39864 = 1/2;
        float r39865 = 2;
        float r39866 = pow(r39847, r39865);
        float r39867 = r39866 * r39852;
        float r39868 = r39864 * r39867;
        float r39869 = r39863 + r39868;
        float r39870 = r39851 + r39869;
        float r39871 = log(r39870);
        float r39872 = r39871 / r39858;
        float r39873 = r39850 - r39872;
        float r39874 = r39847 / r39858;
        float r39875 = 0.5;
        float r39876 = r39875 * r39847;
        float r39877 = r39876 + r39851;
        float r39878 = r39874 * r39877;
        float r39879 = r39852 * r39878;
        float r39880 = r39850 - r39879;
        float r39881 = r39862 ? r39873 : r39880;
        float r39882 = r39849 ? r39860 : r39881;
        return r39882;
}

double f_od(double x, double y, double z, double t) {
        double r39883 = z;
        double r39884 = -14290970.129913107;
        bool r39885 = r39883 <= r39884;
        double r39886 = x;
        double r39887 = 1.0;
        double r39888 = y;
        double r39889 = r39887 - r39888;
        double r39890 = exp(r39883);
        double r39891 = r39888 * r39890;
        double r39892 = r39889 + r39891;
        double r39893 = log(r39892);
        double r39894 = t;
        double r39895 = r39893 / r39894;
        double r39896 = r39886 - r39895;
        double r39897 = -2.265784190424986e-69;
        bool r39898 = r39883 <= r39897;
        double r39899 = r39883 * r39888;
        double r39900 = 1/2;
        double r39901 = 2;
        double r39902 = pow(r39883, r39901);
        double r39903 = r39902 * r39888;
        double r39904 = r39900 * r39903;
        double r39905 = r39899 + r39904;
        double r39906 = r39887 + r39905;
        double r39907 = log(r39906);
        double r39908 = r39907 / r39894;
        double r39909 = r39886 - r39908;
        double r39910 = r39883 / r39894;
        double r39911 = 0.5;
        double r39912 = r39911 * r39883;
        double r39913 = r39912 + r39887;
        double r39914 = r39910 * r39913;
        double r39915 = r39888 * r39914;
        double r39916 = r39886 - r39915;
        double r39917 = r39898 ? r39909 : r39916;
        double r39918 = r39885 ? r39896 : r39917;
        return r39918;
}

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 r39919, r39920, r39921, r39922, r39923, r39924, r39925, r39926, r39927, r39928, r39929, r39930;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1680);
        mpfr_init(r39919);
        mpfr_init_set_str(r39920, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39921);
        mpfr_init(r39922);
        mpfr_init(r39923);
        mpfr_init(r39924);
        mpfr_init(r39925);
        mpfr_init(r39926);
        mpfr_init(r39927);
        mpfr_init(r39928);
        mpfr_init(r39929);
        mpfr_init(r39930);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r39919, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39921, y, MPFR_RNDN);
        mpfr_sub(r39922, r39920, r39921, MPFR_RNDN);
        mpfr_set_d(r39923, z, MPFR_RNDN);
        mpfr_exp(r39924, r39923, MPFR_RNDN);
        mpfr_mul(r39925, r39921, r39924, MPFR_RNDN);
        mpfr_add(r39926, r39922, r39925, MPFR_RNDN);
        mpfr_log(r39927, r39926, MPFR_RNDN);
        mpfr_set_d(r39928, t, MPFR_RNDN);
        mpfr_div(r39929, r39927, r39928, MPFR_RNDN);
        mpfr_sub(r39930, r39919, r39929, MPFR_RNDN);
        return mpfr_get_d(r39930, MPFR_RNDN);
}

static mpfr_t r39931, r39932, r39933, r39934, r39935, r39936, r39937, r39938, r39939, r39940, r39941, r39942, r39943, r39944, r39945, r39946, r39947, r39948, r39949, r39950, r39951, r39952, r39953, r39954, r39955, r39956, r39957, r39958, r39959, r39960, r39961, r39962, r39963, r39964, r39965, r39966;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r39931);
        mpfr_init_set_str(r39932, "-14290970.129913107", 10, MPFR_RNDN);
        mpfr_init(r39933);
        mpfr_init(r39934);
        mpfr_init_set_str(r39935, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39936);
        mpfr_init(r39937);
        mpfr_init(r39938);
        mpfr_init(r39939);
        mpfr_init(r39940);
        mpfr_init(r39941);
        mpfr_init(r39942);
        mpfr_init(r39943);
        mpfr_init(r39944);
        mpfr_init_set_str(r39945, "-2.265784190424986e-69", 10, MPFR_RNDN);
        mpfr_init(r39946);
        mpfr_init(r39947);
        mpfr_init_set_str(r39948, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39949, "2", 10, MPFR_RNDN);
        mpfr_init(r39950);
        mpfr_init(r39951);
        mpfr_init(r39952);
        mpfr_init(r39953);
        mpfr_init(r39954);
        mpfr_init(r39955);
        mpfr_init(r39956);
        mpfr_init(r39957);
        mpfr_init(r39958);
        mpfr_init_set_str(r39959, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39960);
        mpfr_init(r39961);
        mpfr_init(r39962);
        mpfr_init(r39963);
        mpfr_init(r39964);
        mpfr_init(r39965);
        mpfr_init(r39966);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r39931, z, MPFR_RNDN);
        ;
        mpfr_set_si(r39933, mpfr_cmp(r39931, r39932) <= 0, MPFR_RNDN);
        mpfr_set_d(r39934, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39936, y, MPFR_RNDN);
        mpfr_sub(r39937, r39935, r39936, MPFR_RNDN);
        mpfr_exp(r39938, r39931, MPFR_RNDN);
        mpfr_mul(r39939, r39936, r39938, MPFR_RNDN);
        mpfr_add(r39940, r39937, r39939, MPFR_RNDN);
        mpfr_log(r39941, r39940, MPFR_RNDN);
        mpfr_set_d(r39942, t, MPFR_RNDN);
        mpfr_div(r39943, r39941, r39942, MPFR_RNDN);
        mpfr_sub(r39944, r39934, r39943, MPFR_RNDN);
        ;
        mpfr_set_si(r39946, mpfr_cmp(r39931, r39945) <= 0, MPFR_RNDN);
        mpfr_mul(r39947, r39931, r39936, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39950, r39931, r39949, MPFR_RNDN);
        mpfr_mul(r39951, r39950, r39936, MPFR_RNDN);
        mpfr_mul(r39952, r39948, r39951, MPFR_RNDN);
        mpfr_add(r39953, r39947, r39952, MPFR_RNDN);
        mpfr_add(r39954, r39935, r39953, MPFR_RNDN);
        mpfr_log(r39955, r39954, MPFR_RNDN);
        mpfr_div(r39956, r39955, r39942, MPFR_RNDN);
        mpfr_sub(r39957, r39934, r39956, MPFR_RNDN);
        mpfr_div(r39958, r39931, r39942, MPFR_RNDN);
        ;
        mpfr_mul(r39960, r39959, r39931, MPFR_RNDN);
        mpfr_add(r39961, r39960, r39935, MPFR_RNDN);
        mpfr_mul(r39962, r39958, r39961, MPFR_RNDN);
        mpfr_mul(r39963, r39936, r39962, MPFR_RNDN);
        mpfr_sub(r39964, r39934, r39963, MPFR_RNDN);
        if (mpfr_get_si(r39946, MPFR_RNDN)) { mpfr_set(r39965, r39957, MPFR_RNDN); } else { mpfr_set(r39965, r39964, MPFR_RNDN); };
        if (mpfr_get_si(r39933, MPFR_RNDN)) { mpfr_set(r39966, r39944, MPFR_RNDN); } else { mpfr_set(r39966, r39965, MPFR_RNDN); };
        return mpfr_get_d(r39966, MPFR_RNDN);
}

static mpfr_t r39967, r39968, r39969, r39970, r39971, r39972, r39973, r39974, r39975, r39976, r39977, r39978, r39979, r39980, r39981, r39982, r39983, r39984, r39985, r39986, r39987, r39988, r39989, r39990, r39991, r39992, r39993, r39994, r39995, r39996, r39997, r39998, r39999, r40000, r40001, r40002;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r39967);
        mpfr_init_set_str(r39968, "-14290970.129913107", 10, MPFR_RNDN);
        mpfr_init(r39969);
        mpfr_init(r39970);
        mpfr_init_set_str(r39971, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39972);
        mpfr_init(r39973);
        mpfr_init(r39974);
        mpfr_init(r39975);
        mpfr_init(r39976);
        mpfr_init(r39977);
        mpfr_init(r39978);
        mpfr_init(r39979);
        mpfr_init(r39980);
        mpfr_init_set_str(r39981, "-2.265784190424986e-69", 10, MPFR_RNDN);
        mpfr_init(r39982);
        mpfr_init(r39983);
        mpfr_init_set_str(r39984, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39985, "2", 10, MPFR_RNDN);
        mpfr_init(r39986);
        mpfr_init(r39987);
        mpfr_init(r39988);
        mpfr_init(r39989);
        mpfr_init(r39990);
        mpfr_init(r39991);
        mpfr_init(r39992);
        mpfr_init(r39993);
        mpfr_init(r39994);
        mpfr_init_set_str(r39995, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39996);
        mpfr_init(r39997);
        mpfr_init(r39998);
        mpfr_init(r39999);
        mpfr_init(r40000);
        mpfr_init(r40001);
        mpfr_init(r40002);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r39967, z, MPFR_RNDN);
        ;
        mpfr_set_si(r39969, mpfr_cmp(r39967, r39968) <= 0, MPFR_RNDN);
        mpfr_set_d(r39970, x, MPFR_RNDN);
        ;
        mpfr_set_d(r39972, y, MPFR_RNDN);
        mpfr_sub(r39973, r39971, r39972, MPFR_RNDN);
        mpfr_exp(r39974, r39967, MPFR_RNDN);
        mpfr_mul(r39975, r39972, r39974, MPFR_RNDN);
        mpfr_add(r39976, r39973, r39975, MPFR_RNDN);
        mpfr_log(r39977, r39976, MPFR_RNDN);
        mpfr_set_d(r39978, t, MPFR_RNDN);
        mpfr_div(r39979, r39977, r39978, MPFR_RNDN);
        mpfr_sub(r39980, r39970, r39979, MPFR_RNDN);
        ;
        mpfr_set_si(r39982, mpfr_cmp(r39967, r39981) <= 0, MPFR_RNDN);
        mpfr_mul(r39983, r39967, r39972, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39986, r39967, r39985, MPFR_RNDN);
        mpfr_mul(r39987, r39986, r39972, MPFR_RNDN);
        mpfr_mul(r39988, r39984, r39987, MPFR_RNDN);
        mpfr_add(r39989, r39983, r39988, MPFR_RNDN);
        mpfr_add(r39990, r39971, r39989, MPFR_RNDN);
        mpfr_log(r39991, r39990, MPFR_RNDN);
        mpfr_div(r39992, r39991, r39978, MPFR_RNDN);
        mpfr_sub(r39993, r39970, r39992, MPFR_RNDN);
        mpfr_div(r39994, r39967, r39978, MPFR_RNDN);
        ;
        mpfr_mul(r39996, r39995, r39967, MPFR_RNDN);
        mpfr_add(r39997, r39996, r39971, MPFR_RNDN);
        mpfr_mul(r39998, r39994, r39997, MPFR_RNDN);
        mpfr_mul(r39999, r39972, r39998, MPFR_RNDN);
        mpfr_sub(r40000, r39970, r39999, MPFR_RNDN);
        if (mpfr_get_si(r39982, MPFR_RNDN)) { mpfr_set(r40001, r39993, MPFR_RNDN); } else { mpfr_set(r40001, r40000, MPFR_RNDN); };
        if (mpfr_get_si(r39969, MPFR_RNDN)) { mpfr_set(r40002, r39980, MPFR_RNDN); } else { mpfr_set(r40002, r40001, MPFR_RNDN); };
        return mpfr_get_d(r40002, MPFR_RNDN);
}

