#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 r42519 = x;
        float r42520 = y;
        float r42521 = z;
        float r42522 = 0.0692910599291889;
        float r42523 = r42521 * r42522;
        float r42524 = 0.4917317610505968;
        float r42525 = r42523 + r42524;
        float r42526 = r42525 * r42521;
        float r42527 = 0.279195317918525;
        float r42528 = r42526 + r42527;
        float r42529 = r42520 * r42528;
        float r42530 = 6.012459259764103;
        float r42531 = r42521 + r42530;
        float r42532 = r42531 * r42521;
        float r42533 = 3.350343815022304;
        float r42534 = r42532 + r42533;
        float r42535 = r42529 / r42534;
        float r42536 = r42519 + r42535;
        return r42536;
}

double f_id(double x, double y, double z) {
        double r42537 = x;
        double r42538 = y;
        double r42539 = z;
        double r42540 = 0.0692910599291889;
        double r42541 = r42539 * r42540;
        double r42542 = 0.4917317610505968;
        double r42543 = r42541 + r42542;
        double r42544 = r42543 * r42539;
        double r42545 = 0.279195317918525;
        double r42546 = r42544 + r42545;
        double r42547 = r42538 * r42546;
        double r42548 = 6.012459259764103;
        double r42549 = r42539 + r42548;
        double r42550 = r42549 * r42539;
        double r42551 = 3.350343815022304;
        double r42552 = r42550 + r42551;
        double r42553 = r42547 / r42552;
        double r42554 = r42537 + r42553;
        return r42554;
}


double f_of(float x, float y, float z) {
        float r42555 = z;
        float r42556 = -449136846330.7665;
        bool r42557 = r42555 <= r42556;
        float r42558 = x;
        float r42559 = y;
        float r42560 = 0.0692910599291889;
        float r42561 = r42559 * r42560;
        float r42562 = r42558 + r42561;
        float r42563 = r42559 / r42555;
        float r42564 = 0.40462203869992125;
        float r42565 = r42564 / r42555;
        float r42566 = 0.07512208616047561;
        float r42567 = r42565 - r42566;
        float r42568 = r42563 * r42567;
        float r42569 = r42562 - r42568;
        float r42570 = 1.1209319314423736e-07;
        bool r42571 = r42555 <= r42570;
        float r42572 = 6.012459259764103;
        float r42573 = r42555 + r42572;
        float r42574 = r42573 * r42555;
        float r42575 = 3.350343815022304;
        float r42576 = r42574 + r42575;
        float r42577 = sqrt(r42576);
        float r42578 = r42559 / r42577;
        float r42579 = r42555 * r42560;
        float r42580 = 0.4917317610505968;
        float r42581 = r42579 + r42580;
        float r42582 = r42581 * r42555;
        float r42583 = 0.279195317918525;
        float r42584 = r42582 + r42583;
        float r42585 = r42584 / r42577;
        float r42586 = r42578 * r42585;
        float r42587 = r42558 + r42586;
        float r42588 = r42571 ? r42587 : r42569;
        float r42589 = r42557 ? r42569 : r42588;
        return r42589;
}

