#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 r27287 = x;
        float r27288 = y;
        float r27289 = r27287 + r27288;
        float r27290 = log(r27289);
        float r27291 = z;
        float r27292 = log(r27291);
        float r27293 = r27290 + r27292;
        float r27294 = t;
        float r27295 = r27293 - r27294;
        float r27296 = a;
        float r27297 = 0.5;
        float r27298 = r27296 - r27297;
        float r27299 = log(r27294);
        float r27300 = r27298 * r27299;
        float r27301 = r27295 + r27300;
        return r27301;
}

double f_id(double x, double y, double z, double t, double a) {
        double r27302 = x;
        double r27303 = y;
        double r27304 = r27302 + r27303;
        double r27305 = log(r27304);
        double r27306 = z;
        double r27307 = log(r27306);
        double r27308 = r27305 + r27307;
        double r27309 = t;
        double r27310 = r27308 - r27309;
        double r27311 = a;
        double r27312 = 0.5;
        double r27313 = r27311 - r27312;
        double r27314 = log(r27309);
        double r27315 = r27313 * r27314;
        double r27316 = r27310 + r27315;
        return r27316;
}


double f_of(float x, float y, float z, float t, float a) {
        float r27317 = x;
        float r27318 = y;
        float r27319 = r27317 + r27318;
        float r27320 = cbrt(r27319);
        float r27321 = r27320 * r27320;
        float r27322 = log(r27321);
        float r27323 = log(r27320);
        float r27324 = z;
        float r27325 = log(r27324);
        float r27326 = r27323 + r27325;
        float r27327 = r27322 + r27326;
        float r27328 = t;
        float r27329 = r27327 - r27328;
        float r27330 = a;
        float r27331 = 0.5;
        float r27332 = r27330 - r27331;
        float r27333 = log(r27328);
        float r27334 = r27332 * r27333;
        float r27335 = r27329 + r27334;
        return r27335;
}

double f_od(double x, double y, double z, double t, double a) {
        double r27336 = x;
        double r27337 = y;
        double r27338 = r27336 + r27337;
        double r27339 = cbrt(r27338);
        double r27340 = r27339 * r27339;
        double r27341 = log(r27340);
        double r27342 = log(r27339);
        double r27343 = z;
        double r27344 = log(r27343);
        double r27345 = r27342 + r27344;
        double r27346 = r27341 + r27345;
        double r27347 = t;
        double r27348 = r27346 - r27347;
        double r27349 = a;
        double r27350 = 0.5;
        double r27351 = r27349 - r27350;
        double r27352 = log(r27347);
        double r27353 = r27351 * r27352;
        double r27354 = r27348 + r27353;
        return r27354;
}

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 r27355, r27356, r27357, r27358, r27359, r27360, r27361, r27362, r27363, r27364, r27365, r27366, r27367, r27368, r27369;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r27355);
        mpfr_init(r27356);
        mpfr_init(r27357);
        mpfr_init(r27358);
        mpfr_init(r27359);
        mpfr_init(r27360);
        mpfr_init(r27361);
        mpfr_init(r27362);
        mpfr_init(r27363);
        mpfr_init(r27364);
        mpfr_init_set_str(r27365, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27366);
        mpfr_init(r27367);
        mpfr_init(r27368);
        mpfr_init(r27369);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r27355, x, MPFR_RNDN);
        mpfr_set_d(r27356, y, MPFR_RNDN);
        mpfr_add(r27357, r27355, r27356, MPFR_RNDN);
        mpfr_log(r27358, r27357, MPFR_RNDN);
        mpfr_set_d(r27359, z, MPFR_RNDN);
        mpfr_log(r27360, r27359, MPFR_RNDN);
        mpfr_add(r27361, r27358, r27360, MPFR_RNDN);
        mpfr_set_d(r27362, t, MPFR_RNDN);
        mpfr_sub(r27363, r27361, r27362, MPFR_RNDN);
        mpfr_set_d(r27364, a, MPFR_RNDN);
        ;
        mpfr_sub(r27366, r27364, r27365, MPFR_RNDN);
        mpfr_log(r27367, r27362, MPFR_RNDN);
        mpfr_mul(r27368, r27366, r27367, MPFR_RNDN);
        mpfr_add(r27369, r27363, r27368, MPFR_RNDN);
        return mpfr_get_d(r27369, MPFR_RNDN);
}

