#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 r42043 = x;
        float r42044 = y;
        float r42045 = r42043 + r42044;
        float r42046 = log(r42045);
        float r42047 = z;
        float r42048 = log(r42047);
        float r42049 = r42046 + r42048;
        float r42050 = t;
        float r42051 = r42049 - r42050;
        float r42052 = a;
        float r42053 = 0.5;
        float r42054 = r42052 - r42053;
        float r42055 = log(r42050);
        float r42056 = r42054 * r42055;
        float r42057 = r42051 + r42056;
        return r42057;
}

double f_id(double x, double y, double z, double t, double a) {
        double r42058 = x;
        double r42059 = y;
        double r42060 = r42058 + r42059;
        double r42061 = log(r42060);
        double r42062 = z;
        double r42063 = log(r42062);
        double r42064 = r42061 + r42063;
        double r42065 = t;
        double r42066 = r42064 - r42065;
        double r42067 = a;
        double r42068 = 0.5;
        double r42069 = r42067 - r42068;
        double r42070 = log(r42065);
        double r42071 = r42069 * r42070;
        double r42072 = r42066 + r42071;
        return r42072;
}


double f_of(float x, float y, float z, float t, float a) {
        float r42073 = x;
        float r42074 = y;
        float r42075 = r42073 + r42074;
        float r42076 = cbrt(r42075);
        float r42077 = r42076 * r42076;
        float r42078 = log(r42077);
        float r42079 = log(r42076);
        float r42080 = z;
        float r42081 = log(r42080);
        float r42082 = r42079 + r42081;
        float r42083 = r42078 + r42082;
        float r42084 = t;
        float r42085 = r42083 - r42084;
        float r42086 = a;
        float r42087 = 0.5;
        float r42088 = r42086 - r42087;
        float r42089 = log(r42084);
        float r42090 = r42088 * r42089;
        float r42091 = r42085 + r42090;
        return r42091;
}

double f_od(double x, double y, double z, double t, double a) {
        double r42092 = x;
        double r42093 = y;
        double r42094 = r42092 + r42093;
        double r42095 = cbrt(r42094);
        double r42096 = r42095 * r42095;
        double r42097 = log(r42096);
        double r42098 = log(r42095);
        double r42099 = z;
        double r42100 = log(r42099);
        double r42101 = r42098 + r42100;
        double r42102 = r42097 + r42101;
        double r42103 = t;
        double r42104 = r42102 - r42103;
        double r42105 = a;
        double r42106 = 0.5;
        double r42107 = r42105 - r42106;
        double r42108 = log(r42103);
        double r42109 = r42107 * r42108;
        double r42110 = r42104 + r42109;
        return r42110;
}

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 r42111, r42112, r42113, r42114, r42115, r42116, r42117, r42118, r42119, r42120, r42121, r42122, r42123, r42124, r42125;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42111);
        mpfr_init(r42112);
        mpfr_init(r42113);
        mpfr_init(r42114);
        mpfr_init(r42115);
        mpfr_init(r42116);
        mpfr_init(r42117);
        mpfr_init(r42118);
        mpfr_init(r42119);
        mpfr_init(r42120);
        mpfr_init_set_str(r42121, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42122);
        mpfr_init(r42123);
        mpfr_init(r42124);
        mpfr_init(r42125);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r42111, x, MPFR_RNDN);
        mpfr_set_d(r42112, y, MPFR_RNDN);
        mpfr_add(r42113, r42111, r42112, MPFR_RNDN);
        mpfr_log(r42114, r42113, MPFR_RNDN);
        mpfr_set_d(r42115, z, MPFR_RNDN);
        mpfr_log(r42116, r42115, MPFR_RNDN);
        mpfr_add(r42117, r42114, r42116, MPFR_RNDN);
        mpfr_set_d(r42118, t, MPFR_RNDN);
        mpfr_sub(r42119, r42117, r42118, MPFR_RNDN);
        mpfr_set_d(r42120, a, MPFR_RNDN);
        ;
        mpfr_sub(r42122, r42120, r42121, MPFR_RNDN);
        mpfr_log(r42123, r42118, MPFR_RNDN);
        mpfr_mul(r42124, r42122, r42123, MPFR_RNDN);
        mpfr_add(r42125, r42119, r42124, MPFR_RNDN);
        return mpfr_get_d(r42125, MPFR_RNDN);
}

