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

char *name = "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B";

double f_if(float x, float y, float z) {
        float r44873 = x;
        float r44874 = 0.5;
        float r44875 = r44873 - r44874;
        float r44876 = log(r44873);
        float r44877 = r44875 * r44876;
        float r44878 = r44877 - r44873;
        float r44879 = 0.91893853320467;
        float r44880 = r44878 + r44879;
        float r44881 = y;
        float r44882 = 0.0007936500793651;
        float r44883 = r44881 + r44882;
        float r44884 = z;
        float r44885 = r44883 * r44884;
        float r44886 = 0.0027777777777778;
        float r44887 = r44885 - r44886;
        float r44888 = r44887 * r44884;
        float r44889 = 0.083333333333333;
        float r44890 = r44888 + r44889;
        float r44891 = r44890 / r44873;
        float r44892 = r44880 + r44891;
        return r44892;
}

double f_id(double x, double y, double z) {
        double r44893 = x;
        double r44894 = 0.5;
        double r44895 = r44893 - r44894;
        double r44896 = log(r44893);
        double r44897 = r44895 * r44896;
        double r44898 = r44897 - r44893;
        double r44899 = 0.91893853320467;
        double r44900 = r44898 + r44899;
        double r44901 = y;
        double r44902 = 0.0007936500793651;
        double r44903 = r44901 + r44902;
        double r44904 = z;
        double r44905 = r44903 * r44904;
        double r44906 = 0.0027777777777778;
        double r44907 = r44905 - r44906;
        double r44908 = r44907 * r44904;
        double r44909 = 0.083333333333333;
        double r44910 = r44908 + r44909;
        double r44911 = r44910 / r44893;
        double r44912 = r44900 + r44911;
        return r44912;
}


double f_of(float x, float y, float z) {
        float r44913 = x;
        float r44914 = 3.2174206549099184e+22;
        bool r44915 = r44913 <= r44914;
        float r44916 = z;
        float r44917 = r44916 * r44916;
        float r44918 = y;
        float r44919 = 0.0007936500793651;
        float r44920 = r44918 + r44919;
        float r44921 = r44917 * r44920;
        float r44922 = 0.0027777777777778;
        float r44923 = r44916 * r44922;
        float r44924 = 0.083333333333333;
        float r44925 = r44923 - r44924;
        float r44926 = r44921 - r44925;
        float r44927 = r44926 / r44913;
        float r44928 = 0.5;
        float r44929 = r44913 - r44928;
        float r44930 = log(r44913);
        float r44931 = r44929 * r44930;
        float r44932 = 0.91893853320467;
        float r44933 = r44913 - r44932;
        float r44934 = r44931 - r44933;
        float r44935 = r44927 + r44934;
        float r44936 = r44916 / r44913;
        float r44937 = r44916 * r44920;
        float r44938 = r44937 - r44922;
        float r44939 = r44936 * r44938;
        float r44940 = r44939 + r44934;
        float r44941 = r44915 ? r44935 : r44940;
        return r44941;
}

