#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 r42185 = x;
        float r42186 = y;
        float r42187 = 0.5;
        float r42188 = r42186 + r42187;
        float r42189 = log(r42186);
        float r42190 = r42188 * r42189;
        float r42191 = r42185 - r42190;
        float r42192 = r42191 + r42186;
        float r42193 = z;
        float r42194 = r42192 - r42193;
        return r42194;
}

double f_id(double x, double y, double z) {
        double r42195 = x;
        double r42196 = y;
        double r42197 = 0.5;
        double r42198 = r42196 + r42197;
        double r42199 = log(r42196);
        double r42200 = r42198 * r42199;
        double r42201 = r42195 - r42200;
        double r42202 = r42201 + r42196;
        double r42203 = z;
        double r42204 = r42202 - r42203;
        return r42204;
}


double f_of(float x, float y, float z) {
        float r42205 = x;
        float r42206 = y;
        float r42207 = 0.5;
        float r42208 = r42206 + r42207;
        float r42209 = log(r42206);
        float r42210 = r42208 * r42209;
        float r42211 = r42205 - r42210;
        float r42212 = r42211 + r42206;
        float r42213 = z;
        float r42214 = r42212 - r42213;
        return r42214;
}

double f_od(double x, double y, double z) {
        double r42215 = x;
        double r42216 = y;
        double r42217 = 0.5;
        double r42218 = r42216 + r42217;
        double r42219 = log(r42216);
        double r42220 = r42218 * r42219;
        double r42221 = r42215 - r42220;
        double r42222 = r42221 + r42216;
        double r42223 = z;
        double r42224 = r42222 - r42223;
        return r42224;
}

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 r42225, r42226, r42227, r42228, r42229, r42230, r42231, r42232, r42233, r42234;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42225);
        mpfr_init(r42226);
        mpfr_init_set_str(r42227, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42228);
        mpfr_init(r42229);
        mpfr_init(r42230);
        mpfr_init(r42231);
        mpfr_init(r42232);
        mpfr_init(r42233);
        mpfr_init(r42234);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42225, x, MPFR_RNDN);
        mpfr_set_d(r42226, y, MPFR_RNDN);
        ;
        mpfr_add(r42228, r42226, r42227, MPFR_RNDN);
        mpfr_log(r42229, r42226, MPFR_RNDN);
        mpfr_mul(r42230, r42228, r42229, MPFR_RNDN);
        mpfr_sub(r42231, r42225, r42230, MPFR_RNDN);
        mpfr_add(r42232, r42231, r42226, MPFR_RNDN);
        mpfr_set_d(r42233, z, MPFR_RNDN);
        mpfr_sub(r42234, r42232, r42233, MPFR_RNDN);
        return mpfr_get_d(r42234, MPFR_RNDN);
}

static mpfr_t r42235, r42236, r42237, r42238, r42239, r42240, r42241, r42242, r42243, r42244;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42235);
        mpfr_init(r42236);
        mpfr_init_set_str(r42237, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42238);
        mpfr_init(r42239);
        mpfr_init(r42240);
        mpfr_init(r42241);
        mpfr_init(r42242);
        mpfr_init(r42243);
        mpfr_init(r42244);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42235, x, MPFR_RNDN);
        mpfr_set_d(r42236, y, MPFR_RNDN);
        ;
        mpfr_add(r42238, r42236, r42237, MPFR_RNDN);
        mpfr_log(r42239, r42236, MPFR_RNDN);
        mpfr_mul(r42240, r42238, r42239, MPFR_RNDN);
        mpfr_sub(r42241, r42235, r42240, MPFR_RNDN);
        mpfr_add(r42242, r42241, r42236, MPFR_RNDN);
        mpfr_set_d(r42243, z, MPFR_RNDN);
        mpfr_sub(r42244, r42242, r42243, MPFR_RNDN);
        return mpfr_get_d(r42244, MPFR_RNDN);
}

static mpfr_t r42245, r42246, r42247, r42248, r42249, r42250, r42251, r42252, r42253, r42254;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42245);
        mpfr_init(r42246);
        mpfr_init_set_str(r42247, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42248);
        mpfr_init(r42249);
        mpfr_init(r42250);
        mpfr_init(r42251);
        mpfr_init(r42252);
        mpfr_init(r42253);
        mpfr_init(r42254);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42245, x, MPFR_RNDN);
        mpfr_set_d(r42246, y, MPFR_RNDN);
        ;
        mpfr_add(r42248, r42246, r42247, MPFR_RNDN);
        mpfr_log(r42249, r42246, MPFR_RNDN);
        mpfr_mul(r42250, r42248, r42249, MPFR_RNDN);
        mpfr_sub(r42251, r42245, r42250, MPFR_RNDN);
        mpfr_add(r42252, r42251, r42246, MPFR_RNDN);
        mpfr_set_d(r42253, z, MPFR_RNDN);
        mpfr_sub(r42254, r42252, r42253, MPFR_RNDN);
        return mpfr_get_d(r42254, MPFR_RNDN);
}

