#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 r42060 = x;
        float r42061 = 0.5f;
        float r42062 = r42060 - r42061;
        float r42063 = log(r42060);
        float r42064 = r42062 * r42063;
        float r42065 = r42064 - r42060;
        float r42066 = 0.91893853320467f;
        float r42067 = r42065 + r42066;
        float r42068 = y;
        float r42069 = 0.0007936500793651f;
        float r42070 = r42068 + r42069;
        float r42071 = z;
        float r42072 = r42070 * r42071;
        float r42073 = 0.0027777777777778f;
        float r42074 = r42072 - r42073;
        float r42075 = r42074 * r42071;
        float r42076 = 0.083333333333333f;
        float r42077 = r42075 + r42076;
        float r42078 = r42077 / r42060;
        float r42079 = r42067 + r42078;
        return r42079;
}

double f_id(double x, double y, double z) {
        double r42080 = x;
        double r42081 = 0.5;
        double r42082 = r42080 - r42081;
        double r42083 = log(r42080);
        double r42084 = r42082 * r42083;
        double r42085 = r42084 - r42080;
        double r42086 = 0.91893853320467;
        double r42087 = r42085 + r42086;
        double r42088 = y;
        double r42089 = 0.0007936500793651;
        double r42090 = r42088 + r42089;
        double r42091 = z;
        double r42092 = r42090 * r42091;
        double r42093 = 0.0027777777777778;
        double r42094 = r42092 - r42093;
        double r42095 = r42094 * r42091;
        double r42096 = 0.083333333333333;
        double r42097 = r42095 + r42096;
        double r42098 = r42097 / r42080;
        double r42099 = r42087 + r42098;
        return r42099;
}


double f_of(float x, float y, float z) {
        float r42100 = x;
        float r42101 = 6163318119635.77f;
        bool r42102 = r42100 <= r42101;
        float r42103 = 0.5f;
        float r42104 = r42100 - r42103;
        float r42105 = log(r42100);
        float r42106 = r42104 * r42105;
        float r42107 = r42106 - r42100;
        float r42108 = 0.91893853320467f;
        float r42109 = r42107 + r42108;
        float r42110 = cbrt(r42109);
        float r42111 = r42110 * (r42110 * r42110);
        float r42112 = y;
        float r42113 = 0.0007936500793651f;
        float r42114 = r42112 + r42113;
        float r42115 = z;
        float r42116 = r42114 * r42115;
        float r42117 = 0.0027777777777778f;
        float r42118 = r42116 - r42117;
        float r42119 = r42118 * r42115;
        float r42120 = 0.083333333333333f;
        float r42121 = r42119 + r42120;
        float r42122 = r42121 / r42100;
        float r42123 = r42111 + r42122;
        float r42124 = r42108 + r42106;
        float r42125 = r42112 * r42115;
        float r42126 = r42100 / r42115;
        float r42127 = r42125 / r42126;
        float r42128 = r42100 - r42127;
        float r42129 = r42115 / r42100;
        float r42130 = r42113 * r42115;
        float r42131 = r42117 - r42130;
        float r42132 = r42129 * r42131;
        float r42133 = r42128 + r42132;
        float r42134 = r42124 - r42133;
        float r42135 = r42102 ? r42123 : r42134;
        return r42135;
}