double f_od(double x, double y, double z) {
        double r44942 = x;
        double r44943 = 3.2174206549099184e+22;
        bool r44944 = r44942 <= r44943;
        double r44945 = z;
        double r44946 = r44945 * r44945;
        double r44947 = y;
        double r44948 = 0.0007936500793651;
        double r44949 = r44947 + r44948;
        double r44950 = r44946 * r44949;
        double r44951 = 0.0027777777777778;
        double r44952 = r44945 * r44951;
        double r44953 = 0.083333333333333;
        double r44954 = r44952 - r44953;
        double r44955 = r44950 - r44954;
        double r44956 = r44955 / r44942;
        double r44957 = 0.5;
        double r44958 = r44942 - r44957;
        double r44959 = log(r44942);
        double r44960 = r44958 * r44959;
        double r44961 = 0.91893853320467;
        double r44962 = r44942 - r44961;
        double r44963 = r44960 - r44962;
        double r44964 = r44956 + r44963;
        double r44965 = r44945 / r44942;
        double r44966 = r44945 * r44949;
        double r44967 = r44966 - r44951;
        double r44968 = r44965 * r44967;
        double r44969 = r44968 + r44963;
        double r44970 = r44944 ? r44964 : r44969;
        return r44970;
}

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 r44971, r44972, r44973, r44974, r44975, r44976, r44977, r44978, r44979, r44980, r44981, r44982, r44983, r44984, r44985, r44986, r44987, r44988, r44989, r44990;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r44971);
        mpfr_init_set_str(r44972, "0.5", 10, MPFR_RNDN);
        mpfr_init(r44973);
        mpfr_init(r44974);
        mpfr_init(r44975);
        mpfr_init(r44976);
        mpfr_init_set_str(r44977, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r44978);
        mpfr_init(r44979);
        mpfr_init_set_str(r44980, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r44981);
        mpfr_init(r44982);
        mpfr_init(r44983);
        mpfr_init_set_str(r44984, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r44985);
        mpfr_init(r44986);
        mpfr_init_set_str(r44987, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r44988);
        mpfr_init(r44989);
        mpfr_init(r44990);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r44971, x, MPFR_RNDN);
        ;
        mpfr_sub(r44973, r44971, r44972, MPFR_RNDN);
        mpfr_log(r44974, r44971, MPFR_RNDN);
        mpfr_mul(r44975, r44973, r44974, MPFR_RNDN);
        mpfr_sub(r44976, r44975, r44971, MPFR_RNDN);
        ;
        mpfr_add(r44978, r44976, r44977, MPFR_RNDN);
        mpfr_set_d(r44979, y, MPFR_RNDN);
        ;
        mpfr_add(r44981, r44979, r44980, MPFR_RNDN);
        mpfr_set_d(r44982, z, MPFR_RNDN);
        mpfr_mul(r44983, r44981, r44982, MPFR_RNDN);
        ;
        mpfr_sub(r44985, r44983, r44984, MPFR_RNDN);
        mpfr_mul(r44986, r44985, r44982, MPFR_RNDN);
        ;
        mpfr_add(r44988, r44986, r44987, MPFR_RNDN);
        mpfr_div(r44989, r44988, r44971, MPFR_RNDN);
        mpfr_add(r44990, r44978, r44989, MPFR_RNDN);
        return mpfr_get_d(r44990, MPFR_RNDN);
}

static mpfr_t r44991, r44992, r44993, r44994, r44995, r44996, r44997, r44998, r44999, r45000, r45001, r45002, r45003, r45004, r45005, r45006, r45007, r45008, r45009, r45010, r45011, r45012, r45013, r45014, r45015, r45016, r45017, r45018, r45019;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r44991);
        mpfr_init_set_str(r44992, "3.2174206549099184e+22", 10, MPFR_RNDN);
        mpfr_init(r44993);
        mpfr_init(r44994);
        mpfr_init(r44995);
        mpfr_init(r44996);
        mpfr_init_set_str(r44997, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r44998);
        mpfr_init(r44999);
        mpfr_init_set_str(r45000, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45001);
        mpfr_init_set_str(r45002, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45003);
        mpfr_init(r45004);
        mpfr_init(r45005);
        mpfr_init_set_str(r45006, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45007);
        mpfr_init(r45008);
        mpfr_init(r45009);
        mpfr_init_set_str(r45010, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45011);
        mpfr_init(r45012);
        mpfr_init(r45013);
        mpfr_init(r45014);
        mpfr_init(r45015);
        mpfr_init(r45016);
        mpfr_init(r45017);
        mpfr_init(r45018);
        mpfr_init(r45019);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r44991, x, MPFR_RNDN);
        ;
        mpfr_set_si(r44993, mpfr_cmp(r44991, r44992) <= 0, MPFR_RNDN);
        mpfr_set_d(r44994, z, MPFR_RNDN);
        mpfr_mul(r44995, r44994, r44994, MPFR_RNDN);
        mpfr_set_d(r44996, y, MPFR_RNDN);
        ;
        mpfr_add(r44998, r44996, r44997, MPFR_RNDN);
        mpfr_mul(r44999, r44995, r44998, MPFR_RNDN);
        ;
        mpfr_mul(r45001, r44994, r45000, MPFR_RNDN);
        ;
        mpfr_sub(r45003, r45001, r45002, MPFR_RNDN);
        mpfr_sub(r45004, r44999, r45003, MPFR_RNDN);
        mpfr_div(r45005, r45004, r44991, MPFR_RNDN);
        ;
        mpfr_sub(r45007, r44991, r45006, MPFR_RNDN);
        mpfr_log(r45008, r44991, MPFR_RNDN);
        mpfr_mul(r45009, r45007, r45008, MPFR_RNDN);
        ;
        mpfr_sub(r45011, r44991, r45010, MPFR_RNDN);
        mpfr_sub(r45012, r45009, r45011, MPFR_RNDN);
        mpfr_add(r45013, r45005, r45012, MPFR_RNDN);
        mpfr_div(r45014, r44994, r44991, MPFR_RNDN);
        mpfr_mul(r45015, r44994, r44998, MPFR_RNDN);
        mpfr_sub(r45016, r45015, r45000, MPFR_RNDN);
        mpfr_mul(r45017, r45014, r45016, MPFR_RNDN);
        mpfr_add(r45018, r45017, r45012, MPFR_RNDN);
        if (mpfr_get_si(r44993, MPFR_RNDN)) { mpfr_set(r45019, r45013, MPFR_RNDN); } else { mpfr_set(r45019, r45018, MPFR_RNDN); };
        return mpfr_get_d(r45019, MPFR_RNDN);
}

