#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 r9177 = x;
        float r9178 = y;
        float r9179 = r9177 + r9178;
        float r9180 = log(r9179);
        float r9181 = z;
        float r9182 = log(r9181);
        float r9183 = r9180 + r9182;
        float r9184 = t;
        float r9185 = r9183 - r9184;
        float r9186 = a;
        float r9187 = 0.5;
        float r9188 = r9186 - r9187;
        float r9189 = log(r9184);
        float r9190 = r9188 * r9189;
        float r9191 = r9185 + r9190;
        return r9191;
}

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


double f_of(float x, float y, float z, float t, float a) {
        float r9207 = x;
        float r9208 = y;
        float r9209 = r9207 + r9208;
        float r9210 = log(r9209);
        float r9211 = r9210 * r9210;
        float r9212 = z;
        float r9213 = log(r9212);
        float r9214 = r9213 * r9213;
        float r9215 = r9211 - r9214;
        float r9216 = r9210 - r9213;
        float r9217 = r9215 / r9216;
        float r9218 = t;
        float r9219 = r9217 - r9218;
        float r9220 = a;
        float r9221 = 0.5;
        float r9222 = r9220 - r9221;
        float r9223 = log(r9218);
        float r9224 = r9222 * r9223;
        float r9225 = r9219 + r9224;
        return r9225;
}

double f_od(double x, double y, double z, double t, double a) {
        double r9226 = x;
        double r9227 = y;
        double r9228 = r9226 + r9227;
        double r9229 = log(r9228);
        double r9230 = r9229 * r9229;
        double r9231 = z;
        double r9232 = log(r9231);
        double r9233 = r9232 * r9232;
        double r9234 = r9230 - r9233;
        double r9235 = r9229 - r9232;
        double r9236 = r9234 / r9235;
        double r9237 = t;
        double r9238 = r9236 - r9237;
        double r9239 = a;
        double r9240 = 0.5;
        double r9241 = r9239 - r9240;
        double r9242 = log(r9237);
        double r9243 = r9241 * r9242;
        double r9244 = r9238 + r9243;
        return r9244;
}

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 r9245, r9246, r9247, r9248, r9249, r9250, r9251, r9252, r9253, r9254, r9255, r9256, r9257, r9258, r9259;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9245);
        mpfr_init(r9246);
        mpfr_init(r9247);
        mpfr_init(r9248);
        mpfr_init(r9249);
        mpfr_init(r9250);
        mpfr_init(r9251);
        mpfr_init(r9252);
        mpfr_init(r9253);
        mpfr_init(r9254);
        mpfr_init_set_str(r9255, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9256);
        mpfr_init(r9257);
        mpfr_init(r9258);
        mpfr_init(r9259);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9245, x, MPFR_RNDN);
        mpfr_set_d(r9246, y, MPFR_RNDN);
        mpfr_add(r9247, r9245, r9246, MPFR_RNDN);
        mpfr_log(r9248, r9247, MPFR_RNDN);
        mpfr_set_d(r9249, z, MPFR_RNDN);
        mpfr_log(r9250, r9249, MPFR_RNDN);
        mpfr_add(r9251, r9248, r9250, MPFR_RNDN);
        mpfr_set_d(r9252, t, MPFR_RNDN);
        mpfr_sub(r9253, r9251, r9252, MPFR_RNDN);
        mpfr_set_d(r9254, a, MPFR_RNDN);
        ;
        mpfr_sub(r9256, r9254, r9255, MPFR_RNDN);
        mpfr_log(r9257, r9252, MPFR_RNDN);
        mpfr_mul(r9258, r9256, r9257, MPFR_RNDN);
        mpfr_add(r9259, r9253, r9258, MPFR_RNDN);
        return mpfr_get_d(r9259, MPFR_RNDN);
}

