#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 r9031 = x;
        float r9032 = y;
        float r9033 = r9031 + r9032;
        float r9034 = log(r9033);
        float r9035 = z;
        float r9036 = log(r9035);
        float r9037 = r9034 + r9036;
        float r9038 = t;
        float r9039 = r9037 - r9038;
        float r9040 = a;
        float r9041 = 0.5;
        float r9042 = r9040 - r9041;
        float r9043 = log(r9038);
        float r9044 = r9042 * r9043;
        float r9045 = r9039 + r9044;
        return r9045;
}

double f_id(double x, double y, double z, double t, double a) {
        double r9046 = x;
        double r9047 = y;
        double r9048 = r9046 + r9047;
        double r9049 = log(r9048);
        double r9050 = z;
        double r9051 = log(r9050);
        double r9052 = r9049 + r9051;
        double r9053 = t;
        double r9054 = r9052 - r9053;
        double r9055 = a;
        double r9056 = 0.5;
        double r9057 = r9055 - r9056;
        double r9058 = log(r9053);
        double r9059 = r9057 * r9058;
        double r9060 = r9054 + r9059;
        return r9060;
}


double f_of(float x, float y, float z, float t, float a) {
        float r9061 = x;
        float r9062 = y;
        float r9063 = r9061 + r9062;
        float r9064 = log(r9063);
        float r9065 = z;
        float r9066 = log(r9065);
        float r9067 = r9064 + r9066;
        float r9068 = t;
        float r9069 = r9067 - r9068;
        float r9070 = a;
        float r9071 = 0.5;
        float r9072 = r9070 - r9071;
        float r9073 = log(r9068);
        float r9074 = r9072 * r9073;
        float r9075 = r9069 + r9074;
        return r9075;
}

double f_od(double x, double y, double z, double t, double a) {
        double r9076 = x;
        double r9077 = y;
        double r9078 = r9076 + r9077;
        double r9079 = log(r9078);
        double r9080 = z;
        double r9081 = log(r9080);
        double r9082 = r9079 + r9081;
        double r9083 = t;
        double r9084 = r9082 - r9083;
        double r9085 = a;
        double r9086 = 0.5;
        double r9087 = r9085 - r9086;
        double r9088 = log(r9083);
        double r9089 = r9087 * r9088;
        double r9090 = r9084 + r9089;
        return r9090;
}

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 r9091, r9092, r9093, r9094, r9095, r9096, r9097, r9098, r9099, r9100, r9101, r9102, r9103, r9104, r9105;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9091);
        mpfr_init(r9092);
        mpfr_init(r9093);
        mpfr_init(r9094);
        mpfr_init(r9095);
        mpfr_init(r9096);
        mpfr_init(r9097);
        mpfr_init(r9098);
        mpfr_init(r9099);
        mpfr_init(r9100);
        mpfr_init_set_str(r9101, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9102);
        mpfr_init(r9103);
        mpfr_init(r9104);
        mpfr_init(r9105);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9091, x, MPFR_RNDN);
        mpfr_set_d(r9092, y, MPFR_RNDN);
        mpfr_add(r9093, r9091, r9092, MPFR_RNDN);
        mpfr_log(r9094, r9093, MPFR_RNDN);
        mpfr_set_d(r9095, z, MPFR_RNDN);
        mpfr_log(r9096, r9095, MPFR_RNDN);
        mpfr_add(r9097, r9094, r9096, MPFR_RNDN);
        mpfr_set_d(r9098, t, MPFR_RNDN);
        mpfr_sub(r9099, r9097, r9098, MPFR_RNDN);
        mpfr_set_d(r9100, a, MPFR_RNDN);
        ;
        mpfr_sub(r9102, r9100, r9101, MPFR_RNDN);
        mpfr_log(r9103, r9098, MPFR_RNDN);
        mpfr_mul(r9104, r9102, r9103, MPFR_RNDN);
        mpfr_add(r9105, r9099, r9104, MPFR_RNDN);
        return mpfr_get_d(r9105, MPFR_RNDN);
}

static mpfr_t r9106, r9107, r9108, r9109, r9110, r9111, r9112, r9113, r9114, r9115, r9116, r9117, r9118, r9119, r9120;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9106);
        mpfr_init(r9107);
        mpfr_init(r9108);
        mpfr_init(r9109);
        mpfr_init(r9110);
        mpfr_init(r9111);
        mpfr_init(r9112);
        mpfr_init(r9113);
        mpfr_init(r9114);
        mpfr_init(r9115);
        mpfr_init_set_str(r9116, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9117);
        mpfr_init(r9118);
        mpfr_init(r9119);
        mpfr_init(r9120);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9106, x, MPFR_RNDN);
        mpfr_set_d(r9107, y, MPFR_RNDN);
        mpfr_add(r9108, r9106, r9107, MPFR_RNDN);
        mpfr_log(r9109, r9108, MPFR_RNDN);
        mpfr_set_d(r9110, z, MPFR_RNDN);
        mpfr_log(r9111, r9110, MPFR_RNDN);
        mpfr_add(r9112, r9109, r9111, MPFR_RNDN);
        mpfr_set_d(r9113, t, MPFR_RNDN);
        mpfr_sub(r9114, r9112, r9113, MPFR_RNDN);
        mpfr_set_d(r9115, a, MPFR_RNDN);
        ;
        mpfr_sub(r9117, r9115, r9116, MPFR_RNDN);
        mpfr_log(r9118, r9113, MPFR_RNDN);
        mpfr_mul(r9119, r9117, r9118, MPFR_RNDN);
        mpfr_add(r9120, r9114, r9119, MPFR_RNDN);
        return mpfr_get_d(r9120, MPFR_RNDN);
}

static mpfr_t r9121, r9122, r9123, r9124, r9125, r9126, r9127, r9128, r9129, r9130, r9131, r9132, r9133, r9134, r9135;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9121);
        mpfr_init(r9122);
        mpfr_init(r9123);
        mpfr_init(r9124);
        mpfr_init(r9125);
        mpfr_init(r9126);
        mpfr_init(r9127);
        mpfr_init(r9128);
        mpfr_init(r9129);
        mpfr_init(r9130);
        mpfr_init_set_str(r9131, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9132);
        mpfr_init(r9133);
        mpfr_init(r9134);
        mpfr_init(r9135);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9121, x, MPFR_RNDN);
        mpfr_set_d(r9122, y, MPFR_RNDN);
        mpfr_add(r9123, r9121, r9122, MPFR_RNDN);
        mpfr_log(r9124, r9123, MPFR_RNDN);
        mpfr_set_d(r9125, z, MPFR_RNDN);
        mpfr_log(r9126, r9125, MPFR_RNDN);
        mpfr_add(r9127, r9124, r9126, MPFR_RNDN);
        mpfr_set_d(r9128, t, MPFR_RNDN);
        mpfr_sub(r9129, r9127, r9128, MPFR_RNDN);
        mpfr_set_d(r9130, a, MPFR_RNDN);
        ;
        mpfr_sub(r9132, r9130, r9131, MPFR_RNDN);
        mpfr_log(r9133, r9128, MPFR_RNDN);
        mpfr_mul(r9134, r9132, r9133, MPFR_RNDN);
        mpfr_add(r9135, r9129, r9134, MPFR_RNDN);
        return mpfr_get_d(r9135, MPFR_RNDN);
}

