#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 r45111 = x;
        float r45112 = 0.5;
        float r45113 = r45111 - r45112;
        float r45114 = log(r45111);
        float r45115 = r45113 * r45114;
        float r45116 = r45115 - r45111;
        float r45117 = 0.91893853320467;
        float r45118 = r45116 + r45117;
        float r45119 = y;
        float r45120 = 0.0007936500793651;
        float r45121 = r45119 + r45120;
        float r45122 = z;
        float r45123 = r45121 * r45122;
        float r45124 = 0.0027777777777778;
        float r45125 = r45123 - r45124;
        float r45126 = r45125 * r45122;
        float r45127 = 0.083333333333333;
        float r45128 = r45126 + r45127;
        float r45129 = r45128 / r45111;
        float r45130 = r45118 + r45129;
        return r45130;
}

double f_id(double x, double y, double z) {
        double r45131 = x;
        double r45132 = 0.5;
        double r45133 = r45131 - r45132;
        double r45134 = log(r45131);
        double r45135 = r45133 * r45134;
        double r45136 = r45135 - r45131;
        double r45137 = 0.91893853320467;
        double r45138 = r45136 + r45137;
        double r45139 = y;
        double r45140 = 0.0007936500793651;
        double r45141 = r45139 + r45140;
        double r45142 = z;
        double r45143 = r45141 * r45142;
        double r45144 = 0.0027777777777778;
        double r45145 = r45143 - r45144;
        double r45146 = r45145 * r45142;
        double r45147 = 0.083333333333333;
        double r45148 = r45146 + r45147;
        double r45149 = r45148 / r45131;
        double r45150 = r45138 + r45149;
        return r45150;
}


double f_of(float x, float y, float z) {
        float r45151 = x;
        float r45152 = 5277226.618941849;
        bool r45153 = r45151 <= r45152;
        float r45154 = 0.5;
        float r45155 = r45151 - r45154;
        float r45156 = pow(r45151, r45155);
        float r45157 = 0.91893853320467;
        float r45158 = r45151 - r45157;
        float r45159 = exp(r45158);
        float r45160 = r45156 / r45159;
        float r45161 = log(r45160);
        float r45162 = y;
        float r45163 = 0.0007936500793651;
        float r45164 = r45162 + r45163;
        float r45165 = z;
        float r45166 = r45164 * r45165;
        float r45167 = 0.0027777777777778;
        float r45168 = r45166 - r45167;
        float r45169 = r45168 * r45165;
        float r45170 = 0.083333333333333;
        float r45171 = r45169 + r45170;
        float r45172 = r45171 / r45151;
        float r45173 = r45161 + r45172;
        float r45174 = r45165 / r45151;
        float r45175 = r45165 * r45164;
        float r45176 = r45175 - r45167;
        float r45177 = r45174 * r45176;
        float r45178 = log(r45151);
        float r45179 = r45155 * r45178;
        float r45180 = r45179 - r45158;
        float r45181 = r45177 + r45180;
        float r45182 = r45153 ? r45173 : r45181;
        return r45182;
}

