#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 r45075 = x;
        float r45076 = 0.5;
        float r45077 = r45075 - r45076;
        float r45078 = log(r45075);
        float r45079 = r45077 * r45078;
        float r45080 = r45079 - r45075;
        float r45081 = 0.91893853320467;
        float r45082 = r45080 + r45081;
        float r45083 = y;
        float r45084 = 0.0007936500793651;
        float r45085 = r45083 + r45084;
        float r45086 = z;
        float r45087 = r45085 * r45086;
        float r45088 = 0.0027777777777778;
        float r45089 = r45087 - r45088;
        float r45090 = r45089 * r45086;
        float r45091 = 0.083333333333333;
        float r45092 = r45090 + r45091;
        float r45093 = r45092 / r45075;
        float r45094 = r45082 + r45093;
        return r45094;
}

double f_id(double x, double y, double z) {
        double r45095 = x;
        double r45096 = 0.5;
        double r45097 = r45095 - r45096;
        double r45098 = log(r45095);
        double r45099 = r45097 * r45098;
        double r45100 = r45099 - r45095;
        double r45101 = 0.91893853320467;
        double r45102 = r45100 + r45101;
        double r45103 = y;
        double r45104 = 0.0007936500793651;
        double r45105 = r45103 + r45104;
        double r45106 = z;
        double r45107 = r45105 * r45106;
        double r45108 = 0.0027777777777778;
        double r45109 = r45107 - r45108;
        double r45110 = r45109 * r45106;
        double r45111 = 0.083333333333333;
        double r45112 = r45110 + r45111;
        double r45113 = r45112 / r45095;
        double r45114 = r45102 + r45113;
        return r45114;
}


double f_of(float x, float y, float z) {
        float r45115 = x;
        float r45116 = 6031115.829667645;
        bool r45117 = r45115 <= r45116;
        float r45118 = z;
        float r45119 = r45118 * r45118;
        float r45120 = y;
        float r45121 = 0.0007936500793651;
        float r45122 = r45120 + r45121;
        float r45123 = r45119 * r45122;
        float r45124 = 0.0027777777777778;
        float r45125 = r45118 * r45124;
        float r45126 = 0.083333333333333;
        float r45127 = r45125 - r45126;
        float r45128 = r45123 - r45127;
        float r45129 = r45128 / r45115;
        float r45130 = r45115 * r45115;
        float r45131 = 0.5;
        float r45132 = r45131 * r45131;
        float r45133 = r45130 - r45132;
        float r45134 = log(r45115);
        float r45135 = r45133 * r45134;
        float r45136 = 0.91893853320467;
        float r45137 = r45115 + r45136;
        float r45138 = r45135 * r45137;
        float r45139 = r45115 + r45131;
        float r45140 = r45136 * r45136;
        float r45141 = r45130 - r45140;
        float r45142 = r45139 * r45141;
        float r45143 = r45138 - r45142;
        float r45144 = r45139 * r45137;
        float r45145 = r45143 / r45144;
        float r45146 = r45129 + r45145;
        float r45147 = r45118 / r45115;
        float r45148 = r45118 * r45122;
        float r45149 = r45148 - r45124;
        float r45150 = r45147 * r45149;
        float r45151 = r45115 - r45131;
        float r45152 = r45151 * r45134;
        float r45153 = r45115 - r45136;
        float r45154 = r45152 - r45153;
        float r45155 = r45150 + r45154;
        float r45156 = r45117 ? r45146 : r45155;
        return r45156;
}

