#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 r40186 = x;
        float r40187 = 0.5;
        float r40188 = r40186 * r40187;
        float r40189 = y;
        float r40190 = 1.0;
        float r40191 = z;
        float r40192 = r40190 - r40191;
        float r40193 = log(r40191);
        float r40194 = r40192 + r40193;
        float r40195 = r40189 * r40194;
        float r40196 = r40188 + r40195;
        return r40196;
}

double f_id(double x, double y, double z) {
        double r40197 = x;
        double r40198 = 0.5;
        double r40199 = r40197 * r40198;
        double r40200 = y;
        double r40201 = 1.0;
        double r40202 = z;
        double r40203 = r40201 - r40202;
        double r40204 = log(r40202);
        double r40205 = r40203 + r40204;
        double r40206 = r40200 * r40205;
        double r40207 = r40199 + r40206;
        return r40207;
}


double f_of(float x, float y, float z) {
        float r40208 = x;
        float r40209 = 0.5;
        float r40210 = r40208 * r40209;
        float r40211 = y;
        float r40212 = 1.0;
        float r40213 = z;
        float r40214 = r40212 - r40213;
        float r40215 = log(r40213);
        float r40216 = r40214 + r40215;
        float r40217 = r40211 * r40216;
        float r40218 = r40210 + r40217;
        return r40218;
}

double f_od(double x, double y, double z) {
        double r40219 = x;
        double r40220 = 0.5;
        double r40221 = r40219 * r40220;
        double r40222 = y;
        double r40223 = 1.0;
        double r40224 = z;
        double r40225 = r40223 - r40224;
        double r40226 = log(r40224);
        double r40227 = r40225 + r40226;
        double r40228 = r40222 * r40227;
        double r40229 = r40221 + r40228;
        return r40229;
}

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 r40230, r40231, r40232, r40233, r40234, r40235, r40236, r40237, r40238, r40239, r40240;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40230);
        mpfr_init_set_str(r40231, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40232);
        mpfr_init(r40233);
        mpfr_init_set_str(r40234, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40235);
        mpfr_init(r40236);
        mpfr_init(r40237);
        mpfr_init(r40238);
        mpfr_init(r40239);
        mpfr_init(r40240);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40230, x, MPFR_RNDN);
        ;
        mpfr_mul(r40232, r40230, r40231, MPFR_RNDN);
        mpfr_set_d(r40233, y, MPFR_RNDN);
        ;
        mpfr_set_d(r40235, z, MPFR_RNDN);
        mpfr_sub(r40236, r40234, r40235, MPFR_RNDN);
        mpfr_log(r40237, r40235, MPFR_RNDN);
        mpfr_add(r40238, r40236, r40237, MPFR_RNDN);
        mpfr_mul(r40239, r40233, r40238, MPFR_RNDN);
        mpfr_add(r40240, r40232, r40239, MPFR_RNDN);
        return mpfr_get_d(r40240, MPFR_RNDN);
}

static mpfr_t r40241, r40242, r40243, r40244, r40245, r40246, r40247, r40248, r40249, r40250, r40251;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40241);
        mpfr_init_set_str(r40242, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40243);
        mpfr_init(r40244);
        mpfr_init_set_str(r40245, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40246);
        mpfr_init(r40247);
        mpfr_init(r40248);
        mpfr_init(r40249);
        mpfr_init(r40250);
        mpfr_init(r40251);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40241, x, MPFR_RNDN);
        ;
        mpfr_mul(r40243, r40241, r40242, MPFR_RNDN);
        mpfr_set_d(r40244, y, MPFR_RNDN);
        ;
        mpfr_set_d(r40246, z, MPFR_RNDN);
        mpfr_sub(r40247, r40245, r40246, MPFR_RNDN);
        mpfr_log(r40248, r40246, MPFR_RNDN);
        mpfr_add(r40249, r40247, r40248, MPFR_RNDN);
        mpfr_mul(r40250, r40244, r40249, MPFR_RNDN);
        mpfr_add(r40251, r40243, r40250, MPFR_RNDN);
        return mpfr_get_d(r40251, MPFR_RNDN);
}

static mpfr_t r40252, r40253, r40254, r40255, r40256, r40257, r40258, r40259, r40260, r40261, r40262;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40252);
        mpfr_init_set_str(r40253, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40254);
        mpfr_init(r40255);
        mpfr_init_set_str(r40256, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40257);
        mpfr_init(r40258);
        mpfr_init(r40259);
        mpfr_init(r40260);
        mpfr_init(r40261);
        mpfr_init(r40262);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40252, x, MPFR_RNDN);
        ;
        mpfr_mul(r40254, r40252, r40253, MPFR_RNDN);
        mpfr_set_d(r40255, y, MPFR_RNDN);
        ;
        mpfr_set_d(r40257, z, MPFR_RNDN);
        mpfr_sub(r40258, r40256, r40257, MPFR_RNDN);
        mpfr_log(r40259, r40257, MPFR_RNDN);
        mpfr_add(r40260, r40258, r40259, MPFR_RNDN);
        mpfr_mul(r40261, r40255, r40260, MPFR_RNDN);
        mpfr_add(r40262, r40254, r40261, MPFR_RNDN);
        return mpfr_get_d(r40262, MPFR_RNDN);
}

