#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Numeric.SpecFunctions:stirlingError from math-functions-0.1.5.2";

double f_if(float x, float y, float z) {
        float r41677 = x;
        float r41678 = y;
        float r41679 = 0.5;
        float r41680 = r41678 + r41679;
        float r41681 = log(r41678);
        float r41682 = r41680 * r41681;
        float r41683 = r41677 - r41682;
        float r41684 = r41683 + r41678;
        float r41685 = z;
        float r41686 = r41684 - r41685;
        return r41686;
}

double f_id(double x, double y, double z) {
        double r41687 = x;
        double r41688 = y;
        double r41689 = 0.5;
        double r41690 = r41688 + r41689;
        double r41691 = log(r41688);
        double r41692 = r41690 * r41691;
        double r41693 = r41687 - r41692;
        double r41694 = r41693 + r41688;
        double r41695 = z;
        double r41696 = r41694 - r41695;
        return r41696;
}


double f_of(float x, float y, float z) {
        float r41697 = x;
        float r41698 = y;
        float r41699 = 0.5;
        float r41700 = r41698 + r41699;
        float r41701 = log(r41698);
        float r41702 = r41700 * r41701;
        float r41703 = r41697 - r41702;
        float r41704 = r41703 + r41698;
        float r41705 = z;
        float r41706 = r41704 - r41705;
        return r41706;
}

double f_od(double x, double y, double z) {
        double r41707 = x;
        double r41708 = y;
        double r41709 = 0.5;
        double r41710 = r41708 + r41709;
        double r41711 = log(r41708);
        double r41712 = r41710 * r41711;
        double r41713 = r41707 - r41712;
        double r41714 = r41713 + r41708;
        double r41715 = z;
        double r41716 = r41714 - r41715;
        return r41716;
}

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 r41717, r41718, r41719, r41720, r41721, r41722, r41723, r41724, r41725, r41726;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41717);
        mpfr_init(r41718);
        mpfr_init_set_str(r41719, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41720);
        mpfr_init(r41721);
        mpfr_init(r41722);
        mpfr_init(r41723);
        mpfr_init(r41724);
        mpfr_init(r41725);
        mpfr_init(r41726);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r41717, x, MPFR_RNDN);
        mpfr_set_d(r41718, y, MPFR_RNDN);
        ;
        mpfr_add(r41720, r41718, r41719, MPFR_RNDN);
        mpfr_log(r41721, r41718, MPFR_RNDN);
        mpfr_mul(r41722, r41720, r41721, MPFR_RNDN);
        mpfr_sub(r41723, r41717, r41722, MPFR_RNDN);
        mpfr_add(r41724, r41723, r41718, MPFR_RNDN);
        mpfr_set_d(r41725, z, MPFR_RNDN);
        mpfr_sub(r41726, r41724, r41725, MPFR_RNDN);
        return mpfr_get_d(r41726, MPFR_RNDN);
}

static mpfr_t r41727, r41728, r41729, r41730, r41731, r41732, r41733, r41734, r41735, r41736;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41727);
        mpfr_init(r41728);
        mpfr_init_set_str(r41729, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41730);
        mpfr_init(r41731);
        mpfr_init(r41732);
        mpfr_init(r41733);
        mpfr_init(r41734);
        mpfr_init(r41735);
        mpfr_init(r41736);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r41727, x, MPFR_RNDN);
        mpfr_set_d(r41728, y, MPFR_RNDN);
        ;
        mpfr_add(r41730, r41728, r41729, MPFR_RNDN);
        mpfr_log(r41731, r41728, MPFR_RNDN);
        mpfr_mul(r41732, r41730, r41731, MPFR_RNDN);
        mpfr_sub(r41733, r41727, r41732, MPFR_RNDN);
        mpfr_add(r41734, r41733, r41728, MPFR_RNDN);
        mpfr_set_d(r41735, z, MPFR_RNDN);
        mpfr_sub(r41736, r41734, r41735, MPFR_RNDN);
        return mpfr_get_d(r41736, MPFR_RNDN);
}

static mpfr_t r41737, r41738, r41739, r41740, r41741, r41742, r41743, r41744, r41745, r41746;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41737);
        mpfr_init(r41738);
        mpfr_init_set_str(r41739, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41740);
        mpfr_init(r41741);
        mpfr_init(r41742);
        mpfr_init(r41743);
        mpfr_init(r41744);
        mpfr_init(r41745);
        mpfr_init(r41746);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r41737, x, MPFR_RNDN);
        mpfr_set_d(r41738, y, MPFR_RNDN);
        ;
        mpfr_add(r41740, r41738, r41739, MPFR_RNDN);
        mpfr_log(r41741, r41738, MPFR_RNDN);
        mpfr_mul(r41742, r41740, r41741, MPFR_RNDN);
        mpfr_sub(r41743, r41737, r41742, MPFR_RNDN);
        mpfr_add(r41744, r41743, r41738, MPFR_RNDN);
        mpfr_set_d(r41745, z, MPFR_RNDN);
        mpfr_sub(r41746, r41744, r41745, MPFR_RNDN);
        return mpfr_get_d(r41746, MPFR_RNDN);
}