double f_od(double x, double y, double z) {
        double r45157 = x;
        double r45158 = 6031115.829667645;
        bool r45159 = r45157 <= r45158;
        double r45160 = z;
        double r45161 = r45160 * r45160;
        double r45162 = y;
        double r45163 = 0.0007936500793651;
        double r45164 = r45162 + r45163;
        double r45165 = r45161 * r45164;
        double r45166 = 0.0027777777777778;
        double r45167 = r45160 * r45166;
        double r45168 = 0.083333333333333;
        double r45169 = r45167 - r45168;
        double r45170 = r45165 - r45169;
        double r45171 = r45170 / r45157;
        double r45172 = r45157 * r45157;
        double r45173 = 0.5;
        double r45174 = r45173 * r45173;
        double r45175 = r45172 - r45174;
        double r45176 = log(r45157);
        double r45177 = r45175 * r45176;
        double r45178 = 0.91893853320467;
        double r45179 = r45157 + r45178;
        double r45180 = r45177 * r45179;
        double r45181 = r45157 + r45173;
        double r45182 = r45178 * r45178;
        double r45183 = r45172 - r45182;
        double r45184 = r45181 * r45183;
        double r45185 = r45180 - r45184;
        double r45186 = r45181 * r45179;
        double r45187 = r45185 / r45186;
        double r45188 = r45171 + r45187;
        double r45189 = r45160 / r45157;
        double r45190 = r45160 * r45164;
        double r45191 = r45190 - r45166;
        double r45192 = r45189 * r45191;
        double r45193 = r45157 - r45173;
        double r45194 = r45193 * r45176;
        double r45195 = r45157 - r45178;
        double r45196 = r45194 - r45195;
        double r45197 = r45192 + r45196;
        double r45198 = r45159 ? r45188 : r45197;
        return r45198;
}

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 r45199, r45200, r45201, r45202, r45203, r45204, r45205, r45206, r45207, r45208, r45209, r45210, r45211, r45212, r45213, r45214, r45215, r45216, r45217, r45218;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45199);
        mpfr_init_set_str(r45200, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45201);
        mpfr_init(r45202);
        mpfr_init(r45203);
        mpfr_init(r45204);
        mpfr_init_set_str(r45205, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45206);
        mpfr_init(r45207);
        mpfr_init_set_str(r45208, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45209);
        mpfr_init(r45210);
        mpfr_init(r45211);
        mpfr_init_set_str(r45212, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45213);
        mpfr_init(r45214);
        mpfr_init_set_str(r45215, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45216);
        mpfr_init(r45217);
        mpfr_init(r45218);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45199, x, MPFR_RNDN);
        ;
        mpfr_sub(r45201, r45199, r45200, MPFR_RNDN);
        mpfr_log(r45202, r45199, MPFR_RNDN);
        mpfr_mul(r45203, r45201, r45202, MPFR_RNDN);
        mpfr_sub(r45204, r45203, r45199, MPFR_RNDN);
        ;
        mpfr_add(r45206, r45204, r45205, MPFR_RNDN);
        mpfr_set_d(r45207, y, MPFR_RNDN);
        ;
        mpfr_add(r45209, r45207, r45208, MPFR_RNDN);
        mpfr_set_d(r45210, z, MPFR_RNDN);
        mpfr_mul(r45211, r45209, r45210, MPFR_RNDN);
        ;
        mpfr_sub(r45213, r45211, r45212, MPFR_RNDN);
        mpfr_mul(r45214, r45213, r45210, MPFR_RNDN);
        ;
        mpfr_add(r45216, r45214, r45215, MPFR_RNDN);
        mpfr_div(r45217, r45216, r45199, MPFR_RNDN);
        mpfr_add(r45218, r45206, r45217, MPFR_RNDN);
        return mpfr_get_d(r45218, MPFR_RNDN);
}

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45219);
        mpfr_init_set_str(r45220, "6031115.829667645", 10, MPFR_RNDN);
        mpfr_init(r45221);
        mpfr_init(r45222);
        mpfr_init(r45223);
        mpfr_init(r45224);
        mpfr_init_set_str(r45225, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45226);
        mpfr_init(r45227);
        mpfr_init_set_str(r45228, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45229);
        mpfr_init_set_str(r45230, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45231);
        mpfr_init(r45232);
        mpfr_init(r45233);
        mpfr_init(r45234);
        mpfr_init_set_str(r45235, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45236);
        mpfr_init(r45237);
        mpfr_init(r45238);
        mpfr_init(r45239);
        mpfr_init_set_str(r45240, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45241);
        mpfr_init(r45242);
        mpfr_init(r45243);
        mpfr_init(r45244);
        mpfr_init(r45245);
        mpfr_init(r45246);
        mpfr_init(r45247);
        mpfr_init(r45248);
        mpfr_init(r45249);
        mpfr_init(r45250);
        mpfr_init(r45251);
        mpfr_init(r45252);
        mpfr_init(r45253);
        mpfr_init(r45254);
        mpfr_init(r45255);
        mpfr_init(r45256);
        mpfr_init(r45257);
        mpfr_init(r45258);
        mpfr_init(r45259);
        mpfr_init(r45260);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45219, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45221, mpfr_cmp(r45219, r45220) <= 0, MPFR_RNDN);
        mpfr_set_d(r45222, z, MPFR_RNDN);
        mpfr_mul(r45223, r45222, r45222, MPFR_RNDN);
        mpfr_set_d(r45224, y, MPFR_RNDN);
        ;
        mpfr_add(r45226, r45224, r45225, MPFR_RNDN);
        mpfr_mul(r45227, r45223, r45226, MPFR_RNDN);
        ;
        mpfr_mul(r45229, r45222, r45228, MPFR_RNDN);
        ;
        mpfr_sub(r45231, r45229, r45230, MPFR_RNDN);
        mpfr_sub(r45232, r45227, r45231, MPFR_RNDN);
        mpfr_div(r45233, r45232, r45219, MPFR_RNDN);
        mpfr_mul(r45234, r45219, r45219, MPFR_RNDN);
        ;
        mpfr_mul(r45236, r45235, r45235, MPFR_RNDN);
        mpfr_sub(r45237, r45234, r45236, MPFR_RNDN);
        mpfr_log(r45238, r45219, MPFR_RNDN);
        mpfr_mul(r45239, r45237, r45238, MPFR_RNDN);
        ;
        mpfr_add(r45241, r45219, r45240, MPFR_RNDN);
        mpfr_mul(r45242, r45239, r45241, MPFR_RNDN);
        mpfr_add(r45243, r45219, r45235, MPFR_RNDN);
        mpfr_mul(r45244, r45240, r45240, MPFR_RNDN);
        mpfr_sub(r45245, r45234, r45244, MPFR_RNDN);
        mpfr_mul(r45246, r45243, r45245, MPFR_RNDN);
        mpfr_sub(r45247, r45242, r45246, MPFR_RNDN);
        mpfr_mul(r45248, r45243, r45241, MPFR_RNDN);
        mpfr_div(r45249, r45247, r45248, MPFR_RNDN);
        mpfr_add(r45250, r45233, r45249, MPFR_RNDN);
        mpfr_div(r45251, r45222, r45219, MPFR_RNDN);
        mpfr_mul(r45252, r45222, r45226, MPFR_RNDN);
        mpfr_sub(r45253, r45252, r45228, MPFR_RNDN);
        mpfr_mul(r45254, r45251, r45253, MPFR_RNDN);
        mpfr_sub(r45255, r45219, r45235, MPFR_RNDN);
        mpfr_mul(r45256, r45255, r45238, MPFR_RNDN);
        mpfr_sub(r45257, r45219, r45240, MPFR_RNDN);
        mpfr_sub(r45258, r45256, r45257, MPFR_RNDN);
        mpfr_add(r45259, r45254, r45258, MPFR_RNDN);
        if (mpfr_get_si(r45221, MPFR_RNDN)) { mpfr_set(r45260, r45250, MPFR_RNDN); } else { mpfr_set(r45260, r45259, MPFR_RNDN); };
        return mpfr_get_d(r45260, MPFR_RNDN);
}

static mpfr_t r45261, r45262, r45263, r45264, r45265, r45266, 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, r45299, r45300, r45301, r45302;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45261);
        mpfr_init_set_str(r45262, "6031115.829667645", 10, MPFR_RNDN);
        mpfr_init(r45263);
        mpfr_init(r45264);
        mpfr_init(r45265);
        mpfr_init(r45266);
        mpfr_init_set_str(r45267, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45268);
        mpfr_init(r45269);
        mpfr_init_set_str(r45270, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45271);
        mpfr_init_set_str(r45272, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45273);
        mpfr_init(r45274);
        mpfr_init(r45275);
        mpfr_init(r45276);
        mpfr_init_set_str(r45277, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45278);
        mpfr_init(r45279);
        mpfr_init(r45280);
        mpfr_init(r45281);
        mpfr_init_set_str(r45282, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45283);
        mpfr_init(r45284);
        mpfr_init(r45285);
        mpfr_init(r45286);
        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);
        mpfr_init(r45299);
        mpfr_init(r45300);
        mpfr_init(r45301);
        mpfr_init(r45302);
}

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

