#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 r42630 = x;
        float r42631 = y;
        float r42632 = z;
        float r42633 = 0.0692910599291889;
        float r42634 = r42632 * r42633;
        float r42635 = 0.4917317610505968;
        float r42636 = r42634 + r42635;
        float r42637 = r42636 * r42632;
        float r42638 = 0.279195317918525;
        float r42639 = r42637 + r42638;
        float r42640 = r42631 * r42639;
        float r42641 = 6.012459259764103;
        float r42642 = r42632 + r42641;
        float r42643 = r42642 * r42632;
        float r42644 = 3.350343815022304;
        float r42645 = r42643 + r42644;
        float r42646 = r42640 / r42645;
        float r42647 = r42630 + r42646;
        return r42647;
}

double f_id(double x, double y, double z) {
        double r42648 = x;
        double r42649 = y;
        double r42650 = z;
        double r42651 = 0.0692910599291889;
        double r42652 = r42650 * r42651;
        double r42653 = 0.4917317610505968;
        double r42654 = r42652 + r42653;
        double r42655 = r42654 * r42650;
        double r42656 = 0.279195317918525;
        double r42657 = r42655 + r42656;
        double r42658 = r42649 * r42657;
        double r42659 = 6.012459259764103;
        double r42660 = r42650 + r42659;
        double r42661 = r42660 * r42650;
        double r42662 = 3.350343815022304;
        double r42663 = r42661 + r42662;
        double r42664 = r42658 / r42663;
        double r42665 = r42648 + r42664;
        return r42665;
}


double f_of(float x, float y, float z) {
        float r42666 = z;
        float r42667 = -449136846330.7665;
        bool r42668 = r42666 <= r42667;
        float r42669 = x;
        float r42670 = y;
        float r42671 = 0.0692910599291889;
        float r42672 = r42670 * r42671;
        float r42673 = r42669 + r42672;
        float r42674 = r42670 / r42666;
        float r42675 = 0.40462203869992125;
        float r42676 = r42675 / r42666;
        float r42677 = 0.07512208616047561;
        float r42678 = r42676 - r42677;
        float r42679 = r42674 * r42678;
        float r42680 = r42673 - r42679;
        float r42681 = 1.1209319314423736e-07;
        bool r42682 = r42666 <= r42681;
        float r42683 = 6.012459259764103;
        float r42684 = r42666 + r42683;
        float r42685 = r42684 * r42666;
        float r42686 = 3.350343815022304;
        float r42687 = r42685 + r42686;
        float r42688 = sqrt(r42687);
        float r42689 = r42670 / r42688;
        float r42690 = r42666 * r42671;
        float r42691 = 0.4917317610505968;
        float r42692 = r42690 + r42691;
        float r42693 = r42692 * r42666;
        float r42694 = 0.279195317918525;
        float r42695 = r42693 + r42694;
        float r42696 = r42695 / r42688;
        float r42697 = r42689 * r42696;
        float r42698 = r42669 + r42697;
        float r42699 = r42682 ? r42698 : r42680;
        float r42700 = r42668 ? r42680 : r42699;
        return r42700;
}

