#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 r40003 = x;
        float r40004 = 0.5;
        float r40005 = r40003 * r40004;
        float r40006 = y;
        float r40007 = 1.0;
        float r40008 = z;
        float r40009 = r40007 - r40008;
        float r40010 = log(r40008);
        float r40011 = r40009 + r40010;
        float r40012 = r40006 * r40011;
        float r40013 = r40005 + r40012;
        return r40013;
}

double f_id(double x, double y, double z) {
        double r40014 = x;
        double r40015 = 0.5;
        double r40016 = r40014 * r40015;
        double r40017 = y;
        double r40018 = 1.0;
        double r40019 = z;
        double r40020 = r40018 - r40019;
        double r40021 = log(r40019);
        double r40022 = r40020 + r40021;
        double r40023 = r40017 * r40022;
        double r40024 = r40016 + r40023;
        return r40024;
}


double f_of(float x, float y, float z) {
        float r40025 = x;
        float r40026 = 0.5;
        float r40027 = r40025 * r40026;
        float r40028 = y;
        float r40029 = 1.0;
        float r40030 = z;
        float r40031 = r40029 - r40030;
        float r40032 = log(r40030);
        float r40033 = r40031 + r40032;
        float r40034 = r40028 * r40033;
        float r40035 = r40027 + r40034;
        return r40035;
}

double f_od(double x, double y, double z) {
        double r40036 = x;
        double r40037 = 0.5;
        double r40038 = r40036 * r40037;
        double r40039 = y;
        double r40040 = 1.0;
        double r40041 = z;
        double r40042 = r40040 - r40041;
        double r40043 = log(r40041);
        double r40044 = r40042 + r40043;
        double r40045 = r40039 * r40044;
        double r40046 = r40038 + r40045;
        return r40046;
}

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 r40047, r40048, r40049, r40050, r40051, r40052, r40053, r40054, r40055, r40056, r40057;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40047);
        mpfr_init_set_str(r40048, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40049);
        mpfr_init(r40050);
        mpfr_init_set_str(r40051, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40052);
        mpfr_init(r40053);
        mpfr_init(r40054);
        mpfr_init(r40055);
        mpfr_init(r40056);
        mpfr_init(r40057);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40047, x, MPFR_RNDN);
        ;
        mpfr_mul(r40049, r40047, r40048, MPFR_RNDN);
        mpfr_set_d(r40050, y, MPFR_RNDN);
        ;
        mpfr_set_d(r40052, z, MPFR_RNDN);
        mpfr_sub(r40053, r40051, r40052, MPFR_RNDN);
        mpfr_log(r40054, r40052, MPFR_RNDN);
        mpfr_add(r40055, r40053, r40054, MPFR_RNDN);
        mpfr_mul(r40056, r40050, r40055, MPFR_RNDN);
        mpfr_add(r40057, r40049, r40056, MPFR_RNDN);
        return mpfr_get_d(r40057, MPFR_RNDN);
}

static mpfr_t r40058, r40059, r40060, r40061, r40062, r40063, r40064, r40065, r40066, r40067, r40068;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40058);
        mpfr_init_set_str(r40059, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40060);
        mpfr_init(r40061);
        mpfr_init_set_str(r40062, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40063);
        mpfr_init(r40064);
        mpfr_init(r40065);
        mpfr_init(r40066);
        mpfr_init(r40067);
        mpfr_init(r40068);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40058, x, MPFR_RNDN);
        ;
        mpfr_mul(r40060, r40058, r40059, MPFR_RNDN);
        mpfr_set_d(r40061, y, MPFR_RNDN);
        ;
        mpfr_set_d(r40063, z, MPFR_RNDN);
        mpfr_sub(r40064, r40062, r40063, MPFR_RNDN);
        mpfr_log(r40065, r40063, MPFR_RNDN);
        mpfr_add(r40066, r40064, r40065, MPFR_RNDN);
        mpfr_mul(r40067, r40061, r40066, MPFR_RNDN);
        mpfr_add(r40068, r40060, r40067, MPFR_RNDN);
        return mpfr_get_d(r40068, MPFR_RNDN);
}

static mpfr_t r40069, r40070, r40071, r40072, r40073, r40074, r40075, r40076, r40077, r40078, r40079;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40069);
        mpfr_init_set_str(r40070, "0.5", 10, MPFR_RNDN);
        mpfr_init(r40071);
        mpfr_init(r40072);
        mpfr_init_set_str(r40073, "1.0", 10, MPFR_RNDN);
        mpfr_init(r40074);
        mpfr_init(r40075);
        mpfr_init(r40076);
        mpfr_init(r40077);
        mpfr_init(r40078);
        mpfr_init(r40079);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40069, x, MPFR_RNDN);
        ;
        mpfr_mul(r40071, r40069, r40070, MPFR_RNDN);
        mpfr_set_d(r40072, y, MPFR_RNDN);
        ;
        mpfr_set_d(r40074, z, MPFR_RNDN);
        mpfr_sub(r40075, r40073, r40074, MPFR_RNDN);
        mpfr_log(r40076, r40074, MPFR_RNDN);
        mpfr_add(r40077, r40075, r40076, MPFR_RNDN);
        mpfr_mul(r40078, r40072, r40077, MPFR_RNDN);
        mpfr_add(r40079, r40071, r40078, MPFR_RNDN);
        return mpfr_get_d(r40079, MPFR_RNDN);
}

