#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 r45390 = x;
        float r45391 = 0.5;
        float r45392 = r45390 - r45391;
        float r45393 = log(r45390);
        float r45394 = r45392 * r45393;
        float r45395 = r45394 - r45390;
        float r45396 = 0.91893853320467;
        float r45397 = r45395 + r45396;
        float r45398 = y;
        float r45399 = 0.0007936500793651;
        float r45400 = r45398 + r45399;
        float r45401 = z;
        float r45402 = r45400 * r45401;
        float r45403 = 0.0027777777777778;
        float r45404 = r45402 - r45403;
        float r45405 = r45404 * r45401;
        float r45406 = 0.083333333333333;
        float r45407 = r45405 + r45406;
        float r45408 = r45407 / r45390;
        float r45409 = r45397 + r45408;
        return r45409;
}

double f_id(double x, double y, double z) {
        double r45410 = x;
        double r45411 = 0.5;
        double r45412 = r45410 - r45411;
        double r45413 = log(r45410);
        double r45414 = r45412 * r45413;
        double r45415 = r45414 - r45410;
        double r45416 = 0.91893853320467;
        double r45417 = r45415 + r45416;
        double r45418 = y;
        double r45419 = 0.0007936500793651;
        double r45420 = r45418 + r45419;
        double r45421 = z;
        double r45422 = r45420 * r45421;
        double r45423 = 0.0027777777777778;
        double r45424 = r45422 - r45423;
        double r45425 = r45424 * r45421;
        double r45426 = 0.083333333333333;
        double r45427 = r45425 + r45426;
        double r45428 = r45427 / r45410;
        double r45429 = r45417 + r45428;
        return r45429;
}


double f_of(float x, float y, float z) {
        float r45430 = x;
        float r45431 = 2.010905816913073e+22;
        bool r45432 = r45430 <= r45431;
        float r45433 = z;
        float r45434 = r45433 * r45433;
        float r45435 = y;
        float r45436 = 0.0007936500793651;
        float r45437 = r45435 + r45436;
        float r45438 = r45434 * r45437;
        float r45439 = 0.0027777777777778;
        float r45440 = r45433 * r45439;
        float r45441 = 0.083333333333333;
        float r45442 = r45440 - r45441;
        float r45443 = r45438 - r45442;
        float r45444 = r45443 / r45430;
        float r45445 = 0.5;
        float r45446 = r45430 - r45445;
        float r45447 = log(r45430);
        float r45448 = r45446 * r45447;
        float r45449 = 0.91893853320467;
        float r45450 = r45430 - r45449;
        float r45451 = r45448 - r45450;
        float r45452 = r45444 + r45451;
        float r45453 = r45433 / r45430;
        float r45454 = r45433 * r45437;
        float r45455 = r45454 - r45439;
        float r45456 = r45453 * r45455;
        float r45457 = r45456 + r45451;
        float r45458 = r45432 ? r45452 : r45457;
        return r45458;
}

