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

char *name = "Numeric.SpecFunctions:logGammaL from math-functions-0.1.5.2";

double f_if(float x, float y, float z, float t, float a) {
        float r9161 = x;
        float r9162 = y;
        float r9163 = r9161 + r9162;
        float r9164 = log(r9163);
        float r9165 = z;
        float r9166 = log(r9165);
        float r9167 = r9164 + r9166;
        float r9168 = t;
        float r9169 = r9167 - r9168;
        float r9170 = a;
        float r9171 = 0.5;
        float r9172 = r9170 - r9171;
        float r9173 = log(r9168);
        float r9174 = r9172 * r9173;
        float r9175 = r9169 + r9174;
        return r9175;
}

double f_id(double x, double y, double z, double t, double a) {
        double r9176 = x;
        double r9177 = y;
        double r9178 = r9176 + r9177;
        double r9179 = log(r9178);
        double r9180 = z;
        double r9181 = log(r9180);
        double r9182 = r9179 + r9181;
        double r9183 = t;
        double r9184 = r9182 - r9183;
        double r9185 = a;
        double r9186 = 0.5;
        double r9187 = r9185 - r9186;
        double r9188 = log(r9183);
        double r9189 = r9187 * r9188;
        double r9190 = r9184 + r9189;
        return r9190;
}


double f_of(float x, float y, float z, float t, float a) {
        float r9191 = x;
        float r9192 = y;
        float r9193 = r9191 + r9192;
        float r9194 = log(r9193);
        float r9195 = z;
        float r9196 = log(r9195);
        float r9197 = r9194 + r9196;
        float r9198 = t;
        float r9199 = r9197 - r9198;
        float r9200 = a;
        float r9201 = 0.5;
        float r9202 = r9200 - r9201;
        float r9203 = log(r9198);
        float r9204 = r9202 * r9203;
        float r9205 = r9199 + r9204;
        return r9205;
}

double f_od(double x, double y, double z, double t, double a) {
        double r9206 = x;
        double r9207 = y;
        double r9208 = r9206 + r9207;
        double r9209 = log(r9208);
        double r9210 = z;
        double r9211 = log(r9210);
        double r9212 = r9209 + r9211;
        double r9213 = t;
        double r9214 = r9212 - r9213;
        double r9215 = a;
        double r9216 = 0.5;
        double r9217 = r9215 - r9216;
        double r9218 = log(r9213);
        double r9219 = r9217 * r9218;
        double r9220 = r9214 + r9219;
        return r9220;
}

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 r9221, r9222, r9223, r9224, r9225, r9226, r9227, r9228, r9229, r9230, r9231, r9232, r9233, r9234, r9235;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9221);
        mpfr_init(r9222);
        mpfr_init(r9223);
        mpfr_init(r9224);
        mpfr_init(r9225);
        mpfr_init(r9226);
        mpfr_init(r9227);
        mpfr_init(r9228);
        mpfr_init(r9229);
        mpfr_init(r9230);
        mpfr_init_set_str(r9231, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9232);
        mpfr_init(r9233);
        mpfr_init(r9234);
        mpfr_init(r9235);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9221, x, MPFR_RNDN);
        mpfr_set_d(r9222, y, MPFR_RNDN);
        mpfr_add(r9223, r9221, r9222, MPFR_RNDN);
        mpfr_log(r9224, r9223, MPFR_RNDN);
        mpfr_set_d(r9225, z, MPFR_RNDN);
        mpfr_log(r9226, r9225, MPFR_RNDN);
        mpfr_add(r9227, r9224, r9226, MPFR_RNDN);
        mpfr_set_d(r9228, t, MPFR_RNDN);
        mpfr_sub(r9229, r9227, r9228, MPFR_RNDN);
        mpfr_set_d(r9230, a, MPFR_RNDN);
        ;
        mpfr_sub(r9232, r9230, r9231, MPFR_RNDN);
        mpfr_log(r9233, r9228, MPFR_RNDN);
        mpfr_mul(r9234, r9232, r9233, MPFR_RNDN);
        mpfr_add(r9235, r9229, r9234, MPFR_RNDN);
        return mpfr_get_d(r9235, MPFR_RNDN);
}

static mpfr_t r9236, r9237, r9238, r9239, r9240, r9241, r9242, r9243, r9244, r9245, r9246, r9247, r9248, r9249, r9250;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9236);
        mpfr_init(r9237);
        mpfr_init(r9238);
        mpfr_init(r9239);
        mpfr_init(r9240);
        mpfr_init(r9241);
        mpfr_init(r9242);
        mpfr_init(r9243);
        mpfr_init(r9244);
        mpfr_init(r9245);
        mpfr_init_set_str(r9246, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9247);
        mpfr_init(r9248);
        mpfr_init(r9249);
        mpfr_init(r9250);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9236, x, MPFR_RNDN);
        mpfr_set_d(r9237, y, MPFR_RNDN);
        mpfr_add(r9238, r9236, r9237, MPFR_RNDN);
        mpfr_log(r9239, r9238, MPFR_RNDN);
        mpfr_set_d(r9240, z, MPFR_RNDN);
        mpfr_log(r9241, r9240, MPFR_RNDN);
        mpfr_add(r9242, r9239, r9241, MPFR_RNDN);
        mpfr_set_d(r9243, t, MPFR_RNDN);
        mpfr_sub(r9244, r9242, r9243, MPFR_RNDN);
        mpfr_set_d(r9245, a, MPFR_RNDN);
        ;
        mpfr_sub(r9247, r9245, r9246, MPFR_RNDN);
        mpfr_log(r9248, r9243, MPFR_RNDN);
        mpfr_mul(r9249, r9247, r9248, MPFR_RNDN);
        mpfr_add(r9250, r9244, r9249, MPFR_RNDN);
        return mpfr_get_d(r9250, MPFR_RNDN);
}

static mpfr_t r9251, r9252, r9253, r9254, r9255, r9256, r9257, r9258, r9259, r9260, r9261, r9262, r9263, r9264, r9265;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9251);
        mpfr_init(r9252);
        mpfr_init(r9253);
        mpfr_init(r9254);
        mpfr_init(r9255);
        mpfr_init(r9256);
        mpfr_init(r9257);
        mpfr_init(r9258);
        mpfr_init(r9259);
        mpfr_init(r9260);
        mpfr_init_set_str(r9261, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9262);
        mpfr_init(r9263);
        mpfr_init(r9264);
        mpfr_init(r9265);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9251, x, MPFR_RNDN);
        mpfr_set_d(r9252, y, MPFR_RNDN);
        mpfr_add(r9253, r9251, r9252, MPFR_RNDN);
        mpfr_log(r9254, r9253, MPFR_RNDN);
        mpfr_set_d(r9255, z, MPFR_RNDN);
        mpfr_log(r9256, r9255, MPFR_RNDN);
        mpfr_add(r9257, r9254, r9256, MPFR_RNDN);
        mpfr_set_d(r9258, t, MPFR_RNDN);
        mpfr_sub(r9259, r9257, r9258, MPFR_RNDN);
        mpfr_set_d(r9260, a, MPFR_RNDN);
        ;
        mpfr_sub(r9262, r9260, r9261, MPFR_RNDN);
        mpfr_log(r9263, r9258, MPFR_RNDN);
        mpfr_mul(r9264, r9262, r9263, MPFR_RNDN);
        mpfr_add(r9265, r9259, r9264, MPFR_RNDN);
        return mpfr_get_d(r9265, MPFR_RNDN);
}

