#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 r45363 = x;
        float r45364 = 0.5;
        float r45365 = r45363 - r45364;
        float r45366 = log(r45363);
        float r45367 = r45365 * r45366;
        float r45368 = r45367 - r45363;
        float r45369 = 0.91893853320467;
        float r45370 = r45368 + r45369;
        float r45371 = y;
        float r45372 = 0.0007936500793651;
        float r45373 = r45371 + r45372;
        float r45374 = z;
        float r45375 = r45373 * r45374;
        float r45376 = 0.0027777777777778;
        float r45377 = r45375 - r45376;
        float r45378 = r45377 * r45374;
        float r45379 = 0.083333333333333;
        float r45380 = r45378 + r45379;
        float r45381 = r45380 / r45363;
        float r45382 = r45370 + r45381;
        return r45382;
}

double f_id(double x, double y, double z) {
        double r45383 = x;
        double r45384 = 0.5;
        double r45385 = r45383 - r45384;
        double r45386 = log(r45383);
        double r45387 = r45385 * r45386;
        double r45388 = r45387 - r45383;
        double r45389 = 0.91893853320467;
        double r45390 = r45388 + r45389;
        double r45391 = y;
        double r45392 = 0.0007936500793651;
        double r45393 = r45391 + r45392;
        double r45394 = z;
        double r45395 = r45393 * r45394;
        double r45396 = 0.0027777777777778;
        double r45397 = r45395 - r45396;
        double r45398 = r45397 * r45394;
        double r45399 = 0.083333333333333;
        double r45400 = r45398 + r45399;
        double r45401 = r45400 / r45383;
        double r45402 = r45390 + r45401;
        return r45402;
}


double f_of(float x, float y, float z) {
        float r45403 = x;
        float r45404 = 4523337.408216055;
        bool r45405 = r45403 <= r45404;
        float r45406 = 0.5;
        float r45407 = r45403 - r45406;
        float r45408 = pow(r45403, r45407);
        float r45409 = 0.91893853320467;
        float r45410 = r45403 - r45409;
        float r45411 = exp(r45410);
        float r45412 = r45408 / r45411;
        float r45413 = log(r45412);
        float r45414 = y;
        float r45415 = 0.0007936500793651;
        float r45416 = r45414 + r45415;
        float r45417 = z;
        float r45418 = r45416 * r45417;
        float r45419 = 0.0027777777777778;
        float r45420 = r45418 - r45419;
        float r45421 = r45420 * r45417;
        float r45422 = 0.083333333333333;
        float r45423 = r45421 + r45422;
        float r45424 = r45423 / r45403;
        float r45425 = r45413 + r45424;
        float r45426 = r45417 / r45403;
        float r45427 = r45417 * r45416;
        float r45428 = r45427 - r45419;
        float r45429 = r45426 * r45428;
        float r45430 = log(r45403);
        float r45431 = r45407 * r45430;
        float r45432 = r45431 - r45410;
        float r45433 = r45429 + r45432;
        float r45434 = r45405 ? r45425 : r45433;
        return r45434;
}