double f_od(double x, double y, double z) {
        double r45459 = x;
        double r45460 = 2.010905816913073e+22;
        bool r45461 = r45459 <= r45460;
        double r45462 = z;
        double r45463 = r45462 * r45462;
        double r45464 = y;
        double r45465 = 0.0007936500793651;
        double r45466 = r45464 + r45465;
        double r45467 = r45463 * r45466;
        double r45468 = 0.0027777777777778;
        double r45469 = r45462 * r45468;
        double r45470 = 0.083333333333333;
        double r45471 = r45469 - r45470;
        double r45472 = r45467 - r45471;
        double r45473 = r45472 / r45459;
        double r45474 = 0.5;
        double r45475 = r45459 - r45474;
        double r45476 = log(r45459);
        double r45477 = r45475 * r45476;
        double r45478 = 0.91893853320467;
        double r45479 = r45459 - r45478;
        double r45480 = r45477 - r45479;
        double r45481 = r45473 + r45480;
        double r45482 = r45462 / r45459;
        double r45483 = r45462 * r45466;
        double r45484 = r45483 - r45468;
        double r45485 = r45482 * r45484;
        double r45486 = r45485 + r45480;
        double r45487 = r45461 ? r45481 : r45486;
        return r45487;
}

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 r45488, r45489, r45490, r45491, r45492, r45493, r45494, r45495, r45496, r45497, r45498, r45499, r45500, r45501, r45502, r45503, r45504, r45505, r45506, r45507;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45488);
        mpfr_init_set_str(r45489, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45490);
        mpfr_init(r45491);
        mpfr_init(r45492);
        mpfr_init(r45493);
        mpfr_init_set_str(r45494, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45495);
        mpfr_init(r45496);
        mpfr_init_set_str(r45497, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45498);
        mpfr_init(r45499);
        mpfr_init(r45500);
        mpfr_init_set_str(r45501, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45502);
        mpfr_init(r45503);
        mpfr_init_set_str(r45504, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45505);
        mpfr_init(r45506);
        mpfr_init(r45507);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45488, x, MPFR_RNDN);
        ;
        mpfr_sub(r45490, r45488, r45489, MPFR_RNDN);
        mpfr_log(r45491, r45488, MPFR_RNDN);
        mpfr_mul(r45492, r45490, r45491, MPFR_RNDN);
        mpfr_sub(r45493, r45492, r45488, MPFR_RNDN);
        ;
        mpfr_add(r45495, r45493, r45494, MPFR_RNDN);
        mpfr_set_d(r45496, y, MPFR_RNDN);
        ;
        mpfr_add(r45498, r45496, r45497, MPFR_RNDN);
        mpfr_set_d(r45499, z, MPFR_RNDN);
        mpfr_mul(r45500, r45498, r45499, MPFR_RNDN);
        ;
        mpfr_sub(r45502, r45500, r45501, MPFR_RNDN);
        mpfr_mul(r45503, r45502, r45499, MPFR_RNDN);
        ;
        mpfr_add(r45505, r45503, r45504, MPFR_RNDN);
        mpfr_div(r45506, r45505, r45488, MPFR_RNDN);
        mpfr_add(r45507, r45495, r45506, MPFR_RNDN);
        return mpfr_get_d(r45507, MPFR_RNDN);
}

static mpfr_t r45508, r45509, r45510, r45511, r45512, r45513, r45514, r45515, r45516, r45517, r45518, r45519, r45520, r45521, r45522, r45523, r45524, r45525, r45526, r45527, r45528, r45529, r45530, r45531, r45532, r45533, r45534, r45535, r45536;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45508);
        mpfr_init_set_str(r45509, "2.010905816913073e+22", 10, MPFR_RNDN);
        mpfr_init(r45510);
        mpfr_init(r45511);
        mpfr_init(r45512);
        mpfr_init(r45513);
        mpfr_init_set_str(r45514, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45515);
        mpfr_init(r45516);
        mpfr_init_set_str(r45517, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45518);
        mpfr_init_set_str(r45519, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45520);
        mpfr_init(r45521);
        mpfr_init(r45522);
        mpfr_init_set_str(r45523, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45524);
        mpfr_init(r45525);
        mpfr_init(r45526);
        mpfr_init_set_str(r45527, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45528);
        mpfr_init(r45529);
        mpfr_init(r45530);
        mpfr_init(r45531);
        mpfr_init(r45532);
        mpfr_init(r45533);
        mpfr_init(r45534);
        mpfr_init(r45535);
        mpfr_init(r45536);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45508, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45510, mpfr_cmp(r45508, r45509) <= 0, MPFR_RNDN);
        mpfr_set_d(r45511, z, MPFR_RNDN);
        mpfr_mul(r45512, r45511, r45511, MPFR_RNDN);
        mpfr_set_d(r45513, y, MPFR_RNDN);
        ;
        mpfr_add(r45515, r45513, r45514, MPFR_RNDN);
        mpfr_mul(r45516, r45512, r45515, MPFR_RNDN);
        ;
        mpfr_mul(r45518, r45511, r45517, MPFR_RNDN);
        ;
        mpfr_sub(r45520, r45518, r45519, MPFR_RNDN);
        mpfr_sub(r45521, r45516, r45520, MPFR_RNDN);
        mpfr_div(r45522, r45521, r45508, MPFR_RNDN);
        ;
        mpfr_sub(r45524, r45508, r45523, MPFR_RNDN);
        mpfr_log(r45525, r45508, MPFR_RNDN);
        mpfr_mul(r45526, r45524, r45525, MPFR_RNDN);
        ;
        mpfr_sub(r45528, r45508, r45527, MPFR_RNDN);
        mpfr_sub(r45529, r45526, r45528, MPFR_RNDN);
        mpfr_add(r45530, r45522, r45529, MPFR_RNDN);
        mpfr_div(r45531, r45511, r45508, MPFR_RNDN);
        mpfr_mul(r45532, r45511, r45515, MPFR_RNDN);
        mpfr_sub(r45533, r45532, r45517, MPFR_RNDN);
        mpfr_mul(r45534, r45531, r45533, MPFR_RNDN);
        mpfr_add(r45535, r45534, r45529, MPFR_RNDN);
        if (mpfr_get_si(r45510, MPFR_RNDN)) { mpfr_set(r45536, r45530, MPFR_RNDN); } else { mpfr_set(r45536, r45535, MPFR_RNDN); };
        return mpfr_get_d(r45536, MPFR_RNDN);
}

