#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 r45226 = x;
        float r45227 = 0.5;
        float r45228 = r45226 - r45227;
        float r45229 = log(r45226);
        float r45230 = r45228 * r45229;
        float r45231 = r45230 - r45226;
        float r45232 = 0.91893853320467;
        float r45233 = r45231 + r45232;
        float r45234 = y;
        float r45235 = 0.0007936500793651;
        float r45236 = r45234 + r45235;
        float r45237 = z;
        float r45238 = r45236 * r45237;
        float r45239 = 0.0027777777777778;
        float r45240 = r45238 - r45239;
        float r45241 = r45240 * r45237;
        float r45242 = 0.083333333333333;
        float r45243 = r45241 + r45242;
        float r45244 = r45243 / r45226;
        float r45245 = r45233 + r45244;
        return r45245;
}

double f_id(double x, double y, double z) {
        double r45246 = x;
        double r45247 = 0.5;
        double r45248 = r45246 - r45247;
        double r45249 = log(r45246);
        double r45250 = r45248 * r45249;
        double r45251 = r45250 - r45246;
        double r45252 = 0.91893853320467;
        double r45253 = r45251 + r45252;
        double r45254 = y;
        double r45255 = 0.0007936500793651;
        double r45256 = r45254 + r45255;
        double r45257 = z;
        double r45258 = r45256 * r45257;
        double r45259 = 0.0027777777777778;
        double r45260 = r45258 - r45259;
        double r45261 = r45260 * r45257;
        double r45262 = 0.083333333333333;
        double r45263 = r45261 + r45262;
        double r45264 = r45263 / r45246;
        double r45265 = r45253 + r45264;
        return r45265;
}


double f_of(float x, float y, float z) {
        float r45266 = x;
        float r45267 = 6031115.829667645;
        bool r45268 = r45266 <= r45267;
        float r45269 = z;
        float r45270 = r45269 * r45269;
        float r45271 = y;
        float r45272 = 0.0007936500793651;
        float r45273 = r45271 + r45272;
        float r45274 = r45270 * r45273;
        float r45275 = 0.0027777777777778;
        float r45276 = r45269 * r45275;
        float r45277 = 0.083333333333333;
        float r45278 = r45276 - r45277;
        float r45279 = r45274 - r45278;
        float r45280 = r45279 / r45266;
        float r45281 = 0.5;
        float r45282 = r45266 - r45281;
        float r45283 = log(r45266);
        float r45284 = r45282 * r45283;
        float r45285 = cbrt(r45284);
        float r45286 = r45285 * r45285;
        float r45287 = r45286 * r45285;
        float r45288 = 0.91893853320467;
        float r45289 = r45266 - r45288;
        float r45290 = r45287 - r45289;
        float r45291 = r45280 + r45290;
        float r45292 = r45269 / r45266;
        float r45293 = r45269 * r45273;
        float r45294 = r45293 - r45275;
        float r45295 = r45292 * r45294;
        float r45296 = r45284 - r45289;
        float r45297 = r45295 + r45296;
        float r45298 = r45268 ? r45291 : r45297;
        return r45298;
}

