#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B";

double f_if(float x, float y, float z) {
        float r42447 = x;
        float r42448 = y;
        float r42449 = z;
        float r42450 = 0.0692910599291889;
        float r42451 = r42449 * r42450;
        float r42452 = 0.4917317610505968;
        float r42453 = r42451 + r42452;
        float r42454 = r42453 * r42449;
        float r42455 = 0.279195317918525;
        float r42456 = r42454 + r42455;
        float r42457 = r42448 * r42456;
        float r42458 = 6.012459259764103;
        float r42459 = r42449 + r42458;
        float r42460 = r42459 * r42449;
        float r42461 = 3.350343815022304;
        float r42462 = r42460 + r42461;
        float r42463 = r42457 / r42462;
        float r42464 = r42447 + r42463;
        return r42464;
}

double f_id(double x, double y, double z) {
        double r42465 = x;
        double r42466 = y;
        double r42467 = z;
        double r42468 = 0.0692910599291889;
        double r42469 = r42467 * r42468;
        double r42470 = 0.4917317610505968;
        double r42471 = r42469 + r42470;
        double r42472 = r42471 * r42467;
        double r42473 = 0.279195317918525;
        double r42474 = r42472 + r42473;
        double r42475 = r42466 * r42474;
        double r42476 = 6.012459259764103;
        double r42477 = r42467 + r42476;
        double r42478 = r42477 * r42467;
        double r42479 = 3.350343815022304;
        double r42480 = r42478 + r42479;
        double r42481 = r42475 / r42480;
        double r42482 = r42465 + r42481;
        return r42482;
}


double f_of(float x, float y, float z) {
        float r42483 = z;
        float r42484 = -354554309650.3642;
        bool r42485 = r42483 <= r42484;
        float r42486 = x;
        float r42487 = y;
        float r42488 = 0.0692910599291889;
        float r42489 = r42487 * r42488;
        float r42490 = r42486 + r42489;
        float r42491 = r42487 / r42483;
        float r42492 = 0.40462203869992125;
        float r42493 = r42492 / r42483;
        float r42494 = 0.07512208616047561;
        float r42495 = r42493 - r42494;
        float r42496 = r42491 * r42495;
        float r42497 = r42490 - r42496;
        float r42498 = 1.1570910217973246e-07;
        bool r42499 = r42483 <= r42498;
        float r42500 = 6.012459259764103;
        float r42501 = r42483 + r42500;
        float r42502 = r42501 * r42483;
        float r42503 = 3.350343815022304;
        float r42504 = r42502 + r42503;
        float r42505 = sqrt(r42504);
        float r42506 = r42487 / r42505;
        float r42507 = r42483 * r42488;
        float r42508 = 0.4917317610505968;
        float r42509 = r42507 + r42508;
        float r42510 = r42509 * r42483;
        float r42511 = 0.279195317918525;
        float r42512 = r42510 + r42511;
        float r42513 = r42512 / r42505;
        float r42514 = r42506 * r42513;
        float r42515 = r42486 + r42514;
        float r42516 = r42499 ? r42515 : r42497;
        float r42517 = r42485 ? r42497 : r42516;
        return r42517;
}