static mpfr_t r42126, r42127, r42128, r42129, r42130, r42131, r42132, r42133, r42134, r42135, r42136, r42137, r42138, r42139, r42140, r42141, r42142, r42143, r42144;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42126);
        mpfr_init(r42127);
        mpfr_init(r42128);
        mpfr_init(r42129);
        mpfr_init(r42130);
        mpfr_init(r42131);
        mpfr_init(r42132);
        mpfr_init(r42133);
        mpfr_init(r42134);
        mpfr_init(r42135);
        mpfr_init(r42136);
        mpfr_init(r42137);
        mpfr_init(r42138);
        mpfr_init(r42139);
        mpfr_init_set_str(r42140, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42141);
        mpfr_init(r42142);
        mpfr_init(r42143);
        mpfr_init(r42144);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r42126, x, MPFR_RNDN);
        mpfr_set_d(r42127, y, MPFR_RNDN);
        mpfr_add(r42128, r42126, r42127, MPFR_RNDN);
        mpfr_cbrt(r42129, r42128, MPFR_RNDN);
        mpfr_mul(r42130, r42129, r42129, MPFR_RNDN);
        mpfr_log(r42131, r42130, MPFR_RNDN);
        mpfr_log(r42132, r42129, MPFR_RNDN);
        mpfr_set_d(r42133, z, MPFR_RNDN);
        mpfr_log(r42134, r42133, MPFR_RNDN);
        mpfr_add(r42135, r42132, r42134, MPFR_RNDN);
        mpfr_add(r42136, r42131, r42135, MPFR_RNDN);
        mpfr_set_d(r42137, t, MPFR_RNDN);
        mpfr_sub(r42138, r42136, r42137, MPFR_RNDN);
        mpfr_set_d(r42139, a, MPFR_RNDN);
        ;
        mpfr_sub(r42141, r42139, r42140, MPFR_RNDN);
        mpfr_log(r42142, r42137, MPFR_RNDN);
        mpfr_mul(r42143, r42141, r42142, MPFR_RNDN);
        mpfr_add(r42144, r42138, r42143, MPFR_RNDN);
        return mpfr_get_d(r42144, MPFR_RNDN);
}

static mpfr_t r42145, r42146, r42147, r42148, r42149, r42150, r42151, r42152, r42153, r42154, r42155, r42156, r42157, r42158, r42159, r42160, r42161, r42162, r42163;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42145);
        mpfr_init(r42146);
        mpfr_init(r42147);
        mpfr_init(r42148);
        mpfr_init(r42149);
        mpfr_init(r42150);
        mpfr_init(r42151);
        mpfr_init(r42152);
        mpfr_init(r42153);
        mpfr_init(r42154);
        mpfr_init(r42155);
        mpfr_init(r42156);
        mpfr_init(r42157);
        mpfr_init(r42158);
        mpfr_init_set_str(r42159, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42160);
        mpfr_init(r42161);
        mpfr_init(r42162);
        mpfr_init(r42163);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r42145, x, MPFR_RNDN);
        mpfr_set_d(r42146, y, MPFR_RNDN);
        mpfr_add(r42147, r42145, r42146, MPFR_RNDN);
        mpfr_cbrt(r42148, r42147, MPFR_RNDN);
        mpfr_mul(r42149, r42148, r42148, MPFR_RNDN);
        mpfr_log(r42150, r42149, MPFR_RNDN);
        mpfr_log(r42151, r42148, MPFR_RNDN);
        mpfr_set_d(r42152, z, MPFR_RNDN);
        mpfr_log(r42153, r42152, MPFR_RNDN);
        mpfr_add(r42154, r42151, r42153, MPFR_RNDN);
        mpfr_add(r42155, r42150, r42154, MPFR_RNDN);
        mpfr_set_d(r42156, t, MPFR_RNDN);
        mpfr_sub(r42157, r42155, r42156, MPFR_RNDN);
        mpfr_set_d(r42158, a, MPFR_RNDN);
        ;
        mpfr_sub(r42160, r42158, r42159, MPFR_RNDN);
        mpfr_log(r42161, r42156, MPFR_RNDN);
        mpfr_mul(r42162, r42160, r42161, MPFR_RNDN);
        mpfr_add(r42163, r42157, r42162, MPFR_RNDN);
        return mpfr_get_d(r42163, MPFR_RNDN);
}