static mpfr_t r9260, r9261, r9262, r9263, r9264, r9265, r9266, r9267, r9268, r9269, r9270, r9271, r9272, r9273, r9274, r9275, r9276, r9277, r9278;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9260);
        mpfr_init(r9261);
        mpfr_init(r9262);
        mpfr_init(r9263);
        mpfr_init(r9264);
        mpfr_init(r9265);
        mpfr_init(r9266);
        mpfr_init(r9267);
        mpfr_init(r9268);
        mpfr_init(r9269);
        mpfr_init(r9270);
        mpfr_init(r9271);
        mpfr_init(r9272);
        mpfr_init(r9273);
        mpfr_init_set_str(r9274, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9275);
        mpfr_init(r9276);
        mpfr_init(r9277);
        mpfr_init(r9278);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9260, x, MPFR_RNDN);
        mpfr_set_d(r9261, y, MPFR_RNDN);
        mpfr_add(r9262, r9260, r9261, MPFR_RNDN);
        mpfr_log(r9263, r9262, MPFR_RNDN);
        mpfr_mul(r9264, r9263, r9263, MPFR_RNDN);
        mpfr_set_d(r9265, z, MPFR_RNDN);
        mpfr_log(r9266, r9265, MPFR_RNDN);
        mpfr_mul(r9267, r9266, r9266, MPFR_RNDN);
        mpfr_sub(r9268, r9264, r9267, MPFR_RNDN);
        mpfr_sub(r9269, r9263, r9266, MPFR_RNDN);
        mpfr_div(r9270, r9268, r9269, MPFR_RNDN);
        mpfr_set_d(r9271, t, MPFR_RNDN);
        mpfr_sub(r9272, r9270, r9271, MPFR_RNDN);
        mpfr_set_d(r9273, a, MPFR_RNDN);
        ;
        mpfr_sub(r9275, r9273, r9274, MPFR_RNDN);
        mpfr_log(r9276, r9271, MPFR_RNDN);
        mpfr_mul(r9277, r9275, r9276, MPFR_RNDN);
        mpfr_add(r9278, r9272, r9277, MPFR_RNDN);
        return mpfr_get_d(r9278, MPFR_RNDN);
}

static mpfr_t r9279, r9280, r9281, r9282, r9283, r9284, r9285, r9286, r9287, r9288, r9289, r9290, r9291, r9292, r9293, r9294, r9295, r9296, r9297;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9279);
        mpfr_init(r9280);
        mpfr_init(r9281);
        mpfr_init(r9282);
        mpfr_init(r9283);
        mpfr_init(r9284);
        mpfr_init(r9285);
        mpfr_init(r9286);
        mpfr_init(r9287);
        mpfr_init(r9288);
        mpfr_init(r9289);
        mpfr_init(r9290);
        mpfr_init(r9291);
        mpfr_init(r9292);
        mpfr_init_set_str(r9293, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9294);
        mpfr_init(r9295);
        mpfr_init(r9296);
        mpfr_init(r9297);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9279, x, MPFR_RNDN);
        mpfr_set_d(r9280, y, MPFR_RNDN);
        mpfr_add(r9281, r9279, r9280, MPFR_RNDN);
        mpfr_log(r9282, r9281, MPFR_RNDN);
        mpfr_mul(r9283, r9282, r9282, MPFR_RNDN);
        mpfr_set_d(r9284, z, MPFR_RNDN);
        mpfr_log(r9285, r9284, MPFR_RNDN);
        mpfr_mul(r9286, r9285, r9285, MPFR_RNDN);
        mpfr_sub(r9287, r9283, r9286, MPFR_RNDN);
        mpfr_sub(r9288, r9282, r9285, MPFR_RNDN);
        mpfr_div(r9289, r9287, r9288, MPFR_RNDN);
        mpfr_set_d(r9290, t, MPFR_RNDN);
        mpfr_sub(r9291, r9289, r9290, MPFR_RNDN);
        mpfr_set_d(r9292, a, MPFR_RNDN);
        ;
        mpfr_sub(r9294, r9292, r9293, MPFR_RNDN);
        mpfr_log(r9295, r9290, MPFR_RNDN);
        mpfr_mul(r9296, r9294, r9295, MPFR_RNDN);
        mpfr_add(r9297, r9291, r9296, MPFR_RNDN);
        return mpfr_get_d(r9297, MPFR_RNDN);
}