double f_od(double x, double y, double z) {
        double r42701 = z;
        double r42702 = -449136846330.7665;
        bool r42703 = r42701 <= r42702;
        double r42704 = x;
        double r42705 = y;
        double r42706 = 0.0692910599291889;
        double r42707 = r42705 * r42706;
        double r42708 = r42704 + r42707;
        double r42709 = r42705 / r42701;
        double r42710 = 0.40462203869992125;
        double r42711 = r42710 / r42701;
        double r42712 = 0.07512208616047561;
        double r42713 = r42711 - r42712;
        double r42714 = r42709 * r42713;
        double r42715 = r42708 - r42714;
        double r42716 = 1.1209319314423736e-07;
        bool r42717 = r42701 <= r42716;
        double r42718 = 6.012459259764103;
        double r42719 = r42701 + r42718;
        double r42720 = r42719 * r42701;
        double r42721 = 3.350343815022304;
        double r42722 = r42720 + r42721;
        double r42723 = sqrt(r42722);
        double r42724 = r42705 / r42723;
        double r42725 = r42701 * r42706;
        double r42726 = 0.4917317610505968;
        double r42727 = r42725 + r42726;
        double r42728 = r42727 * r42701;
        double r42729 = 0.279195317918525;
        double r42730 = r42728 + r42729;
        double r42731 = r42730 / r42723;
        double r42732 = r42724 * r42731;
        double r42733 = r42704 + r42732;
        double r42734 = r42717 ? r42733 : r42715;
        double r42735 = r42703 ? r42715 : r42734;
        return r42735;
}

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 r42736, r42737, r42738, r42739, r42740, r42741, r42742, r42743, r42744, r42745, r42746, r42747, r42748, r42749, r42750, r42751, r42752, r42753;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42736);
        mpfr_init(r42737);
        mpfr_init(r42738);
        mpfr_init_set_str(r42739, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42740);
        mpfr_init_set_str(r42741, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42742);
        mpfr_init(r42743);
        mpfr_init_set_str(r42744, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42745);
        mpfr_init(r42746);
        mpfr_init_set_str(r42747, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42748);
        mpfr_init(r42749);
        mpfr_init_set_str(r42750, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42751);
        mpfr_init(r42752);
        mpfr_init(r42753);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42736, x, MPFR_RNDN);
        mpfr_set_d(r42737, y, MPFR_RNDN);
        mpfr_set_d(r42738, z, MPFR_RNDN);
        ;
        mpfr_mul(r42740, r42738, r42739, MPFR_RNDN);
        ;
        mpfr_add(r42742, r42740, r42741, MPFR_RNDN);
        mpfr_mul(r42743, r42742, r42738, MPFR_RNDN);
        ;
        mpfr_add(r42745, r42743, r42744, MPFR_RNDN);
        mpfr_mul(r42746, r42737, r42745, MPFR_RNDN);
        ;
        mpfr_add(r42748, r42738, r42747, MPFR_RNDN);
        mpfr_mul(r42749, r42748, r42738, MPFR_RNDN);
        ;
        mpfr_add(r42751, r42749, r42750, MPFR_RNDN);
        mpfr_div(r42752, r42746, r42751, MPFR_RNDN);
        mpfr_add(r42753, r42736, r42752, MPFR_RNDN);
        return mpfr_get_d(r42753, MPFR_RNDN);
}

static mpfr_t r42754, r42755, r42756, r42757, r42758, r42759, r42760, r42761, r42762, r42763, r42764, r42765, r42766, r42767, r42768, r42769, r42770, r42771, r42772, r42773, r42774, r42775, r42776, r42777, r42778, r42779, r42780, r42781, r42782, r42783, r42784, r42785, r42786, r42787, r42788;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42754);
        mpfr_init_set_str(r42755, "-449136846330.7665", 10, MPFR_RNDN);
        mpfr_init(r42756);
        mpfr_init(r42757);
        mpfr_init(r42758);
        mpfr_init_set_str(r42759, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42760);
        mpfr_init(r42761);
        mpfr_init(r42762);
        mpfr_init_set_str(r42763, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42764);
        mpfr_init_set_str(r42765, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42766);
        mpfr_init(r42767);
        mpfr_init(r42768);
        mpfr_init_set_str(r42769, "1.1209319314423736e-07", 10, MPFR_RNDN);
        mpfr_init(r42770);
        mpfr_init_set_str(r42771, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42772);
        mpfr_init(r42773);
        mpfr_init_set_str(r42774, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42775);
        mpfr_init(r42776);
        mpfr_init(r42777);
        mpfr_init(r42778);
        mpfr_init_set_str(r42779, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42780);
        mpfr_init(r42781);
        mpfr_init_set_str(r42782, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42783);
        mpfr_init(r42784);
        mpfr_init(r42785);
        mpfr_init(r42786);
        mpfr_init(r42787);
        mpfr_init(r42788);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42754, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42756, mpfr_cmp(r42754, r42755) <= 0, MPFR_RNDN);
        mpfr_set_d(r42757, x, MPFR_RNDN);
        mpfr_set_d(r42758, y, MPFR_RNDN);
        ;
        mpfr_mul(r42760, r42758, r42759, MPFR_RNDN);
        mpfr_add(r42761, r42757, r42760, MPFR_RNDN);
        mpfr_div(r42762, r42758, r42754, MPFR_RNDN);
        ;
        mpfr_div(r42764, r42763, r42754, MPFR_RNDN);
        ;
        mpfr_sub(r42766, r42764, r42765, MPFR_RNDN);
        mpfr_mul(r42767, r42762, r42766, MPFR_RNDN);
        mpfr_sub(r42768, r42761, r42767, MPFR_RNDN);
        ;
        mpfr_set_si(r42770, mpfr_cmp(r42754, r42769) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42772, r42754, r42771, MPFR_RNDN);
        mpfr_mul(r42773, r42772, r42754, MPFR_RNDN);
        ;
        mpfr_add(r42775, r42773, r42774, MPFR_RNDN);
        mpfr_sqrt(r42776, r42775, MPFR_RNDN);
        mpfr_div(r42777, r42758, r42776, MPFR_RNDN);
        mpfr_mul(r42778, r42754, r42759, MPFR_RNDN);
        ;
        mpfr_add(r42780, r42778, r42779, MPFR_RNDN);
        mpfr_mul(r42781, r42780, r42754, MPFR_RNDN);
        ;
        mpfr_add(r42783, r42781, r42782, MPFR_RNDN);
        mpfr_div(r42784, r42783, r42776, MPFR_RNDN);
        mpfr_mul(r42785, r42777, r42784, MPFR_RNDN);
        mpfr_add(r42786, r42757, r42785, MPFR_RNDN);
        if (mpfr_get_si(r42770, MPFR_RNDN)) { mpfr_set(r42787, r42786, MPFR_RNDN); } else { mpfr_set(r42787, r42768, MPFR_RNDN); };
        if (mpfr_get_si(r42756, MPFR_RNDN)) { mpfr_set(r42788, r42768, MPFR_RNDN); } else { mpfr_set(r42788, r42787, MPFR_RNDN); };
        return mpfr_get_d(r42788, MPFR_RNDN);
}

