#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "System.Random.MWC.Distributions:gamma from mwc-random-0.13.3.2";

double f_if(float x, float y, float z) {
        float r39849 = x;
        float r39850 = 0.5;
        float r39851 = r39849 * r39850;
        float r39852 = y;
        float r39853 = 1.0;
        float r39854 = z;
        float r39855 = r39853 - r39854;
        float r39856 = log(r39854);
        float r39857 = r39855 + r39856;
        float r39858 = r39852 * r39857;
        float r39859 = r39851 + r39858;
        return r39859;
}

double f_id(double x, double y, double z) {
        double r39860 = x;
        double r39861 = 0.5;
        double r39862 = r39860 * r39861;
        double r39863 = y;
        double r39864 = 1.0;
        double r39865 = z;
        double r39866 = r39864 - r39865;
        double r39867 = log(r39865);
        double r39868 = r39866 + r39867;
        double r39869 = r39863 * r39868;
        double r39870 = r39862 + r39869;
        return r39870;
}


double f_of(float x, float y, float z) {
        float r39871 = x;
        float r39872 = 0.5;
        float r39873 = r39871 * r39872;
        float r39874 = y;
        float r39875 = 1.0;
        float r39876 = z;
        float r39877 = r39875 - r39876;
        float r39878 = log(r39876);
        float r39879 = r39877 + r39878;
        float r39880 = r39874 * r39879;
        float r39881 = r39873 + r39880;
        return r39881;
}

double f_od(double x, double y, double z) {
        double r39882 = x;
        double r39883 = 0.5;
        double r39884 = r39882 * r39883;
        double r39885 = y;
        double r39886 = 1.0;
        double r39887 = z;
        double r39888 = r39886 - r39887;
        double r39889 = log(r39887);
        double r39890 = r39888 + r39889;
        double r39891 = r39885 * r39890;
        double r39892 = r39884 + r39891;
        return r39892;
}

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 r39893, r39894, r39895, r39896, r39897, r39898, r39899, r39900, r39901, r39902, r39903;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r39893);
        mpfr_init_set_str(r39894, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39895);
        mpfr_init(r39896);
        mpfr_init_set_str(r39897, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39898);
        mpfr_init(r39899);
        mpfr_init(r39900);
        mpfr_init(r39901);
        mpfr_init(r39902);
        mpfr_init(r39903);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r39893, x, MPFR_RNDN);
        ;
        mpfr_mul(r39895, r39893, r39894, MPFR_RNDN);
        mpfr_set_d(r39896, y, MPFR_RNDN);
        ;
        mpfr_set_d(r39898, z, MPFR_RNDN);
        mpfr_sub(r39899, r39897, r39898, MPFR_RNDN);
        mpfr_log(r39900, r39898, MPFR_RNDN);
        mpfr_add(r39901, r39899, r39900, MPFR_RNDN);
        mpfr_mul(r39902, r39896, r39901, MPFR_RNDN);
        mpfr_add(r39903, r39895, r39902, MPFR_RNDN);
        return mpfr_get_d(r39903, MPFR_RNDN);
}

static mpfr_t r39904, r39905, r39906, r39907, r39908, r39909, r39910, r39911, r39912, r39913, r39914;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r39904);
        mpfr_init_set_str(r39905, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39906);
        mpfr_init(r39907);
        mpfr_init_set_str(r39908, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39909);
        mpfr_init(r39910);
        mpfr_init(r39911);
        mpfr_init(r39912);
        mpfr_init(r39913);
        mpfr_init(r39914);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r39904, x, MPFR_RNDN);
        ;
        mpfr_mul(r39906, r39904, r39905, MPFR_RNDN);
        mpfr_set_d(r39907, y, MPFR_RNDN);
        ;
        mpfr_set_d(r39909, z, MPFR_RNDN);
        mpfr_sub(r39910, r39908, r39909, MPFR_RNDN);
        mpfr_log(r39911, r39909, MPFR_RNDN);
        mpfr_add(r39912, r39910, r39911, MPFR_RNDN);
        mpfr_mul(r39913, r39907, r39912, MPFR_RNDN);
        mpfr_add(r39914, r39906, r39913, MPFR_RNDN);
        return mpfr_get_d(r39914, MPFR_RNDN);
}

static mpfr_t r39915, r39916, r39917, r39918, r39919, r39920, r39921, r39922, r39923, r39924, r39925;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r39915);
        mpfr_init_set_str(r39916, "0.5", 10, MPFR_RNDN);
        mpfr_init(r39917);
        mpfr_init(r39918);
        mpfr_init_set_str(r39919, "1.0", 10, MPFR_RNDN);
        mpfr_init(r39920);
        mpfr_init(r39921);
        mpfr_init(r39922);
        mpfr_init(r39923);
        mpfr_init(r39924);
        mpfr_init(r39925);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r39915, x, MPFR_RNDN);
        ;
        mpfr_mul(r39917, r39915, r39916, MPFR_RNDN);
        mpfr_set_d(r39918, y, MPFR_RNDN);
        ;
        mpfr_set_d(r39920, z, MPFR_RNDN);
        mpfr_sub(r39921, r39919, r39920, MPFR_RNDN);
        mpfr_log(r39922, r39920, MPFR_RNDN);
        mpfr_add(r39923, r39921, r39922, MPFR_RNDN);
        mpfr_mul(r39924, r39918, r39923, MPFR_RNDN);
        mpfr_add(r39925, r39917, r39924, MPFR_RNDN);
        return mpfr_get_d(r39925, MPFR_RNDN);
}