double f_od(double x, double y, double z) {
        double r45299 = x;
        double r45300 = 6031115.829667645;
        bool r45301 = r45299 <= r45300;
        double r45302 = z;
        double r45303 = r45302 * r45302;
        double r45304 = y;
        double r45305 = 0.0007936500793651;
        double r45306 = r45304 + r45305;
        double r45307 = r45303 * r45306;
        double r45308 = 0.0027777777777778;
        double r45309 = r45302 * r45308;
        double r45310 = 0.083333333333333;
        double r45311 = r45309 - r45310;
        double r45312 = r45307 - r45311;
        double r45313 = r45312 / r45299;
        double r45314 = 0.5;
        double r45315 = r45299 - r45314;
        double r45316 = log(r45299);
        double r45317 = r45315 * r45316;
        double r45318 = cbrt(r45317);
        double r45319 = r45318 * r45318;
        double r45320 = r45319 * r45318;
        double r45321 = 0.91893853320467;
        double r45322 = r45299 - r45321;
        double r45323 = r45320 - r45322;
        double r45324 = r45313 + r45323;
        double r45325 = r45302 / r45299;
        double r45326 = r45302 * r45306;
        double r45327 = r45326 - r45308;
        double r45328 = r45325 * r45327;
        double r45329 = r45317 - r45322;
        double r45330 = r45328 + r45329;
        double r45331 = r45301 ? r45324 : r45330;
        return r45331;
}

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 r45332, r45333, r45334, r45335, r45336, r45337, r45338, r45339, r45340, r45341, r45342, r45343, r45344, r45345, r45346, r45347, r45348, r45349, r45350, r45351;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45332);
        mpfr_init_set_str(r45333, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45334);
        mpfr_init(r45335);
        mpfr_init(r45336);
        mpfr_init(r45337);
        mpfr_init_set_str(r45338, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45339);
        mpfr_init(r45340);
        mpfr_init_set_str(r45341, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45342);
        mpfr_init(r45343);
        mpfr_init(r45344);
        mpfr_init_set_str(r45345, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45346);
        mpfr_init(r45347);
        mpfr_init_set_str(r45348, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45349);
        mpfr_init(r45350);
        mpfr_init(r45351);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45332, x, MPFR_RNDN);
        ;
        mpfr_sub(r45334, r45332, r45333, MPFR_RNDN);
        mpfr_log(r45335, r45332, MPFR_RNDN);
        mpfr_mul(r45336, r45334, r45335, MPFR_RNDN);
        mpfr_sub(r45337, r45336, r45332, MPFR_RNDN);
        ;
        mpfr_add(r45339, r45337, r45338, MPFR_RNDN);
        mpfr_set_d(r45340, y, MPFR_RNDN);
        ;
        mpfr_add(r45342, r45340, r45341, MPFR_RNDN);
        mpfr_set_d(r45343, z, MPFR_RNDN);
        mpfr_mul(r45344, r45342, r45343, MPFR_RNDN);
        ;
        mpfr_sub(r45346, r45344, r45345, MPFR_RNDN);
        mpfr_mul(r45347, r45346, r45343, MPFR_RNDN);
        ;
        mpfr_add(r45349, r45347, r45348, MPFR_RNDN);
        mpfr_div(r45350, r45349, r45332, MPFR_RNDN);
        mpfr_add(r45351, r45339, r45350, MPFR_RNDN);
        return mpfr_get_d(r45351, MPFR_RNDN);
}

static mpfr_t r45352, r45353, r45354, r45355, r45356, r45357, r45358, r45359, r45360, r45361, r45362, r45363, r45364, r45365, r45366, r45367, r45368, r45369, r45370, r45371, r45372, r45373, r45374, r45375, r45376, r45377, r45378, r45379, r45380, r45381, r45382, r45383, r45384;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45352);
        mpfr_init_set_str(r45353, "6031115.829667645", 10, MPFR_RNDN);
        mpfr_init(r45354);
        mpfr_init(r45355);
        mpfr_init(r45356);
        mpfr_init(r45357);
        mpfr_init_set_str(r45358, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45359);
        mpfr_init(r45360);
        mpfr_init_set_str(r45361, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45362);
        mpfr_init_set_str(r45363, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45364);
        mpfr_init(r45365);
        mpfr_init(r45366);
        mpfr_init_set_str(r45367, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45368);
        mpfr_init(r45369);
        mpfr_init(r45370);
        mpfr_init(r45371);
        mpfr_init(r45372);
        mpfr_init(r45373);
        mpfr_init_set_str(r45374, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45375);
        mpfr_init(r45376);
        mpfr_init(r45377);
        mpfr_init(r45378);
        mpfr_init(r45379);
        mpfr_init(r45380);
        mpfr_init(r45381);
        mpfr_init(r45382);
        mpfr_init(r45383);
        mpfr_init(r45384);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45352, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45354, mpfr_cmp(r45352, r45353) <= 0, MPFR_RNDN);
        mpfr_set_d(r45355, z, MPFR_RNDN);
        mpfr_mul(r45356, r45355, r45355, MPFR_RNDN);
        mpfr_set_d(r45357, y, MPFR_RNDN);
        ;
        mpfr_add(r45359, r45357, r45358, MPFR_RNDN);
        mpfr_mul(r45360, r45356, r45359, MPFR_RNDN);
        ;
        mpfr_mul(r45362, r45355, r45361, MPFR_RNDN);
        ;
        mpfr_sub(r45364, r45362, r45363, MPFR_RNDN);
        mpfr_sub(r45365, r45360, r45364, MPFR_RNDN);
        mpfr_div(r45366, r45365, r45352, MPFR_RNDN);
        ;
        mpfr_sub(r45368, r45352, r45367, MPFR_RNDN);
        mpfr_log(r45369, r45352, MPFR_RNDN);
        mpfr_mul(r45370, r45368, r45369, MPFR_RNDN);
        mpfr_cbrt(r45371, r45370, MPFR_RNDN);
        mpfr_mul(r45372, r45371, r45371, MPFR_RNDN);
        mpfr_mul(r45373, r45372, r45371, MPFR_RNDN);
        ;
        mpfr_sub(r45375, r45352, r45374, MPFR_RNDN);
        mpfr_sub(r45376, r45373, r45375, MPFR_RNDN);
        mpfr_add(r45377, r45366, r45376, MPFR_RNDN);
        mpfr_div(r45378, r45355, r45352, MPFR_RNDN);
        mpfr_mul(r45379, r45355, r45359, MPFR_RNDN);
        mpfr_sub(r45380, r45379, r45361, MPFR_RNDN);
        mpfr_mul(r45381, r45378, r45380, MPFR_RNDN);
        mpfr_sub(r45382, r45370, r45375, MPFR_RNDN);
        mpfr_add(r45383, r45381, r45382, MPFR_RNDN);
        if (mpfr_get_si(r45354, MPFR_RNDN)) { mpfr_set(r45384, r45377, MPFR_RNDN); } else { mpfr_set(r45384, r45383, MPFR_RNDN); };
        return mpfr_get_d(r45384, MPFR_RNDN);
}