double f_od(double x, double y, double z) {
        double r45435 = x;
        double r45436 = 4523337.408216055;
        bool r45437 = r45435 <= r45436;
        double r45438 = 0.5;
        double r45439 = r45435 - r45438;
        double r45440 = pow(r45435, r45439);
        double r45441 = 0.91893853320467;
        double r45442 = r45435 - r45441;
        double r45443 = exp(r45442);
        double r45444 = r45440 / r45443;
        double r45445 = log(r45444);
        double r45446 = y;
        double r45447 = 0.0007936500793651;
        double r45448 = r45446 + r45447;
        double r45449 = z;
        double r45450 = r45448 * r45449;
        double r45451 = 0.0027777777777778;
        double r45452 = r45450 - r45451;
        double r45453 = r45452 * r45449;
        double r45454 = 0.083333333333333;
        double r45455 = r45453 + r45454;
        double r45456 = r45455 / r45435;
        double r45457 = r45445 + r45456;
        double r45458 = r45449 / r45435;
        double r45459 = r45449 * r45448;
        double r45460 = r45459 - r45451;
        double r45461 = r45458 * r45460;
        double r45462 = log(r45435);
        double r45463 = r45439 * r45462;
        double r45464 = r45463 - r45442;
        double r45465 = r45461 + r45464;
        double r45466 = r45437 ? r45457 : r45465;
        return r45466;
}

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 r45467, r45468, r45469, r45470, r45471, r45472, r45473, r45474, r45475, r45476, r45477, r45478, r45479, r45480, r45481, r45482, r45483, r45484, r45485, r45486;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45467);
        mpfr_init_set_str(r45468, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45469);
        mpfr_init(r45470);
        mpfr_init(r45471);
        mpfr_init(r45472);
        mpfr_init_set_str(r45473, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45474);
        mpfr_init(r45475);
        mpfr_init_set_str(r45476, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45477);
        mpfr_init(r45478);
        mpfr_init(r45479);
        mpfr_init_set_str(r45480, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45481);
        mpfr_init(r45482);
        mpfr_init_set_str(r45483, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45484);
        mpfr_init(r45485);
        mpfr_init(r45486);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45467, x, MPFR_RNDN);
        ;
        mpfr_sub(r45469, r45467, r45468, MPFR_RNDN);
        mpfr_log(r45470, r45467, MPFR_RNDN);
        mpfr_mul(r45471, r45469, r45470, MPFR_RNDN);
        mpfr_sub(r45472, r45471, r45467, MPFR_RNDN);
        ;
        mpfr_add(r45474, r45472, r45473, MPFR_RNDN);
        mpfr_set_d(r45475, y, MPFR_RNDN);
        ;
        mpfr_add(r45477, r45475, r45476, MPFR_RNDN);
        mpfr_set_d(r45478, z, MPFR_RNDN);
        mpfr_mul(r45479, r45477, r45478, MPFR_RNDN);
        ;
        mpfr_sub(r45481, r45479, r45480, MPFR_RNDN);
        mpfr_mul(r45482, r45481, r45478, MPFR_RNDN);
        ;
        mpfr_add(r45484, r45482, r45483, MPFR_RNDN);
        mpfr_div(r45485, r45484, r45467, MPFR_RNDN);
        mpfr_add(r45486, r45474, r45485, MPFR_RNDN);
        return mpfr_get_d(r45486, MPFR_RNDN);
}

static mpfr_t r45487, r45488, r45489, r45490, r45491, r45492, r45493, r45494, r45495, r45496, r45497, r45498, r45499, r45500, r45501, r45502, r45503, r45504, r45505, r45506, r45507, r45508, r45509, r45510, r45511, r45512, r45513, r45514, r45515, r45516, r45517, r45518;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45487);
        mpfr_init_set_str(r45488, "4523337.408216055", 10, MPFR_RNDN);
        mpfr_init(r45489);
        mpfr_init_set_str(r45490, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45491);
        mpfr_init(r45492);
        mpfr_init_set_str(r45493, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45494);
        mpfr_init(r45495);
        mpfr_init(r45496);
        mpfr_init(r45497);
        mpfr_init(r45498);
        mpfr_init_set_str(r45499, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45500);
        mpfr_init(r45501);
        mpfr_init(r45502);
        mpfr_init_set_str(r45503, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45504);
        mpfr_init(r45505);
        mpfr_init_set_str(r45506, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45507);
        mpfr_init(r45508);
        mpfr_init(r45509);
        mpfr_init(r45510);
        mpfr_init(r45511);
        mpfr_init(r45512);
        mpfr_init(r45513);
        mpfr_init(r45514);
        mpfr_init(r45515);
        mpfr_init(r45516);
        mpfr_init(r45517);
        mpfr_init(r45518);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45487, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45489, mpfr_cmp(r45487, r45488) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r45491, r45487, r45490, MPFR_RNDN);
        mpfr_pow(r45492, r45487, r45491, MPFR_RNDN);
        ;
        mpfr_sub(r45494, r45487, r45493, MPFR_RNDN);
        mpfr_exp(r45495, r45494, MPFR_RNDN);
        mpfr_div(r45496, r45492, r45495, MPFR_RNDN);
        mpfr_log(r45497, r45496, MPFR_RNDN);
        mpfr_set_d(r45498, y, MPFR_RNDN);
        ;
        mpfr_add(r45500, r45498, r45499, MPFR_RNDN);
        mpfr_set_d(r45501, z, MPFR_RNDN);
        mpfr_mul(r45502, r45500, r45501, MPFR_RNDN);
        ;
        mpfr_sub(r45504, r45502, r45503, MPFR_RNDN);
        mpfr_mul(r45505, r45504, r45501, MPFR_RNDN);
        ;
        mpfr_add(r45507, r45505, r45506, MPFR_RNDN);
        mpfr_div(r45508, r45507, r45487, MPFR_RNDN);
        mpfr_add(r45509, r45497, r45508, MPFR_RNDN);
        mpfr_div(r45510, r45501, r45487, MPFR_RNDN);
        mpfr_mul(r45511, r45501, r45500, MPFR_RNDN);
        mpfr_sub(r45512, r45511, r45503, MPFR_RNDN);
        mpfr_mul(r45513, r45510, r45512, MPFR_RNDN);
        mpfr_log(r45514, r45487, MPFR_RNDN);
        mpfr_mul(r45515, r45491, r45514, MPFR_RNDN);
        mpfr_sub(r45516, r45515, r45494, MPFR_RNDN);
        mpfr_add(r45517, r45513, r45516, MPFR_RNDN);
        if (mpfr_get_si(r45489, MPFR_RNDN)) { mpfr_set(r45518, r45509, MPFR_RNDN); } else { mpfr_set(r45518, r45517, MPFR_RNDN); };
        return mpfr_get_d(r45518, MPFR_RNDN);
}

