#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 r8559 = x;
        float r8560 = y;
        float r8561 = r8559 + r8560;
        float r8562 = log(r8561);
        float r8563 = z;
        float r8564 = log(r8563);
        float r8565 = r8562 + r8564;
        float r8566 = t;
        float r8567 = r8565 - r8566;
        float r8568 = a;
        float r8569 = 0.5f;
        float r8570 = r8568 - r8569;
        float r8571 = log(r8566);
        float r8572 = r8570 * r8571;
        float r8573 = r8567 + r8572;
        return r8573;
}

double f_id(double x, double y, double z, double t, double a) {
        double r8574 = x;
        double r8575 = y;
        double r8576 = r8574 + r8575;
        double r8577 = log(r8576);
        double r8578 = z;
        double r8579 = log(r8578);
        double r8580 = r8577 + r8579;
        double r8581 = t;
        double r8582 = r8580 - r8581;
        double r8583 = a;
        double r8584 = 0.5;
        double r8585 = r8583 - r8584;
        double r8586 = log(r8581);
        double r8587 = r8585 * r8586;
        double r8588 = r8582 + r8587;
        return r8588;
}


double f_of(float x, float y, float z, float t, float a) {
        float r8589 = x;
        float r8590 = y;
        float r8591 = r8589 + r8590;
        float r8592 = log(r8591);
        float r8593 = a;
        float r8594 = 0.5f;
        float r8595 = r8593 - r8594;
        float r8596 = t;
        float r8597 = log(r8596);
        float r8598 = z;
        float r8599 = log(r8598);
        float r8600 = fma(r8595, r8597, r8599);
        float r8601 = r8600 - r8596;
        float r8602 = r8592 + r8601;
        return r8602;
}

double f_od(double x, double y, double z, double t, double a) {
        double r8603 = x;
        double r8604 = y;
        double r8605 = r8603 + r8604;
        double r8606 = log(r8605);
        double r8607 = a;
        double r8608 = 0.5;
        double r8609 = r8607 - r8608;
        double r8610 = t;
        double r8611 = log(r8610);
        double r8612 = z;
        double r8613 = log(r8612);
        double r8614 = fma(r8609, r8611, r8613);
        double r8615 = r8614 - r8610;
        double r8616 = r8606 + r8615;
        return r8616;
}

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 r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626, r8627, r8628, r8629, r8630, r8631;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8617);
        mpfr_init(r8618);
        mpfr_init(r8619);
        mpfr_init(r8620);
        mpfr_init(r8621);
        mpfr_init(r8622);
        mpfr_init(r8623);
        mpfr_init(r8624);
        mpfr_init(r8625);
        mpfr_init(r8626);
        mpfr_init_set_str(r8627, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8628);
        mpfr_init(r8629);
        mpfr_init(r8630);
        mpfr_init(r8631);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r8617, x, MPFR_RNDN);
        mpfr_set_d(r8618, y, MPFR_RNDN);
        mpfr_add(r8619, r8617, r8618, MPFR_RNDN);
        mpfr_log(r8620, r8619, MPFR_RNDN);
        mpfr_set_d(r8621, z, MPFR_RNDN);
        mpfr_log(r8622, r8621, MPFR_RNDN);
        mpfr_add(r8623, r8620, r8622, MPFR_RNDN);
        mpfr_set_d(r8624, t, MPFR_RNDN);
        mpfr_sub(r8625, r8623, r8624, MPFR_RNDN);
        mpfr_set_d(r8626, a, MPFR_RNDN);
        ;
        mpfr_sub(r8628, r8626, r8627, MPFR_RNDN);
        mpfr_log(r8629, r8624, MPFR_RNDN);
        mpfr_mul(r8630, r8628, r8629, MPFR_RNDN);
        mpfr_add(r8631, r8625, r8630, MPFR_RNDN);
        return mpfr_get_d(r8631, MPFR_RNDN);
}

static mpfr_t r8632, r8633, r8634, r8635, r8636, r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8632);
        mpfr_init(r8633);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init(r8636);
        mpfr_init_set_str(r8637, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init(r8642);
        mpfr_init(r8643);
        mpfr_init(r8644);
        mpfr_init(r8645);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r8632, x, MPFR_RNDN);
        mpfr_set_d(r8633, y, MPFR_RNDN);
        mpfr_add(r8634, r8632, r8633, MPFR_RNDN);
        mpfr_log(r8635, r8634, MPFR_RNDN);
        mpfr_set_d(r8636, a, MPFR_RNDN);
        ;
        mpfr_sub(r8638, r8636, r8637, MPFR_RNDN);
        mpfr_set_d(r8639, t, MPFR_RNDN);
        mpfr_log(r8640, r8639, MPFR_RNDN);
        mpfr_set_d(r8641, z, MPFR_RNDN);
        mpfr_log(r8642, r8641, MPFR_RNDN);
        mpfr_fma(r8643, r8638, r8640, r8642, MPFR_RNDN);
        mpfr_sub(r8644, r8643, r8639, MPFR_RNDN);
        mpfr_add(r8645, r8635, r8644, MPFR_RNDN);
        return mpfr_get_d(r8645, MPFR_RNDN);
}

static mpfr_t r8646, r8647, r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655, r8656, r8657, r8658, r8659;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8646);
        mpfr_init(r8647);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init_set_str(r8651, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
        mpfr_init(r8657);
        mpfr_init(r8658);
        mpfr_init(r8659);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r8646, x, MPFR_RNDN);
        mpfr_set_d(r8647, y, MPFR_RNDN);
        mpfr_add(r8648, r8646, r8647, MPFR_RNDN);
        mpfr_log(r8649, r8648, MPFR_RNDN);
        mpfr_set_d(r8650, a, MPFR_RNDN);
        ;
        mpfr_sub(r8652, r8650, r8651, MPFR_RNDN);
        mpfr_set_d(r8653, t, MPFR_RNDN);
        mpfr_log(r8654, r8653, MPFR_RNDN);
        mpfr_set_d(r8655, z, MPFR_RNDN);
        mpfr_log(r8656, r8655, MPFR_RNDN);
        mpfr_fma(r8657, r8652, r8654, r8656, MPFR_RNDN);
        mpfr_sub(r8658, r8657, r8653, MPFR_RNDN);
        mpfr_add(r8659, r8649, r8658, MPFR_RNDN);
        return mpfr_get_d(r8659, MPFR_RNDN);
}