static mpfr_t r45385, r45386, r45387, r45388, r45389, r45390, r45391, r45392, r45393, r45394, r45395, r45396, r45397, r45398, r45399, r45400, r45401, r45402, r45403, r45404, r45405, r45406, r45407, r45408, r45409, r45410, r45411, r45412, r45413, r45414, r45415, r45416, r45417;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45385);
        mpfr_init_set_str(r45386, "6031115.829667645", 10, MPFR_RNDN);
        mpfr_init(r45387);
        mpfr_init(r45388);
        mpfr_init(r45389);
        mpfr_init(r45390);
        mpfr_init_set_str(r45391, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45392);
        mpfr_init(r45393);
        mpfr_init_set_str(r45394, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45395);
        mpfr_init_set_str(r45396, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45397);
        mpfr_init(r45398);
        mpfr_init(r45399);
        mpfr_init_set_str(r45400, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45401);
        mpfr_init(r45402);
        mpfr_init(r45403);
        mpfr_init(r45404);
        mpfr_init(r45405);
        mpfr_init(r45406);
        mpfr_init_set_str(r45407, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45408);
        mpfr_init(r45409);
        mpfr_init(r45410);
        mpfr_init(r45411);
        mpfr_init(r45412);
        mpfr_init(r45413);
        mpfr_init(r45414);
        mpfr_init(r45415);
        mpfr_init(r45416);
        mpfr_init(r45417);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45385, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45387, mpfr_cmp(r45385, r45386) <= 0, MPFR_RNDN);
        mpfr_set_d(r45388, z, MPFR_RNDN);
        mpfr_mul(r45389, r45388, r45388, MPFR_RNDN);
        mpfr_set_d(r45390, y, MPFR_RNDN);
        ;
        mpfr_add(r45392, r45390, r45391, MPFR_RNDN);
        mpfr_mul(r45393, r45389, r45392, MPFR_RNDN);
        ;
        mpfr_mul(r45395, r45388, r45394, MPFR_RNDN);
        ;
        mpfr_sub(r45397, r45395, r45396, MPFR_RNDN);
        mpfr_sub(r45398, r45393, r45397, MPFR_RNDN);
        mpfr_div(r45399, r45398, r45385, MPFR_RNDN);
        ;
        mpfr_sub(r45401, r45385, r45400, MPFR_RNDN);
        mpfr_log(r45402, r45385, MPFR_RNDN);
        mpfr_mul(r45403, r45401, r45402, MPFR_RNDN);
        mpfr_cbrt(r45404, r45403, MPFR_RNDN);
        mpfr_mul(r45405, r45404, r45404, MPFR_RNDN);
        mpfr_mul(r45406, r45405, r45404, MPFR_RNDN);
        ;
        mpfr_sub(r45408, r45385, r45407, MPFR_RNDN);
        mpfr_sub(r45409, r45406, r45408, MPFR_RNDN);
        mpfr_add(r45410, r45399, r45409, MPFR_RNDN);
        mpfr_div(r45411, r45388, r45385, MPFR_RNDN);
        mpfr_mul(r45412, r45388, r45392, MPFR_RNDN);
        mpfr_sub(r45413, r45412, r45394, MPFR_RNDN);
        mpfr_mul(r45414, r45411, r45413, MPFR_RNDN);
        mpfr_sub(r45415, r45403, r45408, MPFR_RNDN);
        mpfr_add(r45416, r45414, r45415, MPFR_RNDN);
        if (mpfr_get_si(r45387, MPFR_RNDN)) { mpfr_set(r45417, r45410, MPFR_RNDN); } else { mpfr_set(r45417, r45416, MPFR_RNDN); };
        return mpfr_get_d(r45417, MPFR_RNDN);
}