static mpfr_t r45519, r45520, r45521, r45522, r45523, r45524, r45525, r45526, r45527, r45528, r45529, r45530, r45531, r45532, r45533, r45534, r45535, r45536, r45537, r45538, r45539, r45540, r45541, r45542, r45543, r45544, r45545, r45546, r45547, r45548, r45549, r45550;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45519);
        mpfr_init_set_str(r45520, "4523337.408216055", 10, MPFR_RNDN);
        mpfr_init(r45521);
        mpfr_init_set_str(r45522, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45523);
        mpfr_init(r45524);
        mpfr_init_set_str(r45525, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45526);
        mpfr_init(r45527);
        mpfr_init(r45528);
        mpfr_init(r45529);
        mpfr_init(r45530);
        mpfr_init_set_str(r45531, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45532);
        mpfr_init(r45533);
        mpfr_init(r45534);
        mpfr_init_set_str(r45535, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45536);
        mpfr_init(r45537);
        mpfr_init_set_str(r45538, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45539);
        mpfr_init(r45540);
        mpfr_init(r45541);
        mpfr_init(r45542);
        mpfr_init(r45543);
        mpfr_init(r45544);
        mpfr_init(r45545);
        mpfr_init(r45546);
        mpfr_init(r45547);
        mpfr_init(r45548);
        mpfr_init(r45549);
        mpfr_init(r45550);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45519, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45521, mpfr_cmp(r45519, r45520) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r45523, r45519, r45522, MPFR_RNDN);
        mpfr_pow(r45524, r45519, r45523, MPFR_RNDN);
        ;
        mpfr_sub(r45526, r45519, r45525, MPFR_RNDN);
        mpfr_exp(r45527, r45526, MPFR_RNDN);
        mpfr_div(r45528, r45524, r45527, MPFR_RNDN);
        mpfr_log(r45529, r45528, MPFR_RNDN);
        mpfr_set_d(r45530, y, MPFR_RNDN);
        ;
        mpfr_add(r45532, r45530, r45531, MPFR_RNDN);
        mpfr_set_d(r45533, z, MPFR_RNDN);
        mpfr_mul(r45534, r45532, r45533, MPFR_RNDN);
        ;
        mpfr_sub(r45536, r45534, r45535, MPFR_RNDN);
        mpfr_mul(r45537, r45536, r45533, MPFR_RNDN);
        ;
        mpfr_add(r45539, r45537, r45538, MPFR_RNDN);
        mpfr_div(r45540, r45539, r45519, MPFR_RNDN);
        mpfr_add(r45541, r45529, r45540, MPFR_RNDN);
        mpfr_div(r45542, r45533, r45519, MPFR_RNDN);
        mpfr_mul(r45543, r45533, r45532, MPFR_RNDN);
        mpfr_sub(r45544, r45543, r45535, MPFR_RNDN);
        mpfr_mul(r45545, r45542, r45544, MPFR_RNDN);
        mpfr_log(r45546, r45519, MPFR_RNDN);
        mpfr_mul(r45547, r45523, r45546, MPFR_RNDN);
        mpfr_sub(r45548, r45547, r45526, MPFR_RNDN);
        mpfr_add(r45549, r45545, r45548, MPFR_RNDN);
        if (mpfr_get_si(r45521, MPFR_RNDN)) { mpfr_set(r45550, r45541, MPFR_RNDN); } else { mpfr_set(r45550, r45549, MPFR_RNDN); };
        return mpfr_get_d(r45550, MPFR_RNDN);
}