static mpfr_t r45020, r45021, r45022, r45023, r45024, r45025, r45026, r45027, r45028, r45029, r45030, r45031, r45032, r45033, r45034, r45035, r45036, r45037, r45038, r45039, r45040, r45041, r45042, r45043, r45044, r45045, r45046, r45047, r45048;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45020);
        mpfr_init_set_str(r45021, "3.2174206549099184e+22", 10, MPFR_RNDN);
        mpfr_init(r45022);
        mpfr_init(r45023);
        mpfr_init(r45024);
        mpfr_init(r45025);
        mpfr_init_set_str(r45026, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45027);
        mpfr_init(r45028);
        mpfr_init_set_str(r45029, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45030);
        mpfr_init_set_str(r45031, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45032);
        mpfr_init(r45033);
        mpfr_init(r45034);
        mpfr_init_set_str(r45035, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45036);
        mpfr_init(r45037);
        mpfr_init(r45038);
        mpfr_init_set_str(r45039, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45040);
        mpfr_init(r45041);
        mpfr_init(r45042);
        mpfr_init(r45043);
        mpfr_init(r45044);
        mpfr_init(r45045);
        mpfr_init(r45046);
        mpfr_init(r45047);
        mpfr_init(r45048);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45020, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45022, mpfr_cmp(r45020, r45021) <= 0, MPFR_RNDN);
        mpfr_set_d(r45023, z, MPFR_RNDN);
        mpfr_mul(r45024, r45023, r45023, MPFR_RNDN);
        mpfr_set_d(r45025, y, MPFR_RNDN);
        ;
        mpfr_add(r45027, r45025, r45026, MPFR_RNDN);
        mpfr_mul(r45028, r45024, r45027, MPFR_RNDN);
        ;
        mpfr_mul(r45030, r45023, r45029, MPFR_RNDN);
        ;
        mpfr_sub(r45032, r45030, r45031, MPFR_RNDN);
        mpfr_sub(r45033, r45028, r45032, MPFR_RNDN);
        mpfr_div(r45034, r45033, r45020, MPFR_RNDN);
        ;
        mpfr_sub(r45036, r45020, r45035, MPFR_RNDN);
        mpfr_log(r45037, r45020, MPFR_RNDN);
        mpfr_mul(r45038, r45036, r45037, MPFR_RNDN);
        ;
        mpfr_sub(r45040, r45020, r45039, MPFR_RNDN);
        mpfr_sub(r45041, r45038, r45040, MPFR_RNDN);
        mpfr_add(r45042, r45034, r45041, MPFR_RNDN);
        mpfr_div(r45043, r45023, r45020, MPFR_RNDN);
        mpfr_mul(r45044, r45023, r45027, MPFR_RNDN);
        mpfr_sub(r45045, r45044, r45029, MPFR_RNDN);
        mpfr_mul(r45046, r45043, r45045, MPFR_RNDN);
        mpfr_add(r45047, r45046, r45041, MPFR_RNDN);
        if (mpfr_get_si(r45022, MPFR_RNDN)) { mpfr_set(r45048, r45042, MPFR_RNDN); } else { mpfr_set(r45048, r45047, MPFR_RNDN); };
        return mpfr_get_d(r45048, MPFR_RNDN);
}

