#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 r41749 = x;
        float r41750 = y;
        float r41751 = 0.5;
        float r41752 = r41750 + r41751;
        float r41753 = log(r41750);
        float r41754 = r41752 * r41753;
        float r41755 = r41749 - r41754;
        float r41756 = r41755 + r41750;
        float r41757 = z;
        float r41758 = r41756 - r41757;
        return r41758;
}

double f_id(double x, double y, double z) {
        double r41759 = x;
        double r41760 = y;
        double r41761 = 0.5;
        double r41762 = r41760 + r41761;
        double r41763 = log(r41760);
        double r41764 = r41762 * r41763;
        double r41765 = r41759 - r41764;
        double r41766 = r41765 + r41760;
        double r41767 = z;
        double r41768 = r41766 - r41767;
        return r41768;
}


double f_of(float x, float y, float z) {
        float r41769 = x;
        float r41770 = y;
        float r41771 = 0.5;
        float r41772 = r41770 + r41771;
        float r41773 = log(r41770);
        float r41774 = r41772 * r41773;
        float r41775 = r41769 - r41774;
        float r41776 = r41775 + r41770;
        float r41777 = z;
        float r41778 = r41776 - r41777;
        return r41778;
}

double f_od(double x, double y, double z) {
        double r41779 = x;
        double r41780 = y;
        double r41781 = 0.5;
        double r41782 = r41780 + r41781;
        double r41783 = log(r41780);
        double r41784 = r41782 * r41783;
        double r41785 = r41779 - r41784;
        double r41786 = r41785 + r41780;
        double r41787 = z;
        double r41788 = r41786 - r41787;
        return r41788;
}

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 r41789, r41790, r41791, r41792, r41793, r41794, r41795, r41796, r41797, r41798;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41789);
        mpfr_init(r41790);
        mpfr_init_set_str(r41791, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41792);
        mpfr_init(r41793);
        mpfr_init(r41794);
        mpfr_init(r41795);
        mpfr_init(r41796);
        mpfr_init(r41797);
        mpfr_init(r41798);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r41789, x, MPFR_RNDN);
        mpfr_set_d(r41790, y, MPFR_RNDN);
        ;
        mpfr_add(r41792, r41790, r41791, MPFR_RNDN);
        mpfr_log(r41793, r41790, MPFR_RNDN);
        mpfr_mul(r41794, r41792, r41793, MPFR_RNDN);
        mpfr_sub(r41795, r41789, r41794, MPFR_RNDN);
        mpfr_add(r41796, r41795, r41790, MPFR_RNDN);
        mpfr_set_d(r41797, z, MPFR_RNDN);
        mpfr_sub(r41798, r41796, r41797, MPFR_RNDN);
        return mpfr_get_d(r41798, MPFR_RNDN);
}

static mpfr_t r41799, r41800, r41801, r41802, r41803, r41804, r41805, r41806, r41807, r41808;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41799);
        mpfr_init(r41800);
        mpfr_init_set_str(r41801, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41802);
        mpfr_init(r41803);
        mpfr_init(r41804);
        mpfr_init(r41805);
        mpfr_init(r41806);
        mpfr_init(r41807);
        mpfr_init(r41808);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r41799, x, MPFR_RNDN);
        mpfr_set_d(r41800, y, MPFR_RNDN);
        ;
        mpfr_add(r41802, r41800, r41801, MPFR_RNDN);
        mpfr_log(r41803, r41800, MPFR_RNDN);
        mpfr_mul(r41804, r41802, r41803, MPFR_RNDN);
        mpfr_sub(r41805, r41799, r41804, MPFR_RNDN);
        mpfr_add(r41806, r41805, r41800, MPFR_RNDN);
        mpfr_set_d(r41807, z, MPFR_RNDN);
        mpfr_sub(r41808, r41806, r41807, MPFR_RNDN);
        return mpfr_get_d(r41808, MPFR_RNDN);
}

static mpfr_t r41809, r41810, r41811, r41812, r41813, r41814, r41815, r41816, r41817, r41818;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41809);
        mpfr_init(r41810);
        mpfr_init_set_str(r41811, "0.5", 10, MPFR_RNDN);
        mpfr_init(r41812);
        mpfr_init(r41813);
        mpfr_init(r41814);
        mpfr_init(r41815);
        mpfr_init(r41816);
        mpfr_init(r41817);
        mpfr_init(r41818);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r41809, x, MPFR_RNDN);
        mpfr_set_d(r41810, y, MPFR_RNDN);
        ;
        mpfr_add(r41812, r41810, r41811, MPFR_RNDN);
        mpfr_log(r41813, r41810, MPFR_RNDN);
        mpfr_mul(r41814, r41812, r41813, MPFR_RNDN);
        mpfr_sub(r41815, r41809, r41814, MPFR_RNDN);
        mpfr_add(r41816, r41815, r41810, MPFR_RNDN);
        mpfr_set_d(r41817, z, MPFR_RNDN);
        mpfr_sub(r41818, r41816, r41817, MPFR_RNDN);
        return mpfr_get_d(r41818, MPFR_RNDN);
}

