#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 r8576 = x;
        float r8577 = y;
        float r8578 = r8576 + r8577;
        float r8579 = log(r8578);
        float r8580 = z;
        float r8581 = log(r8580);
        float r8582 = r8579 + r8581;
        float r8583 = t;
        float r8584 = r8582 - r8583;
        float r8585 = a;
        float r8586 = 0.5f;
        float r8587 = r8585 - r8586;
        float r8588 = log(r8583);
        float r8589 = r8587 * r8588;
        float r8590 = r8584 + r8589;
        return r8590;
}

double f_id(double x, double y, double z, double t, double a) {
        double r8591 = x;
        double r8592 = y;
        double r8593 = r8591 + r8592;
        double r8594 = log(r8593);
        double r8595 = z;
        double r8596 = log(r8595);
        double r8597 = r8594 + r8596;
        double r8598 = t;
        double r8599 = r8597 - r8598;
        double r8600 = a;
        double r8601 = 0.5;
        double r8602 = r8600 - r8601;
        double r8603 = log(r8598);
        double r8604 = r8602 * r8603;
        double r8605 = r8599 + r8604;
        return r8605;
}


double f_of(float x, float y, float z, float t, float a) {
        float r8606 = x;
        float r8607 = y;
        float r8608 = r8606 + r8607;
        float r8609 = log(r8608);
        float r8610 = z;
        float r8611 = log(r8610);
        float r8612 = t;
        float r8613 = r8611 - r8612;
        float r8614 = a;
        float r8615 = 0.5f;
        float r8616 = r8614 - r8615;
        float r8617 = log(r8612);
        float r8618 = r8616 * r8617;
        float r8619 = r8613 + r8618;
        float r8620 = r8609 + r8619;
        return r8620;
}

double f_od(double x, double y, double z, double t, double a) {
        double r8621 = x;
        double r8622 = y;
        double r8623 = r8621 + r8622;
        double r8624 = log(r8623);
        double r8625 = z;
        double r8626 = log(r8625);
        double r8627 = t;
        double r8628 = r8626 - r8627;
        double r8629 = a;
        double r8630 = 0.5;
        double r8631 = r8629 - r8630;
        double r8632 = log(r8627);
        double r8633 = r8631 * r8632;
        double r8634 = r8628 + r8633;
        double r8635 = r8624 + r8634;
        return r8635;
}

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 r8636, r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645, r8646, r8647, r8648, r8649, r8650;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8636);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init(r8642);
        mpfr_init(r8643);
        mpfr_init(r8644);
        mpfr_init(r8645);
        mpfr_init_set_str(r8646, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8647);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r8636, x, MPFR_RNDN);
        mpfr_set_d(r8637, y, MPFR_RNDN);
        mpfr_add(r8638, r8636, r8637, MPFR_RNDN);
        mpfr_log(r8639, r8638, MPFR_RNDN);
        mpfr_set_d(r8640, z, MPFR_RNDN);
        mpfr_log(r8641, r8640, MPFR_RNDN);
        mpfr_add(r8642, r8639, r8641, MPFR_RNDN);
        mpfr_set_d(r8643, t, MPFR_RNDN);
        mpfr_sub(r8644, r8642, r8643, MPFR_RNDN);
        mpfr_set_d(r8645, a, MPFR_RNDN);
        ;
        mpfr_sub(r8647, r8645, r8646, MPFR_RNDN);
        mpfr_log(r8648, r8643, MPFR_RNDN);
        mpfr_mul(r8649, r8647, r8648, MPFR_RNDN);
        mpfr_add(r8650, r8644, r8649, MPFR_RNDN);
        return mpfr_get_d(r8650, MPFR_RNDN);
}

static mpfr_t r8651, r8652, r8653, r8654, r8655, r8656, r8657, r8658, r8659, r8660, r8661, r8662, r8663, r8664, r8665;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
        mpfr_init(r8657);
        mpfr_init(r8658);
        mpfr_init(r8659);
        mpfr_init_set_str(r8660, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8661);
        mpfr_init(r8662);
        mpfr_init(r8663);
        mpfr_init(r8664);
        mpfr_init(r8665);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r8651, x, MPFR_RNDN);
        mpfr_set_d(r8652, y, MPFR_RNDN);
        mpfr_add(r8653, r8651, r8652, MPFR_RNDN);
        mpfr_log(r8654, r8653, MPFR_RNDN);
        mpfr_set_d(r8655, z, MPFR_RNDN);
        mpfr_log(r8656, r8655, MPFR_RNDN);
        mpfr_set_d(r8657, t, MPFR_RNDN);
        mpfr_sub(r8658, r8656, r8657, MPFR_RNDN);
        mpfr_set_d(r8659, a, MPFR_RNDN);
        ;
        mpfr_sub(r8661, r8659, r8660, MPFR_RNDN);
        mpfr_log(r8662, r8657, MPFR_RNDN);
        mpfr_mul(r8663, r8661, r8662, MPFR_RNDN);
        mpfr_add(r8664, r8658, r8663, MPFR_RNDN);
        mpfr_add(r8665, r8654, r8664, MPFR_RNDN);
        return mpfr_get_d(r8665, MPFR_RNDN);
}

static mpfr_t r8666, r8667, r8668, r8669, r8670, r8671, r8672, r8673, r8674, r8675, r8676, r8677, r8678, r8679, r8680;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8666);
        mpfr_init(r8667);
        mpfr_init(r8668);
        mpfr_init(r8669);
        mpfr_init(r8670);
        mpfr_init(r8671);
        mpfr_init(r8672);
        mpfr_init(r8673);
        mpfr_init(r8674);
        mpfr_init_set_str(r8675, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8676);
        mpfr_init(r8677);
        mpfr_init(r8678);
        mpfr_init(r8679);
        mpfr_init(r8680);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r8666, x, MPFR_RNDN);
        mpfr_set_d(r8667, y, MPFR_RNDN);
        mpfr_add(r8668, r8666, r8667, MPFR_RNDN);
        mpfr_log(r8669, r8668, MPFR_RNDN);
        mpfr_set_d(r8670, z, MPFR_RNDN);
        mpfr_log(r8671, r8670, MPFR_RNDN);
        mpfr_set_d(r8672, t, MPFR_RNDN);
        mpfr_sub(r8673, r8671, r8672, MPFR_RNDN);
        mpfr_set_d(r8674, a, MPFR_RNDN);
        ;
        mpfr_sub(r8676, r8674, r8675, MPFR_RNDN);
        mpfr_log(r8677, r8672, MPFR_RNDN);
        mpfr_mul(r8678, r8676, r8677, MPFR_RNDN);
        mpfr_add(r8679, r8673, r8678, MPFR_RNDN);
        mpfr_add(r8680, r8669, r8679, MPFR_RNDN);
        return mpfr_get_d(r8680, MPFR_RNDN);
}