double f_od(double x, double y, double z) {
        double r42590 = z;
        double r42591 = -449136846330.7665;
        bool r42592 = r42590 <= r42591;
        double r42593 = x;
        double r42594 = y;
        double r42595 = 0.0692910599291889;
        double r42596 = r42594 * r42595;
        double r42597 = r42593 + r42596;
        double r42598 = r42594 / r42590;
        double r42599 = 0.40462203869992125;
        double r42600 = r42599 / r42590;
        double r42601 = 0.07512208616047561;
        double r42602 = r42600 - r42601;
        double r42603 = r42598 * r42602;
        double r42604 = r42597 - r42603;
        double r42605 = 1.1209319314423736e-07;
        bool r42606 = r42590 <= r42605;
        double r42607 = 6.012459259764103;
        double r42608 = r42590 + r42607;
        double r42609 = r42608 * r42590;
        double r42610 = 3.350343815022304;
        double r42611 = r42609 + r42610;
        double r42612 = sqrt(r42611);
        double r42613 = r42594 / r42612;
        double r42614 = r42590 * r42595;
        double r42615 = 0.4917317610505968;
        double r42616 = r42614 + r42615;
        double r42617 = r42616 * r42590;
        double r42618 = 0.279195317918525;
        double r42619 = r42617 + r42618;
        double r42620 = r42619 / r42612;
        double r42621 = r42613 * r42620;
        double r42622 = r42593 + r42621;
        double r42623 = r42606 ? r42622 : r42604;
        double r42624 = r42592 ? r42604 : r42623;
        return r42624;
}

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 r42625, r42626, r42627, r42628, r42629, r42630, r42631, r42632, r42633, r42634, r42635, r42636, r42637, r42638, r42639, r42640, r42641, r42642;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42625);
        mpfr_init(r42626);
        mpfr_init(r42627);
        mpfr_init_set_str(r42628, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42629);
        mpfr_init_set_str(r42630, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42631);
        mpfr_init(r42632);
        mpfr_init_set_str(r42633, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42634);
        mpfr_init(r42635);
        mpfr_init_set_str(r42636, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42637);
        mpfr_init(r42638);
        mpfr_init_set_str(r42639, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42640);
        mpfr_init(r42641);
        mpfr_init(r42642);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42625, x, MPFR_RNDN);
        mpfr_set_d(r42626, y, MPFR_RNDN);
        mpfr_set_d(r42627, z, MPFR_RNDN);
        ;
        mpfr_mul(r42629, r42627, r42628, MPFR_RNDN);
        ;
        mpfr_add(r42631, r42629, r42630, MPFR_RNDN);
        mpfr_mul(r42632, r42631, r42627, MPFR_RNDN);
        ;
        mpfr_add(r42634, r42632, r42633, MPFR_RNDN);
        mpfr_mul(r42635, r42626, r42634, MPFR_RNDN);
        ;
        mpfr_add(r42637, r42627, r42636, MPFR_RNDN);
        mpfr_mul(r42638, r42637, r42627, MPFR_RNDN);
        ;
        mpfr_add(r42640, r42638, r42639, MPFR_RNDN);
        mpfr_div(r42641, r42635, r42640, MPFR_RNDN);
        mpfr_add(r42642, r42625, r42641, MPFR_RNDN);
        return mpfr_get_d(r42642, MPFR_RNDN);
}

static mpfr_t r42643, r42644, r42645, r42646, r42647, r42648, r42649, r42650, r42651, r42652, r42653, r42654, r42655, r42656, r42657, r42658, r42659, r42660, r42661, r42662, r42663, r42664, r42665, r42666, r42667, r42668, r42669, r42670, r42671, r42672, r42673, r42674, r42675, r42676, r42677;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42643);
        mpfr_init_set_str(r42644, "-449136846330.7665", 10, MPFR_RNDN);
        mpfr_init(r42645);
        mpfr_init(r42646);
        mpfr_init(r42647);
        mpfr_init_set_str(r42648, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42649);
        mpfr_init(r42650);
        mpfr_init(r42651);
        mpfr_init_set_str(r42652, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42653);
        mpfr_init_set_str(r42654, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42655);
        mpfr_init(r42656);
        mpfr_init(r42657);
        mpfr_init_set_str(r42658, "1.1209319314423736e-07", 10, MPFR_RNDN);
        mpfr_init(r42659);
        mpfr_init_set_str(r42660, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42661);
        mpfr_init(r42662);
        mpfr_init_set_str(r42663, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42664);
        mpfr_init(r42665);
        mpfr_init(r42666);
        mpfr_init(r42667);
        mpfr_init_set_str(r42668, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42669);
        mpfr_init(r42670);
        mpfr_init_set_str(r42671, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42672);
        mpfr_init(r42673);
        mpfr_init(r42674);
        mpfr_init(r42675);
        mpfr_init(r42676);
        mpfr_init(r42677);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42643, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42645, mpfr_cmp(r42643, r42644) <= 0, MPFR_RNDN);
        mpfr_set_d(r42646, x, MPFR_RNDN);
        mpfr_set_d(r42647, y, MPFR_RNDN);
        ;
        mpfr_mul(r42649, r42647, r42648, MPFR_RNDN);
        mpfr_add(r42650, r42646, r42649, MPFR_RNDN);
        mpfr_div(r42651, r42647, r42643, MPFR_RNDN);
        ;
        mpfr_div(r42653, r42652, r42643, MPFR_RNDN);
        ;
        mpfr_sub(r42655, r42653, r42654, MPFR_RNDN);
        mpfr_mul(r42656, r42651, r42655, MPFR_RNDN);
        mpfr_sub(r42657, r42650, r42656, MPFR_RNDN);
        ;
        mpfr_set_si(r42659, mpfr_cmp(r42643, r42658) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42661, r42643, r42660, MPFR_RNDN);
        mpfr_mul(r42662, r42661, r42643, MPFR_RNDN);
        ;
        mpfr_add(r42664, r42662, r42663, MPFR_RNDN);
        mpfr_sqrt(r42665, r42664, MPFR_RNDN);
        mpfr_div(r42666, r42647, r42665, MPFR_RNDN);
        mpfr_mul(r42667, r42643, r42648, MPFR_RNDN);
        ;
        mpfr_add(r42669, r42667, r42668, MPFR_RNDN);
        mpfr_mul(r42670, r42669, r42643, MPFR_RNDN);
        ;
        mpfr_add(r42672, r42670, r42671, MPFR_RNDN);
        mpfr_div(r42673, r42672, r42665, MPFR_RNDN);
        mpfr_mul(r42674, r42666, r42673, MPFR_RNDN);
        mpfr_add(r42675, r42646, r42674, MPFR_RNDN);
        if (mpfr_get_si(r42659, MPFR_RNDN)) { mpfr_set(r42676, r42675, MPFR_RNDN); } else { mpfr_set(r42676, r42657, MPFR_RNDN); };
        if (mpfr_get_si(r42645, MPFR_RNDN)) { mpfr_set(r42677, r42657, MPFR_RNDN); } else { mpfr_set(r42677, r42676, MPFR_RNDN); };
        return mpfr_get_d(r42677, MPFR_RNDN);
}