double f_od(double x, double y, double z) {
        double r42518 = z;
        double r42519 = -354554309650.3642;
        bool r42520 = r42518 <= r42519;
        double r42521 = x;
        double r42522 = y;
        double r42523 = 0.0692910599291889;
        double r42524 = r42522 * r42523;
        double r42525 = r42521 + r42524;
        double r42526 = r42522 / r42518;
        double r42527 = 0.40462203869992125;
        double r42528 = r42527 / r42518;
        double r42529 = 0.07512208616047561;
        double r42530 = r42528 - r42529;
        double r42531 = r42526 * r42530;
        double r42532 = r42525 - r42531;
        double r42533 = 1.1570910217973246e-07;
        bool r42534 = r42518 <= r42533;
        double r42535 = 6.012459259764103;
        double r42536 = r42518 + r42535;
        double r42537 = r42536 * r42518;
        double r42538 = 3.350343815022304;
        double r42539 = r42537 + r42538;
        double r42540 = sqrt(r42539);
        double r42541 = r42522 / r42540;
        double r42542 = r42518 * r42523;
        double r42543 = 0.4917317610505968;
        double r42544 = r42542 + r42543;
        double r42545 = r42544 * r42518;
        double r42546 = 0.279195317918525;
        double r42547 = r42545 + r42546;
        double r42548 = r42547 / r42540;
        double r42549 = r42541 * r42548;
        double r42550 = r42521 + r42549;
        double r42551 = r42534 ? r42550 : r42532;
        double r42552 = r42520 ? r42532 : r42551;
        return r42552;
}

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 r42553, r42554, r42555, r42556, r42557, r42558, r42559, r42560, r42561, r42562, r42563, r42564, r42565, r42566, r42567, r42568, r42569, r42570;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42553);
        mpfr_init(r42554);
        mpfr_init(r42555);
        mpfr_init_set_str(r42556, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42557);
        mpfr_init_set_str(r42558, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42559);
        mpfr_init(r42560);
        mpfr_init_set_str(r42561, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42562);
        mpfr_init(r42563);
        mpfr_init_set_str(r42564, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42565);
        mpfr_init(r42566);
        mpfr_init_set_str(r42567, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42568);
        mpfr_init(r42569);
        mpfr_init(r42570);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42553, x, MPFR_RNDN);
        mpfr_set_d(r42554, y, MPFR_RNDN);
        mpfr_set_d(r42555, z, MPFR_RNDN);
        ;
        mpfr_mul(r42557, r42555, r42556, MPFR_RNDN);
        ;
        mpfr_add(r42559, r42557, r42558, MPFR_RNDN);
        mpfr_mul(r42560, r42559, r42555, MPFR_RNDN);
        ;
        mpfr_add(r42562, r42560, r42561, MPFR_RNDN);
        mpfr_mul(r42563, r42554, r42562, MPFR_RNDN);
        ;
        mpfr_add(r42565, r42555, r42564, MPFR_RNDN);
        mpfr_mul(r42566, r42565, r42555, MPFR_RNDN);
        ;
        mpfr_add(r42568, r42566, r42567, MPFR_RNDN);
        mpfr_div(r42569, r42563, r42568, MPFR_RNDN);
        mpfr_add(r42570, r42553, r42569, MPFR_RNDN);
        return mpfr_get_d(r42570, MPFR_RNDN);
}

static mpfr_t r42571, r42572, r42573, r42574, r42575, r42576, r42577, r42578, r42579, r42580, r42581, r42582, r42583, r42584, r42585, r42586, r42587, r42588, r42589, r42590, r42591, r42592, r42593, r42594, r42595, r42596, r42597, r42598, r42599, r42600, r42601, r42602, r42603, r42604, r42605;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42571);
        mpfr_init_set_str(r42572, "-354554309650.3642", 10, MPFR_RNDN);
        mpfr_init(r42573);
        mpfr_init(r42574);
        mpfr_init(r42575);
        mpfr_init_set_str(r42576, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42577);
        mpfr_init(r42578);
        mpfr_init(r42579);
        mpfr_init_set_str(r42580, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42581);
        mpfr_init_set_str(r42582, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42583);
        mpfr_init(r42584);
        mpfr_init(r42585);
        mpfr_init_set_str(r42586, "1.1570910217973246e-07", 10, MPFR_RNDN);
        mpfr_init(r42587);
        mpfr_init_set_str(r42588, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42589);
        mpfr_init(r42590);
        mpfr_init_set_str(r42591, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42592);
        mpfr_init(r42593);
        mpfr_init(r42594);
        mpfr_init(r42595);
        mpfr_init_set_str(r42596, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42597);
        mpfr_init(r42598);
        mpfr_init_set_str(r42599, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42600);
        mpfr_init(r42601);
        mpfr_init(r42602);
        mpfr_init(r42603);
        mpfr_init(r42604);
        mpfr_init(r42605);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42571, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42573, mpfr_cmp(r42571, r42572) <= 0, MPFR_RNDN);
        mpfr_set_d(r42574, x, MPFR_RNDN);
        mpfr_set_d(r42575, y, MPFR_RNDN);
        ;
        mpfr_mul(r42577, r42575, r42576, MPFR_RNDN);
        mpfr_add(r42578, r42574, r42577, MPFR_RNDN);
        mpfr_div(r42579, r42575, r42571, MPFR_RNDN);
        ;
        mpfr_div(r42581, r42580, r42571, MPFR_RNDN);
        ;
        mpfr_sub(r42583, r42581, r42582, MPFR_RNDN);
        mpfr_mul(r42584, r42579, r42583, MPFR_RNDN);
        mpfr_sub(r42585, r42578, r42584, MPFR_RNDN);
        ;
        mpfr_set_si(r42587, mpfr_cmp(r42571, r42586) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42589, r42571, r42588, MPFR_RNDN);
        mpfr_mul(r42590, r42589, r42571, MPFR_RNDN);
        ;
        mpfr_add(r42592, r42590, r42591, MPFR_RNDN);
        mpfr_sqrt(r42593, r42592, MPFR_RNDN);
        mpfr_div(r42594, r42575, r42593, MPFR_RNDN);
        mpfr_mul(r42595, r42571, r42576, MPFR_RNDN);
        ;
        mpfr_add(r42597, r42595, r42596, MPFR_RNDN);
        mpfr_mul(r42598, r42597, r42571, MPFR_RNDN);
        ;
        mpfr_add(r42600, r42598, r42599, MPFR_RNDN);
        mpfr_div(r42601, r42600, r42593, MPFR_RNDN);
        mpfr_mul(r42602, r42594, r42601, MPFR_RNDN);
        mpfr_add(r42603, r42574, r42602, MPFR_RNDN);
        if (mpfr_get_si(r42587, MPFR_RNDN)) { mpfr_set(r42604, r42603, MPFR_RNDN); } else { mpfr_set(r42604, r42585, MPFR_RNDN); };
        if (mpfr_get_si(r42573, MPFR_RNDN)) { mpfr_set(r42605, r42585, MPFR_RNDN); } else { mpfr_set(r42605, r42604, MPFR_RNDN); };
        return mpfr_get_d(r42605, MPFR_RNDN);
}