static mpfr_t r45537, r45538, r45539, r45540, r45541, r45542, r45543, r45544, r45545, r45546, r45547, r45548, r45549, r45550, r45551, r45552, r45553, r45554, r45555, r45556, r45557, r45558, r45559, r45560, r45561, r45562, r45563, r45564, r45565;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45537);
        mpfr_init_set_str(r45538, "2.010905816913073e+22", 10, MPFR_RNDN);
        mpfr_init(r45539);
        mpfr_init(r45540);
        mpfr_init(r45541);
        mpfr_init(r45542);
        mpfr_init_set_str(r45543, "0.0007936500793651", 10, MPFR_RNDN);
        mpfr_init(r45544);
        mpfr_init(r45545);
        mpfr_init_set_str(r45546, "0.0027777777777778", 10, MPFR_RNDN);
        mpfr_init(r45547);
        mpfr_init_set_str(r45548, "0.083333333333333", 10, MPFR_RNDN);
        mpfr_init(r45549);
        mpfr_init(r45550);
        mpfr_init(r45551);
        mpfr_init_set_str(r45552, "0.5", 10, MPFR_RNDN);
        mpfr_init(r45553);
        mpfr_init(r45554);
        mpfr_init(r45555);
        mpfr_init_set_str(r45556, "0.91893853320467", 10, MPFR_RNDN);
        mpfr_init(r45557);
        mpfr_init(r45558);
        mpfr_init(r45559);
        mpfr_init(r45560);
        mpfr_init(r45561);
        mpfr_init(r45562);
        mpfr_init(r45563);
        mpfr_init(r45564);
        mpfr_init(r45565);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45537, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45539, mpfr_cmp(r45537, r45538) <= 0, MPFR_RNDN);
        mpfr_set_d(r45540, z, MPFR_RNDN);
        mpfr_mul(r45541, r45540, r45540, MPFR_RNDN);
        mpfr_set_d(r45542, y, MPFR_RNDN);
        ;
        mpfr_add(r45544, r45542, r45543, MPFR_RNDN);
        mpfr_mul(r45545, r45541, r45544, MPFR_RNDN);
        ;
        mpfr_mul(r45547, r45540, r45546, MPFR_RNDN);
        ;
        mpfr_sub(r45549, r45547, r45548, MPFR_RNDN);
        mpfr_sub(r45550, r45545, r45549, MPFR_RNDN);
        mpfr_div(r45551, r45550, r45537, MPFR_RNDN);
        ;
        mpfr_sub(r45553, r45537, r45552, MPFR_RNDN);
        mpfr_log(r45554, r45537, MPFR_RNDN);
        mpfr_mul(r45555, r45553, r45554, MPFR_RNDN);
        ;
        mpfr_sub(r45557, r45537, r45556, MPFR_RNDN);
        mpfr_sub(r45558, r45555, r45557, MPFR_RNDN);
        mpfr_add(r45559, r45551, r45558, MPFR_RNDN);
        mpfr_div(r45560, r45540, r45537, MPFR_RNDN);
        mpfr_mul(r45561, r45540, r45544, MPFR_RNDN);
        mpfr_sub(r45562, r45561, r45546, MPFR_RNDN);
        mpfr_mul(r45563, r45560, r45562, MPFR_RNDN);
        mpfr_add(r45564, r45563, r45558, MPFR_RNDN);
        if (mpfr_get_si(r45539, MPFR_RNDN)) { mpfr_set(r45565, r45559, MPFR_RNDN); } else { mpfr_set(r45565, r45564, MPFR_RNDN); };
        return mpfr_get_d(r45565, MPFR_RNDN);
}