static mpfr_t r27370, r27371, r27372, r27373, r27374, r27375, r27376, r27377, r27378, r27379, r27380, r27381, r27382, r27383, r27384, r27385, r27386, r27387, r27388;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r27370);
        mpfr_init(r27371);
        mpfr_init(r27372);
        mpfr_init(r27373);
        mpfr_init(r27374);
        mpfr_init(r27375);
        mpfr_init(r27376);
        mpfr_init(r27377);
        mpfr_init(r27378);
        mpfr_init(r27379);
        mpfr_init(r27380);
        mpfr_init(r27381);
        mpfr_init(r27382);
        mpfr_init(r27383);
        mpfr_init_set_str(r27384, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27385);
        mpfr_init(r27386);
        mpfr_init(r27387);
        mpfr_init(r27388);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r27370, x, MPFR_RNDN);
        mpfr_set_d(r27371, y, MPFR_RNDN);
        mpfr_add(r27372, r27370, r27371, MPFR_RNDN);
        mpfr_cbrt(r27373, r27372, MPFR_RNDN);
        mpfr_mul(r27374, r27373, r27373, MPFR_RNDN);
        mpfr_log(r27375, r27374, MPFR_RNDN);
        mpfr_log(r27376, r27373, MPFR_RNDN);
        mpfr_set_d(r27377, z, MPFR_RNDN);
        mpfr_log(r27378, r27377, MPFR_RNDN);
        mpfr_add(r27379, r27376, r27378, MPFR_RNDN);
        mpfr_add(r27380, r27375, r27379, MPFR_RNDN);
        mpfr_set_d(r27381, t, MPFR_RNDN);
        mpfr_sub(r27382, r27380, r27381, MPFR_RNDN);
        mpfr_set_d(r27383, a, MPFR_RNDN);
        ;
        mpfr_sub(r27385, r27383, r27384, MPFR_RNDN);
        mpfr_log(r27386, r27381, MPFR_RNDN);
        mpfr_mul(r27387, r27385, r27386, MPFR_RNDN);
        mpfr_add(r27388, r27382, r27387, MPFR_RNDN);
        return mpfr_get_d(r27388, MPFR_RNDN);
}

static mpfr_t r27389, r27390, r27391, r27392, r27393, r27394, r27395, r27396, r27397, r27398, r27399, r27400, r27401, r27402, r27403, r27404, r27405, r27406, r27407;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r27389);
        mpfr_init(r27390);
        mpfr_init(r27391);
        mpfr_init(r27392);
        mpfr_init(r27393);
        mpfr_init(r27394);
        mpfr_init(r27395);
        mpfr_init(r27396);
        mpfr_init(r27397);
        mpfr_init(r27398);
        mpfr_init(r27399);
        mpfr_init(r27400);
        mpfr_init(r27401);
        mpfr_init(r27402);
        mpfr_init_set_str(r27403, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27404);
        mpfr_init(r27405);
        mpfr_init(r27406);
        mpfr_init(r27407);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r27389, x, MPFR_RNDN);
        mpfr_set_d(r27390, y, MPFR_RNDN);
        mpfr_add(r27391, r27389, r27390, MPFR_RNDN);
        mpfr_cbrt(r27392, r27391, MPFR_RNDN);
        mpfr_mul(r27393, r27392, r27392, MPFR_RNDN);
        mpfr_log(r27394, r27393, MPFR_RNDN);
        mpfr_log(r27395, r27392, MPFR_RNDN);
        mpfr_set_d(r27396, z, MPFR_RNDN);
        mpfr_log(r27397, r27396, MPFR_RNDN);
        mpfr_add(r27398, r27395, r27397, MPFR_RNDN);
        mpfr_add(r27399, r27394, r27398, MPFR_RNDN);
        mpfr_set_d(r27400, t, MPFR_RNDN);
        mpfr_sub(r27401, r27399, r27400, MPFR_RNDN);
        mpfr_set_d(r27402, a, MPFR_RNDN);
        ;
        mpfr_sub(r27404, r27402, r27403, MPFR_RNDN);
        mpfr_log(r27405, r27400, MPFR_RNDN);
        mpfr_mul(r27406, r27404, r27405, MPFR_RNDN);
        mpfr_add(r27407, r27401, r27406, MPFR_RNDN);
        return mpfr_get_d(r27407, MPFR_RNDN);
}