static mpfr_t r42606, r42607, r42608, r42609, r42610, r42611, r42612, r42613, r42614, r42615, r42616, r42617, r42618, r42619, r42620, r42621, r42622, r42623, r42624, r42625, r42626, r42627, r42628, r42629, r42630, r42631, r42632, r42633, r42634, r42635, r42636, r42637, r42638, r42639, r42640;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42606);
        mpfr_init_set_str(r42607, "-354554309650.3642", 10, MPFR_RNDN);
        mpfr_init(r42608);
        mpfr_init(r42609);
        mpfr_init(r42610);
        mpfr_init_set_str(r42611, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42612);
        mpfr_init(r42613);
        mpfr_init(r42614);
        mpfr_init_set_str(r42615, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42616);
        mpfr_init_set_str(r42617, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42618);
        mpfr_init(r42619);
        mpfr_init(r42620);
        mpfr_init_set_str(r42621, "1.1570910217973246e-07", 10, MPFR_RNDN);
        mpfr_init(r42622);
        mpfr_init_set_str(r42623, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42624);
        mpfr_init(r42625);
        mpfr_init_set_str(r42626, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42627);
        mpfr_init(r42628);
        mpfr_init(r42629);
        mpfr_init(r42630);
        mpfr_init_set_str(r42631, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42632);
        mpfr_init(r42633);
        mpfr_init_set_str(r42634, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42635);
        mpfr_init(r42636);
        mpfr_init(r42637);
        mpfr_init(r42638);
        mpfr_init(r42639);
        mpfr_init(r42640);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42606, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42608, mpfr_cmp(r42606, r42607) <= 0, MPFR_RNDN);
        mpfr_set_d(r42609, x, MPFR_RNDN);
        mpfr_set_d(r42610, y, MPFR_RNDN);
        ;
        mpfr_mul(r42612, r42610, r42611, MPFR_RNDN);
        mpfr_add(r42613, r42609, r42612, MPFR_RNDN);
        mpfr_div(r42614, r42610, r42606, MPFR_RNDN);
        ;
        mpfr_div(r42616, r42615, r42606, MPFR_RNDN);
        ;
        mpfr_sub(r42618, r42616, r42617, MPFR_RNDN);
        mpfr_mul(r42619, r42614, r42618, MPFR_RNDN);
        mpfr_sub(r42620, r42613, r42619, MPFR_RNDN);
        ;
        mpfr_set_si(r42622, mpfr_cmp(r42606, r42621) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42624, r42606, r42623, MPFR_RNDN);
        mpfr_mul(r42625, r42624, r42606, MPFR_RNDN);
        ;
        mpfr_add(r42627, r42625, r42626, MPFR_RNDN);
        mpfr_sqrt(r42628, r42627, MPFR_RNDN);
        mpfr_div(r42629, r42610, r42628, MPFR_RNDN);
        mpfr_mul(r42630, r42606, r42611, MPFR_RNDN);
        ;
        mpfr_add(r42632, r42630, r42631, MPFR_RNDN);
        mpfr_mul(r42633, r42632, r42606, MPFR_RNDN);
        ;
        mpfr_add(r42635, r42633, r42634, MPFR_RNDN);
        mpfr_div(r42636, r42635, r42628, MPFR_RNDN);
        mpfr_mul(r42637, r42629, r42636, MPFR_RNDN);
        mpfr_add(r42638, r42609, r42637, MPFR_RNDN);
        if (mpfr_get_si(r42622, MPFR_RNDN)) { mpfr_set(r42639, r42638, MPFR_RNDN); } else { mpfr_set(r42639, r42620, MPFR_RNDN); };
        if (mpfr_get_si(r42608, MPFR_RNDN)) { mpfr_set(r42640, r42620, MPFR_RNDN); } else { mpfr_set(r42640, r42639, MPFR_RNDN); };
        return mpfr_get_d(r42640, MPFR_RNDN);
}

