#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 r36327 = x;
        float r36328 = 0.5f;
        float r36329 = r36327 * r36328;
        float r36330 = y;
        float r36331 = 1.0f;
        float r36332 = z;
        float r36333 = r36331 - r36332;
        float r36334 = log(r36332);
        float r36335 = r36333 + r36334;
        float r36336 = r36330 * r36335;
        float r36337 = r36329 + r36336;
        return r36337;
}

double f_id(double x, double y, double z) {
        double r36338 = x;
        double r36339 = 0.5;
        double r36340 = r36338 * r36339;
        double r36341 = y;
        double r36342 = 1.0;
        double r36343 = z;
        double r36344 = r36342 - r36343;
        double r36345 = log(r36343);
        double r36346 = r36344 + r36345;
        double r36347 = r36341 * r36346;
        double r36348 = r36340 + r36347;
        return r36348;
}


double f_of(float x, float y, float z) {
        float r36349 = x;
        float r36350 = 0.5f;
        float r36351 = r36349 * r36350;
        float r36352 = y;
        float r36353 = 1.0f;
        float r36354 = z;
        float r36355 = r36353 - r36354;
        float r36356 = log(r36354);
        float r36357 = r36355 + r36356;
        float r36358 = r36352 * r36357;
        float r36359 = r36351 + r36358;
        return r36359;
}

double f_od(double x, double y, double z) {
        double r36360 = x;
        double r36361 = 0.5;
        double r36362 = r36360 * r36361;
        double r36363 = y;
        double r36364 = 1.0;
        double r36365 = z;
        double r36366 = r36364 - r36365;
        double r36367 = log(r36365);
        double r36368 = r36366 + r36367;
        double r36369 = r36363 * r36368;
        double r36370 = r36362 + r36369;
        return r36370;
}

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 r36371, r36372, r36373, r36374, r36375, r36376, r36377, r36378, r36379, r36380, r36381;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r36371);
        mpfr_init_set_str(r36372, "0.5", 10, MPFR_RNDN);
        mpfr_init(r36373);
        mpfr_init(r36374);
        mpfr_init_set_str(r36375, "1.0", 10, MPFR_RNDN);
        mpfr_init(r36376);
        mpfr_init(r36377);
        mpfr_init(r36378);
        mpfr_init(r36379);
        mpfr_init(r36380);
        mpfr_init(r36381);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r36371, x, MPFR_RNDN);
        ;
        mpfr_mul(r36373, r36371, r36372, MPFR_RNDN);
        mpfr_set_d(r36374, y, MPFR_RNDN);
        ;
        mpfr_set_d(r36376, z, MPFR_RNDN);
        mpfr_sub(r36377, r36375, r36376, MPFR_RNDN);
        mpfr_log(r36378, r36376, MPFR_RNDN);
        mpfr_add(r36379, r36377, r36378, MPFR_RNDN);
        mpfr_mul(r36380, r36374, r36379, MPFR_RNDN);
        mpfr_add(r36381, r36373, r36380, MPFR_RNDN);
        return mpfr_get_d(r36381, MPFR_RNDN);
}

static mpfr_t r36382, r36383, r36384, r36385, r36386, r36387, r36388, r36389, r36390, r36391, r36392;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36382);
        mpfr_init_set_str(r36383, "0.5", 10, MPFR_RNDN);
        mpfr_init(r36384);
        mpfr_init(r36385);
        mpfr_init_set_str(r36386, "1.0", 10, MPFR_RNDN);
        mpfr_init(r36387);
        mpfr_init(r36388);
        mpfr_init(r36389);
        mpfr_init(r36390);
        mpfr_init(r36391);
        mpfr_init(r36392);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r36382, x, MPFR_RNDN);
        ;
        mpfr_mul(r36384, r36382, r36383, MPFR_RNDN);
        mpfr_set_d(r36385, y, MPFR_RNDN);
        ;
        mpfr_set_d(r36387, z, MPFR_RNDN);
        mpfr_sub(r36388, r36386, r36387, MPFR_RNDN);
        mpfr_log(r36389, r36387, MPFR_RNDN);
        mpfr_add(r36390, r36388, r36389, MPFR_RNDN);
        mpfr_mul(r36391, r36385, r36390, MPFR_RNDN);
        mpfr_add(r36392, r36384, r36391, MPFR_RNDN);
        return mpfr_get_d(r36392, MPFR_RNDN);
}

static mpfr_t r36393, r36394, r36395, r36396, r36397, r36398, r36399, r36400, r36401, r36402, r36403;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36393);
        mpfr_init_set_str(r36394, "0.5", 10, MPFR_RNDN);
        mpfr_init(r36395);
        mpfr_init(r36396);
        mpfr_init_set_str(r36397, "1.0", 10, MPFR_RNDN);
        mpfr_init(r36398);
        mpfr_init(r36399);
        mpfr_init(r36400);
        mpfr_init(r36401);
        mpfr_init(r36402);
        mpfr_init(r36403);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r36393, x, MPFR_RNDN);
        ;
        mpfr_mul(r36395, r36393, r36394, MPFR_RNDN);
        mpfr_set_d(r36396, y, MPFR_RNDN);
        ;
        mpfr_set_d(r36398, z, MPFR_RNDN);
        mpfr_sub(r36399, r36397, r36398, MPFR_RNDN);
        mpfr_log(r36400, r36398, MPFR_RNDN);
        mpfr_add(r36401, r36399, r36400, MPFR_RNDN);
        mpfr_mul(r36402, r36396, r36401, MPFR_RNDN);
        mpfr_add(r36403, r36395, r36402, MPFR_RNDN);
        return mpfr_get_d(r36403, MPFR_RNDN);
}

