#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 r20738 = x;
        float r20739 = y;
        float r20740 = r20738 + r20739;
        float r20741 = log(r20740);
        float r20742 = z;
        float r20743 = log(r20742);
        float r20744 = r20741 + r20743;
        float r20745 = t;
        float r20746 = r20744 - r20745;
        float r20747 = a;
        float r20748 = 0.5;
        float r20749 = r20747 - r20748;
        float r20750 = log(r20745);
        float r20751 = r20749 * r20750;
        float r20752 = r20746 + r20751;
        return r20752;
}

double f_id(double x, double y, double z, double t, double a) {
        double r20753 = x;
        double r20754 = y;
        double r20755 = r20753 + r20754;
        double r20756 = log(r20755);
        double r20757 = z;
        double r20758 = log(r20757);
        double r20759 = r20756 + r20758;
        double r20760 = t;
        double r20761 = r20759 - r20760;
        double r20762 = a;
        double r20763 = 0.5;
        double r20764 = r20762 - r20763;
        double r20765 = log(r20760);
        double r20766 = r20764 * r20765;
        double r20767 = r20761 + r20766;
        return r20767;
}


double f_of(float x, float y, float z, float t, float a) {
        float r20768 = z;
        float r20769 = log(r20768);
        float r20770 = y;
        float r20771 = x;
        float r20772 = r20770 + r20771;
        float r20773 = log(r20772);
        float r20774 = r20769 + r20773;
        float r20775 = 3;
        float r20776 = pow(r20774, r20775);
        float r20777 = cbrt(r20776);
        float r20778 = t;
        float r20779 = r20777 - r20778;
        float r20780 = a;
        float r20781 = 0.5;
        float r20782 = r20780 - r20781;
        float r20783 = log(r20778);
        float r20784 = r20782 * r20783;
        float r20785 = r20779 + r20784;
        return r20785;
}

double f_od(double x, double y, double z, double t, double a) {
        double r20786 = z;
        double r20787 = log(r20786);
        double r20788 = y;
        double r20789 = x;
        double r20790 = r20788 + r20789;
        double r20791 = log(r20790);
        double r20792 = r20787 + r20791;
        double r20793 = 3;
        double r20794 = pow(r20792, r20793);
        double r20795 = cbrt(r20794);
        double r20796 = t;
        double r20797 = r20795 - r20796;
        double r20798 = a;
        double r20799 = 0.5;
        double r20800 = r20798 - r20799;
        double r20801 = log(r20796);
        double r20802 = r20800 * r20801;
        double r20803 = r20797 + r20802;
        return r20803;
}

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 r20804, r20805, r20806, r20807, r20808, r20809, r20810, r20811, r20812, r20813, r20814, r20815, r20816, r20817, r20818;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r20804);
        mpfr_init(r20805);
        mpfr_init(r20806);
        mpfr_init(r20807);
        mpfr_init(r20808);
        mpfr_init(r20809);
        mpfr_init(r20810);
        mpfr_init(r20811);
        mpfr_init(r20812);
        mpfr_init(r20813);
        mpfr_init_set_str(r20814, "0.5", 10, MPFR_RNDN);
        mpfr_init(r20815);
        mpfr_init(r20816);
        mpfr_init(r20817);
        mpfr_init(r20818);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r20804, x, MPFR_RNDN);
        mpfr_set_d(r20805, y, MPFR_RNDN);
        mpfr_add(r20806, r20804, r20805, MPFR_RNDN);
        mpfr_log(r20807, r20806, MPFR_RNDN);
        mpfr_set_d(r20808, z, MPFR_RNDN);
        mpfr_log(r20809, r20808, MPFR_RNDN);
        mpfr_add(r20810, r20807, r20809, MPFR_RNDN);
        mpfr_set_d(r20811, t, MPFR_RNDN);
        mpfr_sub(r20812, r20810, r20811, MPFR_RNDN);
        mpfr_set_d(r20813, a, MPFR_RNDN);
        ;
        mpfr_sub(r20815, r20813, r20814, MPFR_RNDN);
        mpfr_log(r20816, r20811, MPFR_RNDN);
        mpfr_mul(r20817, r20815, r20816, MPFR_RNDN);
        mpfr_add(r20818, r20812, r20817, MPFR_RNDN);
        return mpfr_get_d(r20818, MPFR_RNDN);
}