static mpfr_t r42789, r42790, r42791, r42792, r42793, r42794, r42795, r42796, r42797, r42798, r42799, r42800, r42801, r42802, r42803, r42804, r42805, r42806, r42807, r42808, r42809, r42810, r42811, r42812, r42813, r42814, r42815, r42816, r42817, r42818, r42819, r42820, r42821, r42822, r42823;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42789);
        mpfr_init_set_str(r42790, "-449136846330.7665", 10, MPFR_RNDN);
        mpfr_init(r42791);
        mpfr_init(r42792);
        mpfr_init(r42793);
        mpfr_init_set_str(r42794, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42795);
        mpfr_init(r42796);
        mpfr_init(r42797);
        mpfr_init_set_str(r42798, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42799);
        mpfr_init_set_str(r42800, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42801);
        mpfr_init(r42802);
        mpfr_init(r42803);
        mpfr_init_set_str(r42804, "1.1209319314423736e-07", 10, MPFR_RNDN);
        mpfr_init(r42805);
        mpfr_init_set_str(r42806, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42807);
        mpfr_init(r42808);
        mpfr_init_set_str(r42809, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42810);
        mpfr_init(r42811);
        mpfr_init(r42812);
        mpfr_init(r42813);
        mpfr_init_set_str(r42814, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42815);
        mpfr_init(r42816);
        mpfr_init_set_str(r42817, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42818);
        mpfr_init(r42819);
        mpfr_init(r42820);
        mpfr_init(r42821);
        mpfr_init(r42822);
        mpfr_init(r42823);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42789, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42791, mpfr_cmp(r42789, r42790) <= 0, MPFR_RNDN);
        mpfr_set_d(r42792, x, MPFR_RNDN);
        mpfr_set_d(r42793, y, MPFR_RNDN);
        ;
        mpfr_mul(r42795, r42793, r42794, MPFR_RNDN);
        mpfr_add(r42796, r42792, r42795, MPFR_RNDN);
        mpfr_div(r42797, r42793, r42789, MPFR_RNDN);
        ;
        mpfr_div(r42799, r42798, r42789, MPFR_RNDN);
        ;
        mpfr_sub(r42801, r42799, r42800, MPFR_RNDN);
        mpfr_mul(r42802, r42797, r42801, MPFR_RNDN);
        mpfr_sub(r42803, r42796, r42802, MPFR_RNDN);
        ;
        mpfr_set_si(r42805, mpfr_cmp(r42789, r42804) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42807, r42789, r42806, MPFR_RNDN);
        mpfr_mul(r42808, r42807, r42789, MPFR_RNDN);
        ;
        mpfr_add(r42810, r42808, r42809, MPFR_RNDN);
        mpfr_sqrt(r42811, r42810, MPFR_RNDN);
        mpfr_div(r42812, r42793, r42811, MPFR_RNDN);
        mpfr_mul(r42813, r42789, r42794, MPFR_RNDN);
        ;
        mpfr_add(r42815, r42813, r42814, MPFR_RNDN);
        mpfr_mul(r42816, r42815, r42789, MPFR_RNDN);
        ;
        mpfr_add(r42818, r42816, r42817, MPFR_RNDN);
        mpfr_div(r42819, r42818, r42811, MPFR_RNDN);
        mpfr_mul(r42820, r42812, r42819, MPFR_RNDN);
        mpfr_add(r42821, r42792, r42820, MPFR_RNDN);
        if (mpfr_get_si(r42805, MPFR_RNDN)) { mpfr_set(r42822, r42821, MPFR_RNDN); } else { mpfr_set(r42822, r42803, MPFR_RNDN); };
        if (mpfr_get_si(r42791, MPFR_RNDN)) { mpfr_set(r42823, r42803, MPFR_RNDN); } else { mpfr_set(r42823, r42822, MPFR_RNDN); };
        return mpfr_get_d(r42823, MPFR_RNDN);
}