double f_od(double x, double y, double z) {
        double r42136 = x;
        double r42137 = 6163318119635.77;
        bool r42138 = r42136 <= r42137;
        double r42139 = 0.5;
        double r42140 = r42136 - r42139;
        double r42141 = log(r42136);
        double r42142 = r42140 * r42141;
        double r42143 = r42142 - r42136;
        double r42144 = 0.91893853320467;
        double r42145 = r42143 + r42144;
        double r42146 = cbrt(r42145);
        double r42147 = r42146 * (r42146 * r42146);
        double r42148 = y;
        double r42149 = 0.0007936500793651;
        double r42150 = r42148 + r42149;
        double r42151 = z;
        double r42152 = r42150 * r42151;
        double r42153 = 0.0027777777777778;
        double r42154 = r42152 - r42153;
        double r42155 = r42154 * r42151;
        double r42156 = 0.083333333333333;
        double r42157 = r42155 + r42156;
        double r42158 = r42157 / r42136;
        double r42159 = r42147 + r42158;
        double r42160 = r42144 + r42142;
        double r42161 = r42148 * r42151;
        double r42162 = r42136 / r42151;
        double r42163 = r42161 / r42162;
        double r42164 = r42136 - r42163;
        double r42165 = r42151 / r42136;
        double r42166 = r42149 * r42151;
        double r42167 = r42153 - r42166;
        double r42168 = r42165 * r42167;
        double r42169 = r42164 + r42168;
        double r42170 = r42160 - r42169;
        double r42171 = r42138 ? r42159 : r42170;
        return r42171;
}

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 r42172, r42173, r42174, r42175, r42176, r42177, r42178, r42179, r42180, r42181, r42182, r42183, r42184, r42185, r42186, r42187, r42188, r42189, r42190, r42191;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r42172);
        mpfr_init_set_str(r42173, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42174);
        mpfr_init(r42175);
        mpfr_init(r42176);
        mpfr_init(r42177);
        mpfr_init_set_str(r42178, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r42179);
        mpfr_init(r42180);
        mpfr_init_set_str(r42181, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r42182);
        mpfr_init(r42183);
        mpfr_init(r42184);
        mpfr_init_set_str(r42185, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r42186);
        mpfr_init(r42187);
        mpfr_init_set_str(r42188, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r42189);
        mpfr_init(r42190);
        mpfr_init(r42191);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42172, x, MPFR_RNDN);
        ;
        mpfr_sub(r42174, r42172, r42173, MPFR_RNDN);
        mpfr_log(r42175, r42172, MPFR_RNDN);
        mpfr_mul(r42176, r42174, r42175, MPFR_RNDN);
        mpfr_sub(r42177, r42176, r42172, MPFR_RNDN);
        ;
        mpfr_add(r42179, r42177, r42178, MPFR_RNDN);
        mpfr_set_d(r42180, y, MPFR_RNDN);
        ;
        mpfr_add(r42182, r42180, r42181, MPFR_RNDN);
        mpfr_set_d(r42183, z, MPFR_RNDN);
        mpfr_mul(r42184, r42182, r42183, MPFR_RNDN);
        ;
        mpfr_sub(r42186, r42184, r42185, MPFR_RNDN);
        mpfr_mul(r42187, r42186, r42183, MPFR_RNDN);
        ;
        mpfr_add(r42189, r42187, r42188, MPFR_RNDN);
        mpfr_div(r42190, r42189, r42172, MPFR_RNDN);
        mpfr_add(r42191, r42179, r42190, MPFR_RNDN);
        return mpfr_get_d(r42191, MPFR_RNDN);
}

static mpfr_t r42192, r42193, r42194, r42195, r42196, r42197, r42198, r42199, r42200, r42201, r42202, r42203, r42204, r42205, r42206, r42207, r42208, r42209, r42210, r42211, r42212, r42213, r42214, r42215, r42216, r42217, r42218, r42219, r42220, r42221, r42222, r42223, r42224, r42225, r42226, r42227;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42192);
        mpfr_init_set_str(r42193, "6163318119635.77", 10, MPFR_RNDN);
        mpfr_init(r42194);
        mpfr_init_set_str(r42195, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42196);
        mpfr_init(r42197);
        mpfr_init(r42198);
        mpfr_init(r42199);
        mpfr_init_set_str(r42200, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r42201);
        mpfr_init(r42202);
        mpfr_init(r42203);
        mpfr_init(r42204);
        mpfr_init_set_str(r42205, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r42206);
        mpfr_init(r42207);
        mpfr_init(r42208);
        mpfr_init_set_str(r42209, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r42210);
        mpfr_init(r42211);
        mpfr_init_set_str(r42212, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r42213);
        mpfr_init(r42214);
        mpfr_init(r42215);
        mpfr_init(r42216);
        mpfr_init(r42217);
        mpfr_init(r42218);
        mpfr_init(r42219);
        mpfr_init(r42220);
        mpfr_init(r42221);
        mpfr_init(r42222);
        mpfr_init(r42223);
        mpfr_init(r42224);
        mpfr_init(r42225);
        mpfr_init(r42226);
        mpfr_init(r42227);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42192, x, MPFR_RNDN);
        ;
        mpfr_set_si(r42194, mpfr_cmp(r42192, r42193) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r42196, r42192, r42195, MPFR_RNDN);
        mpfr_log(r42197, r42192, MPFR_RNDN);
        mpfr_mul(r42198, r42196, r42197, MPFR_RNDN);
        mpfr_sub(r42199, r42198, r42192, MPFR_RNDN);
        ;
        mpfr_add(r42201, r42199, r42200, MPFR_RNDN);
        mpfr_cbrt(r42202, r42201, MPFR_RNDN);
        mpfr_mul(r42203, r42202, r42202, MPFR_RNDN); mpfr_mul(r42203, r42203, r42202, MPFR_RNDN);
        mpfr_set_d(r42204, y, MPFR_RNDN);
        ;
        mpfr_add(r42206, r42204, r42205, MPFR_RNDN);
        mpfr_set_d(r42207, z, MPFR_RNDN);
        mpfr_mul(r42208, r42206, r42207, MPFR_RNDN);
        ;
        mpfr_sub(r42210, r42208, r42209, MPFR_RNDN);
        mpfr_mul(r42211, r42210, r42207, MPFR_RNDN);
        ;
        mpfr_add(r42213, r42211, r42212, MPFR_RNDN);
        mpfr_div(r42214, r42213, r42192, MPFR_RNDN);
        mpfr_add(r42215, r42203, r42214, MPFR_RNDN);
        mpfr_add(r42216, r42200, r42198, MPFR_RNDN);
        mpfr_mul(r42217, r42204, r42207, MPFR_RNDN);
        mpfr_div(r42218, r42192, r42207, MPFR_RNDN);
        mpfr_div(r42219, r42217, r42218, MPFR_RNDN);
        mpfr_sub(r42220, r42192, r42219, MPFR_RNDN);
        mpfr_div(r42221, r42207, r42192, MPFR_RNDN);
        mpfr_mul(r42222, r42205, r42207, MPFR_RNDN);
        mpfr_sub(r42223, r42209, r42222, MPFR_RNDN);
        mpfr_mul(r42224, r42221, r42223, MPFR_RNDN);
        mpfr_add(r42225, r42220, r42224, MPFR_RNDN);
        mpfr_sub(r42226, r42216, r42225, MPFR_RNDN);
        if (mpfr_get_si(r42194, MPFR_RNDN)) { mpfr_set(r42227, r42215, MPFR_RNDN); } else { mpfr_set(r42227, r42226, MPFR_RNDN); };
        return mpfr_get_d(r42227, MPFR_RNDN);
}