static mpfr_t r20819, r20820, r20821, r20822, r20823, r20824, r20825, r20826, r20827, r20828, r20829, r20830, r20831, r20832, r20833, r20834, r20835, r20836;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r20819);
        mpfr_init(r20820);
        mpfr_init(r20821);
        mpfr_init(r20822);
        mpfr_init(r20823);
        mpfr_init(r20824);
        mpfr_init(r20825);
        mpfr_init_set_str(r20826, "3", 10, MPFR_RNDN);
        mpfr_init(r20827);
        mpfr_init(r20828);
        mpfr_init(r20829);
        mpfr_init(r20830);
        mpfr_init(r20831);
        mpfr_init_set_str(r20832, "0.5", 10, MPFR_RNDN);
        mpfr_init(r20833);
        mpfr_init(r20834);
        mpfr_init(r20835);
        mpfr_init(r20836);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r20819, z, MPFR_RNDN);
        mpfr_log(r20820, r20819, MPFR_RNDN);
        mpfr_set_d(r20821, y, MPFR_RNDN);
        mpfr_set_d(r20822, x, MPFR_RNDN);
        mpfr_add(r20823, r20821, r20822, MPFR_RNDN);
        mpfr_log(r20824, r20823, MPFR_RNDN);
        mpfr_add(r20825, r20820, r20824, MPFR_RNDN);
        ;
        mpfr_pow(r20827, r20825, r20826, MPFR_RNDN);
        mpfr_cbrt(r20828, r20827, MPFR_RNDN);
        mpfr_set_d(r20829, t, MPFR_RNDN);
        mpfr_sub(r20830, r20828, r20829, MPFR_RNDN);
        mpfr_set_d(r20831, a, MPFR_RNDN);
        ;
        mpfr_sub(r20833, r20831, r20832, MPFR_RNDN);
        mpfr_log(r20834, r20829, MPFR_RNDN);
        mpfr_mul(r20835, r20833, r20834, MPFR_RNDN);
        mpfr_add(r20836, r20830, r20835, MPFR_RNDN);
        return mpfr_get_d(r20836, MPFR_RNDN);
}

static mpfr_t r20837, r20838, r20839, r20840, r20841, r20842, r20843, r20844, r20845, r20846, r20847, r20848, r20849, r20850, r20851, r20852, r20853, r20854;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r20837);
        mpfr_init(r20838);
        mpfr_init(r20839);
        mpfr_init(r20840);
        mpfr_init(r20841);
        mpfr_init(r20842);
        mpfr_init(r20843);
        mpfr_init_set_str(r20844, "3", 10, MPFR_RNDN);
        mpfr_init(r20845);
        mpfr_init(r20846);
        mpfr_init(r20847);
        mpfr_init(r20848);
        mpfr_init(r20849);
        mpfr_init_set_str(r20850, "0.5", 10, MPFR_RNDN);
        mpfr_init(r20851);
        mpfr_init(r20852);
        mpfr_init(r20853);
        mpfr_init(r20854);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r20837, z, MPFR_RNDN);
        mpfr_log(r20838, r20837, MPFR_RNDN);
        mpfr_set_d(r20839, y, MPFR_RNDN);
        mpfr_set_d(r20840, x, MPFR_RNDN);
        mpfr_add(r20841, r20839, r20840, MPFR_RNDN);
        mpfr_log(r20842, r20841, MPFR_RNDN);
        mpfr_add(r20843, r20838, r20842, MPFR_RNDN);
        ;
        mpfr_pow(r20845, r20843, r20844, MPFR_RNDN);
        mpfr_cbrt(r20846, r20845, MPFR_RNDN);
        mpfr_set_d(r20847, t, MPFR_RNDN);
        mpfr_sub(r20848, r20846, r20847, MPFR_RNDN);
        mpfr_set_d(r20849, a, MPFR_RNDN);
        ;
        mpfr_sub(r20851, r20849, r20850, MPFR_RNDN);
        mpfr_log(r20852, r20847, MPFR_RNDN);
        mpfr_mul(r20853, r20851, r20852, MPFR_RNDN);
        mpfr_add(r20854, r20848, r20853, MPFR_RNDN);
        return mpfr_get_d(r20854, MPFR_RNDN);
}