double f_od(double x, double y, double z) {
        double r45183 = x;
        double r45184 = 5277226.618941849;
        bool r45185 = r45183 <= r45184;
        double r45186 = 0.5;
        double r45187 = r45183 - r45186;
        double r45188 = pow(r45183, r45187);
        double r45189 = 0.91893853320467;
        double r45190 = r45183 - r45189;
        double r45191 = exp(r45190);
        double r45192 = r45188 / r45191;
        double r45193 = log(r45192);
        double r45194 = y;
        double r45195 = 0.0007936500793651;
        double r45196 = r45194 + r45195;
        double r45197 = z;
        double r45198 = r45196 * r45197;
        double r45199 = 0.0027777777777778;
        double r45200 = r45198 - r45199;
        double r45201 = r45200 * r45197;
        double r45202 = 0.083333333333333;
        double r45203 = r45201 + r45202;
        double r45204 = r45203 / r45183;
        double r45205 = r45193 + r45204;
        double r45206 = r45197 / r45183;
        double r45207 = r45197 * r45196;
        double r45208 = r45207 - r45199;
        double r45209 = r45206 * r45208;
        double r45210 = log(r45183);
        double r45211 = r45187 * r45210;
        double r45212 = r45211 - r45190;
        double r45213 = r45209 + r45212;
        double r45214 = r45185 ? r45205 : r45213;
        return r45214;
}

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 r45215, r45216, r45217, r45218, r45219, r45220, r45221, r45222, r45223, r45224, r45225, r45226, r45227, r45228, r45229, r45230, r45231, r45232, r45233, r45234;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45215);
        mpfr_init_set_str(r45216, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45217);
        mpfr_init(r45218);
        mpfr_init(r45219);
        mpfr_init(r45220);
        mpfr_init_set_str(r45221, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45222);
        mpfr_init(r45223);
        mpfr_init_set_str(r45224, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45225);
        mpfr_init(r45226);
        mpfr_init(r45227);
        mpfr_init_set_str(r45228, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45229);
        mpfr_init(r45230);
        mpfr_init_set_str(r45231, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45232);
        mpfr_init(r45233);
        mpfr_init(r45234);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45215, x, MPFR_RNDN);
        ;
        mpfr_sub(r45217, r45215, r45216, MPFR_RNDN);
        mpfr_log(r45218, r45215, MPFR_RNDN);
        mpfr_mul(r45219, r45217, r45218, MPFR_RNDN);
        mpfr_sub(r45220, r45219, r45215, MPFR_RNDN);
        ;
        mpfr_add(r45222, r45220, r45221, MPFR_RNDN);
        mpfr_set_d(r45223, y, MPFR_RNDN);
        ;
        mpfr_add(r45225, r45223, r45224, MPFR_RNDN);
        mpfr_set_d(r45226, z, MPFR_RNDN);
        mpfr_mul(r45227, r45225, r45226, MPFR_RNDN);
        ;
        mpfr_sub(r45229, r45227, r45228, MPFR_RNDN);
        mpfr_mul(r45230, r45229, r45226, MPFR_RNDN);
        ;
        mpfr_add(r45232, r45230, r45231, MPFR_RNDN);
        mpfr_div(r45233, r45232, r45215, MPFR_RNDN);
        mpfr_add(r45234, r45222, r45233, MPFR_RNDN);
        return mpfr_get_d(r45234, MPFR_RNDN);
}

static mpfr_t r45235, r45236, r45237, r45238, r45239, r45240, r45241, r45242, r45243, r45244, r45245, r45246, r45247, r45248, r45249, r45250, r45251, r45252, r45253, r45254, r45255, r45256, r45257, r45258, r45259, r45260, r45261, r45262, r45263, r45264, r45265, r45266;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45235);
        mpfr_init_set_str(r45236, "5277226.618941849", 10, MPFR_RNDN);
        mpfr_init(r45237);
        mpfr_init_set_str(r45238, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45239);
        mpfr_init(r45240);
        mpfr_init_set_str(r45241, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45242);
        mpfr_init(r45243);
        mpfr_init(r45244);
        mpfr_init(r45245);
        mpfr_init(r45246);
        mpfr_init_set_str(r45247, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45248);
        mpfr_init(r45249);
        mpfr_init(r45250);
        mpfr_init_set_str(r45251, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45252);
        mpfr_init(r45253);
        mpfr_init_set_str(r45254, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45255);
        mpfr_init(r45256);
        mpfr_init(r45257);
        mpfr_init(r45258);
        mpfr_init(r45259);
        mpfr_init(r45260);
        mpfr_init(r45261);
        mpfr_init(r45262);
        mpfr_init(r45263);
        mpfr_init(r45264);
        mpfr_init(r45265);
        mpfr_init(r45266);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45235, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45237, mpfr_cmp(r45235, r45236) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r45239, r45235, r45238, MPFR_RNDN);
        mpfr_pow(r45240, r45235, r45239, MPFR_RNDN);
        ;
        mpfr_sub(r45242, r45235, r45241, MPFR_RNDN);
        mpfr_exp(r45243, r45242, MPFR_RNDN);
        mpfr_div(r45244, r45240, r45243, MPFR_RNDN);
        mpfr_log(r45245, r45244, MPFR_RNDN);
        mpfr_set_d(r45246, y, MPFR_RNDN);
        ;
        mpfr_add(r45248, r45246, r45247, MPFR_RNDN);
        mpfr_set_d(r45249, z, MPFR_RNDN);
        mpfr_mul(r45250, r45248, r45249, MPFR_RNDN);
        ;
        mpfr_sub(r45252, r45250, r45251, MPFR_RNDN);
        mpfr_mul(r45253, r45252, r45249, MPFR_RNDN);
        ;
        mpfr_add(r45255, r45253, r45254, MPFR_RNDN);
        mpfr_div(r45256, r45255, r45235, MPFR_RNDN);
        mpfr_add(r45257, r45245, r45256, MPFR_RNDN);
        mpfr_div(r45258, r45249, r45235, MPFR_RNDN);
        mpfr_mul(r45259, r45249, r45248, MPFR_RNDN);
        mpfr_sub(r45260, r45259, r45251, MPFR_RNDN);
        mpfr_mul(r45261, r45258, r45260, MPFR_RNDN);
        mpfr_log(r45262, r45235, MPFR_RNDN);
        mpfr_mul(r45263, r45239, r45262, MPFR_RNDN);
        mpfr_sub(r45264, r45263, r45242, MPFR_RNDN);
        mpfr_add(r45265, r45261, r45264, MPFR_RNDN);
        if (mpfr_get_si(r45237, MPFR_RNDN)) { mpfr_set(r45266, r45257, MPFR_RNDN); } else { mpfr_set(r45266, r45265, MPFR_RNDN); };
        return mpfr_get_d(r45266, MPFR_RNDN);
}