static mpfr_t r42228, r42229, r42230, r42231, r42232, r42233, r42234, r42235, r42236, r42237, r42238, r42239, r42240, r42241, r42242, r42243, r42244, r42245, r42246, r42247, r42248, r42249, r42250, r42251, r42252, r42253, r42254, r42255, r42256, r42257, r42258, r42259, r42260, r42261, r42262, r42263;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42228);
        mpfr_init_set_str(r42229, "6163318119635.77", 10, MPFR_RNDN);
        mpfr_init(r42230);
        mpfr_init_set_str(r42231, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42232);
        mpfr_init(r42233);
        mpfr_init(r42234);
        mpfr_init(r42235);
        mpfr_init_set_str(r42236, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r42237);
        mpfr_init(r42238);
        mpfr_init(r42239);
        mpfr_init(r42240);
        mpfr_init_set_str(r42241, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r42242);
        mpfr_init(r42243);
        mpfr_init(r42244);
        mpfr_init_set_str(r42245, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r42246);
        mpfr_init(r42247);
        mpfr_init_set_str(r42248, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r42249);
        mpfr_init(r42250);
        mpfr_init(r42251);
        mpfr_init(r42252);
        mpfr_init(r42253);
        mpfr_init(r42254);
        mpfr_init(r42255);
        mpfr_init(r42256);
        mpfr_init(r42257);
        mpfr_init(r42258);
        mpfr_init(r42259);
        mpfr_init(r42260);
        mpfr_init(r42261);
        mpfr_init(r42262);
        mpfr_init(r42263);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42228, x, MPFR_RNDN);
        ;
        mpfr_set_si(r42230, mpfr_cmp(r42228, r42229) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r42232, r42228, r42231, MPFR_RNDN);
        mpfr_log(r42233, r42228, MPFR_RNDN);
        mpfr_mul(r42234, r42232, r42233, MPFR_RNDN);
        mpfr_sub(r42235, r42234, r42228, MPFR_RNDN);
        ;
        mpfr_add(r42237, r42235, r42236, MPFR_RNDN);
        mpfr_cbrt(r42238, r42237, MPFR_RNDN);
        mpfr_mul(r42239, r42238, r42238, MPFR_RNDN); mpfr_mul(r42239, r42239, r42238, MPFR_RNDN);
        mpfr_set_d(r42240, y, MPFR_RNDN);
        ;
        mpfr_add(r42242, r42240, r42241, MPFR_RNDN);
        mpfr_set_d(r42243, z, MPFR_RNDN);
        mpfr_mul(r42244, r42242, r42243, MPFR_RNDN);
        ;
        mpfr_sub(r42246, r42244, r42245, MPFR_RNDN);
        mpfr_mul(r42247, r42246, r42243, MPFR_RNDN);
        ;
        mpfr_add(r42249, r42247, r42248, MPFR_RNDN);
        mpfr_div(r42250, r42249, r42228, MPFR_RNDN);
        mpfr_add(r42251, r42239, r42250, MPFR_RNDN);
        mpfr_add(r42252, r42236, r42234, MPFR_RNDN);
        mpfr_mul(r42253, r42240, r42243, MPFR_RNDN);
        mpfr_div(r42254, r42228, r42243, MPFR_RNDN);
        mpfr_div(r42255, r42253, r42254, MPFR_RNDN);
        mpfr_sub(r42256, r42228, r42255, MPFR_RNDN);
        mpfr_div(r42257, r42243, r42228, MPFR_RNDN);
        mpfr_mul(r42258, r42241, r42243, MPFR_RNDN);
        mpfr_sub(r42259, r42245, r42258, MPFR_RNDN);
        mpfr_mul(r42260, r42257, r42259, MPFR_RNDN);
        mpfr_add(r42261, r42256, r42260, MPFR_RNDN);
        mpfr_sub(r42262, r42252, r42261, MPFR_RNDN);
        if (mpfr_get_si(r42230, MPFR_RNDN)) { mpfr_set(r42263, r42251, MPFR_RNDN); } else { mpfr_set(r42263, r42262, MPFR_RNDN); };
        return mpfr_get_d(r42263, MPFR_RNDN);
}