static mpfr_t r42678, r42679, r42680, r42681, r42682, r42683, r42684, r42685, r42686, r42687, r42688, r42689, r42690, r42691, r42692, r42693, r42694, r42695, r42696, r42697, r42698, r42699, r42700, r42701, r42702, r42703, r42704, r42705, r42706, r42707, r42708, r42709, r42710, r42711, r42712;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42678);
        mpfr_init_set_str(r42679, "-449136846330.7665", 10, MPFR_RNDN);
        mpfr_init(r42680);
        mpfr_init(r42681);
        mpfr_init(r42682);
        mpfr_init_set_str(r42683, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42684);
        mpfr_init(r42685);
        mpfr_init(r42686);
        mpfr_init_set_str(r42687, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42688);
        mpfr_init_set_str(r42689, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42690);
        mpfr_init(r42691);
        mpfr_init(r42692);
        mpfr_init_set_str(r42693, "1.1209319314423736e-07", 10, MPFR_RNDN);
        mpfr_init(r42694);
        mpfr_init_set_str(r42695, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42696);
        mpfr_init(r42697);
        mpfr_init_set_str(r42698, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42699);
        mpfr_init(r42700);
        mpfr_init(r42701);
        mpfr_init(r42702);
        mpfr_init_set_str(r42703, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42704);
        mpfr_init(r42705);
        mpfr_init_set_str(r42706, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42707);
        mpfr_init(r42708);
        mpfr_init(r42709);
        mpfr_init(r42710);
        mpfr_init(r42711);
        mpfr_init(r42712);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42678, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42680, mpfr_cmp(r42678, r42679) <= 0, MPFR_RNDN);
        mpfr_set_d(r42681, x, MPFR_RNDN);
        mpfr_set_d(r42682, y, MPFR_RNDN);
        ;
        mpfr_mul(r42684, r42682, r42683, MPFR_RNDN);
        mpfr_add(r42685, r42681, r42684, MPFR_RNDN);
        mpfr_div(r42686, r42682, r42678, MPFR_RNDN);
        ;
        mpfr_div(r42688, r42687, r42678, MPFR_RNDN);
        ;
        mpfr_sub(r42690, r42688, r42689, MPFR_RNDN);
        mpfr_mul(r42691, r42686, r42690, MPFR_RNDN);
        mpfr_sub(r42692, r42685, r42691, MPFR_RNDN);
        ;
        mpfr_set_si(r42694, mpfr_cmp(r42678, r42693) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42696, r42678, r42695, MPFR_RNDN);
        mpfr_mul(r42697, r42696, r42678, MPFR_RNDN);
        ;
        mpfr_add(r42699, r42697, r42698, MPFR_RNDN);
        mpfr_sqrt(r42700, r42699, MPFR_RNDN);
        mpfr_div(r42701, r42682, r42700, MPFR_RNDN);
        mpfr_mul(r42702, r42678, r42683, MPFR_RNDN);
        ;
        mpfr_add(r42704, r42702, r42703, MPFR_RNDN);
        mpfr_mul(r42705, r42704, r42678, MPFR_RNDN);
        ;
        mpfr_add(r42707, r42705, r42706, MPFR_RNDN);
        mpfr_div(r42708, r42707, r42700, MPFR_RNDN);
        mpfr_mul(r42709, r42701, r42708, MPFR_RNDN);
        mpfr_add(r42710, r42681, r42709, MPFR_RNDN);
        if (mpfr_get_si(r42694, MPFR_RNDN)) { mpfr_set(r42711, r42710, MPFR_RNDN); } else { mpfr_set(r42711, r42692, MPFR_RNDN); };
        if (mpfr_get_si(r42680, MPFR_RNDN)) { mpfr_set(r42712, r42692, MPFR_RNDN); } else { mpfr_set(r42712, r42711, MPFR_RNDN); };
        return mpfr_get_d(r42712, MPFR_RNDN);
}