static mpfr_t r45267, r45268, r45269, r45270, r45271, r45272, r45273, r45274, r45275, r45276, r45277, r45278, r45279, r45280, r45281, r45282, r45283, r45284, r45285, r45286, r45287, r45288, r45289, r45290, r45291, r45292, r45293, r45294, r45295, r45296, r45297, r45298;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45267);
        mpfr_init_set_str(r45268, "5277226.618941849", 10, MPFR_RNDN);
        mpfr_init(r45269);
        mpfr_init_set_str(r45270, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45271);
        mpfr_init(r45272);
        mpfr_init_set_str(r45273, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45274);
        mpfr_init(r45275);
        mpfr_init(r45276);
        mpfr_init(r45277);
        mpfr_init(r45278);
        mpfr_init_set_str(r45279, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45280);
        mpfr_init(r45281);
        mpfr_init(r45282);
        mpfr_init_set_str(r45283, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45284);
        mpfr_init(r45285);
        mpfr_init_set_str(r45286, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45287);
        mpfr_init(r45288);
        mpfr_init(r45289);
        mpfr_init(r45290);
        mpfr_init(r45291);
        mpfr_init(r45292);
        mpfr_init(r45293);
        mpfr_init(r45294);
        mpfr_init(r45295);
        mpfr_init(r45296);
        mpfr_init(r45297);
        mpfr_init(r45298);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45267, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45269, mpfr_cmp(r45267, r45268) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r45271, r45267, r45270, MPFR_RNDN);
        mpfr_pow(r45272, r45267, r45271, MPFR_RNDN);
        ;
        mpfr_sub(r45274, r45267, r45273, MPFR_RNDN);
        mpfr_exp(r45275, r45274, MPFR_RNDN);
        mpfr_div(r45276, r45272, r45275, MPFR_RNDN);
        mpfr_log(r45277, r45276, MPFR_RNDN);
        mpfr_set_d(r45278, y, MPFR_RNDN);
        ;
        mpfr_add(r45280, r45278, r45279, MPFR_RNDN);
        mpfr_set_d(r45281, z, MPFR_RNDN);
        mpfr_mul(r45282, r45280, r45281, MPFR_RNDN);
        ;
        mpfr_sub(r45284, r45282, r45283, MPFR_RNDN);
        mpfr_mul(r45285, r45284, r45281, MPFR_RNDN);
        ;
        mpfr_add(r45287, r45285, r45286, MPFR_RNDN);
        mpfr_div(r45288, r45287, r45267, MPFR_RNDN);
        mpfr_add(r45289, r45277, r45288, MPFR_RNDN);
        mpfr_div(r45290, r45281, r45267, MPFR_RNDN);
        mpfr_mul(r45291, r45281, r45280, MPFR_RNDN);
        mpfr_sub(r45292, r45291, r45283, MPFR_RNDN);
        mpfr_mul(r45293, r45290, r45292, MPFR_RNDN);
        mpfr_log(r45294, r45267, MPFR_RNDN);
        mpfr_mul(r45295, r45271, r45294, MPFR_RNDN);
        mpfr_sub(r45296, r45295, r45274, MPFR_RNDN);
        mpfr_add(r45297, r45293, r45296, MPFR_RNDN);
        if (mpfr_get_si(r45269, MPFR_RNDN)) { mpfr_set(r45298, r45289, MPFR_RNDN); } else { mpfr_set(r45298, r45297, MPFR_RNDN); };
        return mpfr_get_d(r45298, MPFR_RNDN);
}

