#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 r41589 = x;
        float r41590 = y;
        float r41591 = r41589 + r41590;
        float r41592 = log(r41591);
        float r41593 = z;
        float r41594 = log(r41593);
        float r41595 = r41592 + r41594;
        float r41596 = t;
        float r41597 = r41595 - r41596;
        float r41598 = a;
        float r41599 = 0.5;
        float r41600 = r41598 - r41599;
        float r41601 = log(r41596);
        float r41602 = r41600 * r41601;
        float r41603 = r41597 + r41602;
        return r41603;
}

double f_id(double x, double y, double z, double t, double a) {
        double r41604 = x;
        double r41605 = y;
        double r41606 = r41604 + r41605;
        double r41607 = log(r41606);
        double r41608 = z;
        double r41609 = log(r41608);
        double r41610 = r41607 + r41609;
        double r41611 = t;
        double r41612 = r41610 - r41611;
        double r41613 = a;
        double r41614 = 0.5;
        double r41615 = r41613 - r41614;
        double r41616 = log(r41611);
        double r41617 = r41615 * r41616;
        double r41618 = r41612 + r41617;
        return r41618;
}


double f_of(float x, float y, float z, float t, float a) {
        float r41619 = x;
        float r41620 = y;
        float r41621 = r41619 + r41620;
        float r41622 = cbrt(r41621);
        float r41623 = r41622 * r41622;
        float r41624 = log(r41623);
        float r41625 = log(r41622);
        float r41626 = z;
        float r41627 = log(r41626);
        float r41628 = r41625 + r41627;
        float r41629 = r41624 + r41628;
        float r41630 = t;
        float r41631 = r41629 - r41630;
        float r41632 = a;
        float r41633 = 0.5;
        float r41634 = r41632 - r41633;
        float r41635 = log(r41630);
        float r41636 = r41634 * r41635;
        float r41637 = r41631 + r41636;
        return r41637;
}

double f_od(double x, double y, double z, double t, double a) {
        double r41638 = x;
        double r41639 = y;
        double r41640 = r41638 + r41639;
        double r41641 = cbrt(r41640);
        double r41642 = r41641 * r41641;
        double r41643 = log(r41642);
        double r41644 = log(r41641);
        double r41645 = z;
        double r41646 = log(r41645);
        double r41647 = r41644 + r41646;
        double r41648 = r41643 + r41647;
        double r41649 = t;
        double r41650 = r41648 - r41649;
        double r41651 = a;
        double r41652 = 0.5;
        double r41653 = r41651 - r41652;
        double r41654 = log(r41649);
        double r41655 = r41653 * r41654;
        double r41656 = r41650 + r41655;
        return r41656;
}

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 r41657, r41658, r41659, r41660, r41661, r41662, r41663, r41664, r41665, r41666, r41667, r41668, r41669, r41670, r41671;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41657);
        mpfr_init(r41658);
        mpfr_init(r41659);
        mpfr_init(r41660);
        mpfr_init(r41661);
        mpfr_init(r41662);
        mpfr_init(r41663);
        mpfr_init(r41664);
        mpfr_init(r41665);
        mpfr_init(r41666);
        mpfr_init_set_str(r41667, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41668);
        mpfr_init(r41669);
        mpfr_init(r41670);
        mpfr_init(r41671);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r41657, x, MPFR_RNDN);
        mpfr_set_d(r41658, y, MPFR_RNDN);
        mpfr_add(r41659, r41657, r41658, MPFR_RNDN);
        mpfr_log(r41660, r41659, MPFR_RNDN);
        mpfr_set_d(r41661, z, MPFR_RNDN);
        mpfr_log(r41662, r41661, MPFR_RNDN);
        mpfr_add(r41663, r41660, r41662, MPFR_RNDN);
        mpfr_set_d(r41664, t, MPFR_RNDN);
        mpfr_sub(r41665, r41663, r41664, MPFR_RNDN);
        mpfr_set_d(r41666, a, MPFR_RNDN);
        ;
        mpfr_sub(r41668, r41666, r41667, MPFR_RNDN);
        mpfr_log(r41669, r41664, MPFR_RNDN);
        mpfr_mul(r41670, r41668, r41669, MPFR_RNDN);
        mpfr_add(r41671, r41665, r41670, MPFR_RNDN);
        return mpfr_get_d(r41671, MPFR_RNDN);
}

