#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 r41973 = x;
        float r41974 = y;
        float r41975 = 0.5;
        float r41976 = r41974 + r41975;
        float r41977 = log(r41974);
        float r41978 = r41976 * r41977;
        float r41979 = r41973 - r41978;
        float r41980 = r41979 + r41974;
        float r41981 = z;
        float r41982 = r41980 - r41981;
        return r41982;
}

double f_id(double x, double y, double z) {
        double r41983 = x;
        double r41984 = y;
        double r41985 = 0.5;
        double r41986 = r41984 + r41985;
        double r41987 = log(r41984);
        double r41988 = r41986 * r41987;
        double r41989 = r41983 - r41988;
        double r41990 = r41989 + r41984;
        double r41991 = z;
        double r41992 = r41990 - r41991;
        return r41992;
}


double f_of(float x, float y, float z) {
        float r41993 = x;
        float r41994 = y;
        float r41995 = 0.5;
        float r41996 = r41994 + r41995;
        float r41997 = log(r41994);
        float r41998 = r41996 * r41997;
        float r41999 = r41993 - r41998;
        float r42000 = r41999 + r41994;
        float r42001 = z;
        float r42002 = r42000 - r42001;
        return r42002;
}

double f_od(double x, double y, double z) {
        double r42003 = x;
        double r42004 = y;
        double r42005 = 0.5;
        double r42006 = r42004 + r42005;
        double r42007 = log(r42004);
        double r42008 = r42006 * r42007;
        double r42009 = r42003 - r42008;
        double r42010 = r42009 + r42004;
        double r42011 = z;
        double r42012 = r42010 - r42011;
        return r42012;
}

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 r42013, r42014, r42015, r42016, r42017, r42018, r42019, r42020, r42021, r42022;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42013);
        mpfr_init(r42014);
        mpfr_init_set_str(r42015, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42016);
        mpfr_init(r42017);
        mpfr_init(r42018);
        mpfr_init(r42019);
        mpfr_init(r42020);
        mpfr_init(r42021);
        mpfr_init(r42022);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42013, x, MPFR_RNDN);
        mpfr_set_d(r42014, y, MPFR_RNDN);
        ;
        mpfr_add(r42016, r42014, r42015, MPFR_RNDN);
        mpfr_log(r42017, r42014, MPFR_RNDN);
        mpfr_mul(r42018, r42016, r42017, MPFR_RNDN);
        mpfr_sub(r42019, r42013, r42018, MPFR_RNDN);
        mpfr_add(r42020, r42019, r42014, MPFR_RNDN);
        mpfr_set_d(r42021, z, MPFR_RNDN);
        mpfr_sub(r42022, r42020, r42021, MPFR_RNDN);
        return mpfr_get_d(r42022, MPFR_RNDN);
}

static mpfr_t r42023, r42024, r42025, r42026, r42027, r42028, r42029, r42030, r42031, r42032;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42023);
        mpfr_init(r42024);
        mpfr_init_set_str(r42025, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42026);
        mpfr_init(r42027);
        mpfr_init(r42028);
        mpfr_init(r42029);
        mpfr_init(r42030);
        mpfr_init(r42031);
        mpfr_init(r42032);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42023, x, MPFR_RNDN);
        mpfr_set_d(r42024, y, MPFR_RNDN);
        ;
        mpfr_add(r42026, r42024, r42025, MPFR_RNDN);
        mpfr_log(r42027, r42024, MPFR_RNDN);
        mpfr_mul(r42028, r42026, r42027, MPFR_RNDN);
        mpfr_sub(r42029, r42023, r42028, MPFR_RNDN);
        mpfr_add(r42030, r42029, r42024, MPFR_RNDN);
        mpfr_set_d(r42031, z, MPFR_RNDN);
        mpfr_sub(r42032, r42030, r42031, MPFR_RNDN);
        return mpfr_get_d(r42032, MPFR_RNDN);
}

static mpfr_t r42033, r42034, r42035, r42036, r42037, r42038, r42039, r42040, r42041, r42042;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42033);
        mpfr_init(r42034);
        mpfr_init_set_str(r42035, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42036);
        mpfr_init(r42037);
        mpfr_init(r42038);
        mpfr_init(r42039);
        mpfr_init(r42040);
        mpfr_init(r42041);
        mpfr_init(r42042);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42033, x, MPFR_RNDN);
        mpfr_set_d(r42034, y, MPFR_RNDN);
        ;
        mpfr_add(r42036, r42034, r42035, MPFR_RNDN);
        mpfr_log(r42037, r42034, MPFR_RNDN);
        mpfr_mul(r42038, r42036, r42037, MPFR_RNDN);
        mpfr_sub(r42039, r42033, r42038, MPFR_RNDN);
        mpfr_add(r42040, r42039, r42034, MPFR_RNDN);
        mpfr_set_d(r42041, z, MPFR_RNDN);
        mpfr_sub(r42042, r42040, r42041, MPFR_RNDN);
        return mpfr_get_d(r42042, MPFR_RNDN);
}

