#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 r9023 = x;
        float r9024 = y;
        float r9025 = r9023 + r9024;
        float r9026 = log(r9025);
        float r9027 = z;
        float r9028 = log(r9027);
        float r9029 = r9026 + r9028;
        float r9030 = t;
        float r9031 = r9029 - r9030;
        float r9032 = a;
        float r9033 = 0.5;
        float r9034 = r9032 - r9033;
        float r9035 = log(r9030);
        float r9036 = r9034 * r9035;
        float r9037 = r9031 + r9036;
        return r9037;
}

double f_id(double x, double y, double z, double t, double a) {
        double r9038 = x;
        double r9039 = y;
        double r9040 = r9038 + r9039;
        double r9041 = log(r9040);
        double r9042 = z;
        double r9043 = log(r9042);
        double r9044 = r9041 + r9043;
        double r9045 = t;
        double r9046 = r9044 - r9045;
        double r9047 = a;
        double r9048 = 0.5;
        double r9049 = r9047 - r9048;
        double r9050 = log(r9045);
        double r9051 = r9049 * r9050;
        double r9052 = r9046 + r9051;
        return r9052;
}


double f_of(float x, float y, float z, float t, float a) {
        float r9053 = y;
        float r9054 = x;
        float r9055 = r9053 + r9054;
        float r9056 = log(r9055);
        float r9057 = t;
        float r9058 = r9056 - r9057;
        float r9059 = log(r9057);
        float r9060 = 0.5;
        float r9061 = a;
        float r9062 = r9060 - r9061;
        float r9063 = r9059 * r9062;
        float r9064 = z;
        float r9065 = log(r9064);
        float r9066 = r9063 - r9065;
        float r9067 = r9058 - r9066;
        return r9067;
}

double f_od(double x, double y, double z, double t, double a) {
        double r9068 = y;
        double r9069 = x;
        double r9070 = r9068 + r9069;
        double r9071 = log(r9070);
        double r9072 = t;
        double r9073 = r9071 - r9072;
        double r9074 = log(r9072);
        double r9075 = 0.5;
        double r9076 = a;
        double r9077 = r9075 - r9076;
        double r9078 = r9074 * r9077;
        double r9079 = z;
        double r9080 = log(r9079);
        double r9081 = r9078 - r9080;
        double r9082 = r9073 - r9081;
        return r9082;
}

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 r9083, r9084, r9085, r9086, r9087, r9088, r9089, r9090, r9091, r9092, r9093, r9094, r9095, r9096, r9097;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9083);
        mpfr_init(r9084);
        mpfr_init(r9085);
        mpfr_init(r9086);
        mpfr_init(r9087);
        mpfr_init(r9088);
        mpfr_init(r9089);
        mpfr_init(r9090);
        mpfr_init(r9091);
        mpfr_init(r9092);
        mpfr_init_set_str(r9093, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9094);
        mpfr_init(r9095);
        mpfr_init(r9096);
        mpfr_init(r9097);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9083, x, MPFR_RNDN);
        mpfr_set_d(r9084, y, MPFR_RNDN);
        mpfr_add(r9085, r9083, r9084, MPFR_RNDN);
        mpfr_log(r9086, r9085, MPFR_RNDN);
        mpfr_set_d(r9087, z, MPFR_RNDN);
        mpfr_log(r9088, r9087, MPFR_RNDN);
        mpfr_add(r9089, r9086, r9088, MPFR_RNDN);
        mpfr_set_d(r9090, t, MPFR_RNDN);
        mpfr_sub(r9091, r9089, r9090, MPFR_RNDN);
        mpfr_set_d(r9092, a, MPFR_RNDN);
        ;
        mpfr_sub(r9094, r9092, r9093, MPFR_RNDN);
        mpfr_log(r9095, r9090, MPFR_RNDN);
        mpfr_mul(r9096, r9094, r9095, MPFR_RNDN);
        mpfr_add(r9097, r9091, r9096, MPFR_RNDN);
        return mpfr_get_d(r9097, MPFR_RNDN);
}

static mpfr_t r9098, r9099, r9100, r9101, r9102, r9103, r9104, r9105, r9106, r9107, r9108, r9109, r9110, r9111, r9112;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9098);
        mpfr_init(r9099);
        mpfr_init(r9100);
        mpfr_init(r9101);
        mpfr_init(r9102);
        mpfr_init(r9103);
        mpfr_init(r9104);
        mpfr_init_set_str(r9105, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9106);
        mpfr_init(r9107);
        mpfr_init(r9108);
        mpfr_init(r9109);
        mpfr_init(r9110);
        mpfr_init(r9111);
        mpfr_init(r9112);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9098, y, MPFR_RNDN);
        mpfr_set_d(r9099, x, MPFR_RNDN);
        mpfr_add(r9100, r9098, r9099, MPFR_RNDN);
        mpfr_log(r9101, r9100, MPFR_RNDN);
        mpfr_set_d(r9102, t, MPFR_RNDN);
        mpfr_sub(r9103, r9101, r9102, MPFR_RNDN);
        mpfr_log(r9104, r9102, MPFR_RNDN);
        ;
        mpfr_set_d(r9106, a, MPFR_RNDN);
        mpfr_sub(r9107, r9105, r9106, MPFR_RNDN);
        mpfr_mul(r9108, r9104, r9107, MPFR_RNDN);
        mpfr_set_d(r9109, z, MPFR_RNDN);
        mpfr_log(r9110, r9109, MPFR_RNDN);
        mpfr_sub(r9111, r9108, r9110, MPFR_RNDN);
        mpfr_sub(r9112, r9103, r9111, MPFR_RNDN);
        return mpfr_get_d(r9112, MPFR_RNDN);
}

static mpfr_t r9113, r9114, r9115, r9116, r9117, r9118, r9119, r9120, r9121, r9122, r9123, r9124, r9125, r9126, r9127;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9113);
        mpfr_init(r9114);
        mpfr_init(r9115);
        mpfr_init(r9116);
        mpfr_init(r9117);
        mpfr_init(r9118);
        mpfr_init(r9119);
        mpfr_init_set_str(r9120, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9121);
        mpfr_init(r9122);
        mpfr_init(r9123);
        mpfr_init(r9124);
        mpfr_init(r9125);
        mpfr_init(r9126);
        mpfr_init(r9127);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r9113, y, MPFR_RNDN);
        mpfr_set_d(r9114, x, MPFR_RNDN);
        mpfr_add(r9115, r9113, r9114, MPFR_RNDN);
        mpfr_log(r9116, r9115, MPFR_RNDN);
        mpfr_set_d(r9117, t, MPFR_RNDN);
        mpfr_sub(r9118, r9116, r9117, MPFR_RNDN);
        mpfr_log(r9119, r9117, MPFR_RNDN);
        ;
        mpfr_set_d(r9121, a, MPFR_RNDN);
        mpfr_sub(r9122, r9120, r9121, MPFR_RNDN);
        mpfr_mul(r9123, r9119, r9122, MPFR_RNDN);
        mpfr_set_d(r9124, z, MPFR_RNDN);
        mpfr_log(r9125, r9124, MPFR_RNDN);
        mpfr_sub(r9126, r9123, r9125, MPFR_RNDN);
        mpfr_sub(r9127, r9118, r9126, MPFR_RNDN);
        return mpfr_get_d(r9127, MPFR_RNDN);
}