static mpfr_t r41672, r41673, r41674, r41675, r41676, r41677, r41678, r41679, r41680, r41681, r41682, r41683, r41684, r41685, r41686, r41687, r41688, r41689, r41690;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41672);
        mpfr_init(r41673);
        mpfr_init(r41674);
        mpfr_init(r41675);
        mpfr_init(r41676);
        mpfr_init(r41677);
        mpfr_init(r41678);
        mpfr_init(r41679);
        mpfr_init(r41680);
        mpfr_init(r41681);
        mpfr_init(r41682);
        mpfr_init(r41683);
        mpfr_init(r41684);
        mpfr_init(r41685);
        mpfr_init_set_str(r41686, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41687);
        mpfr_init(r41688);
        mpfr_init(r41689);
        mpfr_init(r41690);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r41672, x, MPFR_RNDN);
        mpfr_set_d(r41673, y, MPFR_RNDN);
        mpfr_add(r41674, r41672, r41673, MPFR_RNDN);
        mpfr_cbrt(r41675, r41674, MPFR_RNDN);
        mpfr_mul(r41676, r41675, r41675, MPFR_RNDN);
        mpfr_log(r41677, r41676, MPFR_RNDN);
        mpfr_log(r41678, r41675, MPFR_RNDN);
        mpfr_set_d(r41679, z, MPFR_RNDN);
        mpfr_log(r41680, r41679, MPFR_RNDN);
        mpfr_add(r41681, r41678, r41680, MPFR_RNDN);
        mpfr_add(r41682, r41677, r41681, MPFR_RNDN);
        mpfr_set_d(r41683, t, MPFR_RNDN);
        mpfr_sub(r41684, r41682, r41683, MPFR_RNDN);
        mpfr_set_d(r41685, a, MPFR_RNDN);
        ;
        mpfr_sub(r41687, r41685, r41686, MPFR_RNDN);
        mpfr_log(r41688, r41683, MPFR_RNDN);
        mpfr_mul(r41689, r41687, r41688, MPFR_RNDN);
        mpfr_add(r41690, r41684, r41689, MPFR_RNDN);
        return mpfr_get_d(r41690, MPFR_RNDN);
}

static mpfr_t r41691, r41692, r41693, r41694, r41695, r41696, r41697, r41698, r41699, r41700, r41701, r41702, r41703, r41704, r41705, r41706, r41707, r41708, r41709;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41691);
        mpfr_init(r41692);
        mpfr_init(r41693);
        mpfr_init(r41694);
        mpfr_init(r41695);
        mpfr_init(r41696);
        mpfr_init(r41697);
        mpfr_init(r41698);
        mpfr_init(r41699);
        mpfr_init(r41700);
        mpfr_init(r41701);
        mpfr_init(r41702);
        mpfr_init(r41703);
        mpfr_init(r41704);
        mpfr_init_set_str(r41705, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41706);
        mpfr_init(r41707);
        mpfr_init(r41708);
        mpfr_init(r41709);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r41691, x, MPFR_RNDN);
        mpfr_set_d(r41692, y, MPFR_RNDN);
        mpfr_add(r41693, r41691, r41692, MPFR_RNDN);
        mpfr_cbrt(r41694, r41693, MPFR_RNDN);
        mpfr_mul(r41695, r41694, r41694, MPFR_RNDN);
        mpfr_log(r41696, r41695, MPFR_RNDN);
        mpfr_log(r41697, r41694, MPFR_RNDN);
        mpfr_set_d(r41698, z, MPFR_RNDN);
        mpfr_log(r41699, r41698, MPFR_RNDN);
        mpfr_add(r41700, r41697, r41699, MPFR_RNDN);
        mpfr_add(r41701, r41696, r41700, MPFR_RNDN);
        mpfr_set_d(r41702, t, MPFR_RNDN);
        mpfr_sub(r41703, r41701, r41702, MPFR_RNDN);
        mpfr_set_d(r41704, a, MPFR_RNDN);
        ;
        mpfr_sub(r41706, r41704, r41705, MPFR_RNDN);
        mpfr_log(r41707, r41702, MPFR_RNDN);
        mpfr_mul(r41708, r41706, r41707, MPFR_RNDN);
        mpfr_add(r41709, r41703, r41708, MPFR_RNDN);
        return mpfr_get_d(r41709, MPFR_RNDN);
}

