#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 r39084 = x;
        float r39085 = y;
        float r39086 = z;
        float r39087 = 0.0692910599291889f;
        float r39088 = r39086 * r39087;
        float r39089 = 0.4917317610505968f;
        float r39090 = r39088 + r39089;
        float r39091 = r39090 * r39086;
        float r39092 = 0.279195317918525f;
        float r39093 = r39091 + r39092;
        float r39094 = r39085 * r39093;
        float r39095 = 6.012459259764103f;
        float r39096 = r39086 + r39095;
        float r39097 = r39096 * r39086;
        float r39098 = 3.350343815022304f;
        float r39099 = r39097 + r39098;
        float r39100 = r39094 / r39099;
        float r39101 = r39084 + r39100;
        return r39101;
}

double f_id(double x, double y, double z) {
        double r39102 = x;
        double r39103 = y;
        double r39104 = z;
        double r39105 = 0.0692910599291889;
        double r39106 = r39104 * r39105;
        double r39107 = 0.4917317610505968;
        double r39108 = r39106 + r39107;
        double r39109 = r39108 * r39104;
        double r39110 = 0.279195317918525;
        double r39111 = r39109 + r39110;
        double r39112 = r39103 * r39111;
        double r39113 = 6.012459259764103;
        double r39114 = r39104 + r39113;
        double r39115 = r39114 * r39104;
        double r39116 = 3.350343815022304;
        double r39117 = r39115 + r39116;
        double r39118 = r39112 / r39117;
        double r39119 = r39102 + r39118;
        return r39119;
}


double f_of(float x, float y, float z) {
        float r39120 = z;
        float r39121 = -103.50161844807882f;
        bool r39122 = r39120 <= r39121;
        float r39123 = 0.07512208616047561f;
        float r39124 = 0.40462203869992125f;
        float r39125 = r39124 / r39120;
        float r39126 = r39123 - r39125;
        float r39127 = y;
        float r39128 = r39127 / r39120;
        float r39129 = r39126 * r39128;
        float r39130 = 0.0692910599291889f;
        float r39131 = r39127 * r39130;
        float r39132 = x;
        float r39133 = r39131 + r39132;
        float r39134 = r39129 + r39133;
        float r39135 = 85.36504497937187f;
        bool r39136 = r39120 <= r39135;
        float r39137 = 0.0007936505811533753f;
        float r39138 = r39137 * r39127;
        float r39139 = r39120 * r39120;
        float r39140 = r39138 * r39139;
        float r39141 = r39132 + r39140;
        float r39142 = 0.0027777777775172263f;
        float r39143 = r39120 * r39142;
        float r39144 = 0.08333333333333323f;
        float r39145 = r39143 - r39144;
        float r39146 = r39127 * r39145;
        float r39147 = r39141 - r39146;
        float r39148 = r39136 ? r39147 : r39134;
        float r39149 = r39122 ? r39134 : r39148;
        return r39149;
}

double f_od(double x, double y, double z) {
        double r39150 = z;
        double r39151 = -103.50161844807882;
        bool r39152 = r39150 <= r39151;
        double r39153 = 0.07512208616047561;
        double r39154 = 0.40462203869992125;
        double r39155 = r39154 / r39150;
        double r39156 = r39153 - r39155;
        double r39157 = y;
        double r39158 = r39157 / r39150;
        double r39159 = r39156 * r39158;
        double r39160 = 0.0692910599291889;
        double r39161 = r39157 * r39160;
        double r39162 = x;
        double r39163 = r39161 + r39162;
        double r39164 = r39159 + r39163;
        double r39165 = 85.36504497937187;
        bool r39166 = r39150 <= r39165;
        double r39167 = 0.0007936505811533753;
        double r39168 = r39167 * r39157;
        double r39169 = r39150 * r39150;
        double r39170 = r39168 * r39169;
        double r39171 = r39162 + r39170;
        double r39172 = 0.0027777777775172263;
        double r39173 = r39150 * r39172;
        double r39174 = 0.08333333333333323;
        double r39175 = r39173 - r39174;
        double r39176 = r39157 * r39175;
        double r39177 = r39171 - r39176;
        double r39178 = r39166 ? r39177 : r39164;
        double r39179 = r39152 ? r39164 : r39178;
        return r39179;
}

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 r39180, r39181, r39182, r39183, r39184, r39185, r39186, r39187, r39188, r39189, r39190, r39191, r39192, r39193, r39194, r39195, r39196, r39197;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r39180);
        mpfr_init(r39181);
        mpfr_init(r39182);
        mpfr_init_set_str(r39183, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r39184);
        mpfr_init_set_str(r39185, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r39186);
        mpfr_init(r39187);
        mpfr_init_set_str(r39188, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r39189);
        mpfr_init(r39190);
        mpfr_init_set_str(r39191, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r39192);
        mpfr_init(r39193);
        mpfr_init_set_str(r39194, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r39195);
        mpfr_init(r39196);
        mpfr_init(r39197);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r39180, x, MPFR_RNDN);
        mpfr_set_d(r39181, y, MPFR_RNDN);
        mpfr_set_d(r39182, z, MPFR_RNDN);
        ;
        mpfr_mul(r39184, r39182, r39183, MPFR_RNDN);
        ;
        mpfr_add(r39186, r39184, r39185, MPFR_RNDN);
        mpfr_mul(r39187, r39186, r39182, MPFR_RNDN);
        ;
        mpfr_add(r39189, r39187, r39188, MPFR_RNDN);
        mpfr_mul(r39190, r39181, r39189, MPFR_RNDN);
        ;
        mpfr_add(r39192, r39182, r39191, MPFR_RNDN);
        mpfr_mul(r39193, r39192, r39182, MPFR_RNDN);
        ;
        mpfr_add(r39195, r39193, r39194, MPFR_RNDN);
        mpfr_div(r39196, r39190, r39195, MPFR_RNDN);
        mpfr_add(r39197, r39180, r39196, MPFR_RNDN);
        return mpfr_get_d(r39197, MPFR_RNDN);
}

static mpfr_t r39198, r39199, r39200, r39201, r39202, r39203, r39204, r39205, r39206, r39207, r39208, r39209, r39210, r39211, r39212, r39213, r39214, r39215, r39216, r39217, r39218, r39219, r39220, r39221, r39222, r39223, r39224, r39225, r39226, r39227;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r39198);
        mpfr_init_set_str(r39199, "-103.50161844807882", 10, MPFR_RNDN);
        mpfr_init(r39200);
        mpfr_init_set_str(r39201, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init_set_str(r39202, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r39203);
        mpfr_init(r39204);
        mpfr_init(r39205);
        mpfr_init(r39206);
        mpfr_init(r39207);
        mpfr_init_set_str(r39208, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r39209);
        mpfr_init(r39210);
        mpfr_init(r39211);
        mpfr_init(r39212);
        mpfr_init_set_str(r39213, "85.36504497937187", 10, MPFR_RNDN);
        mpfr_init(r39214);
        mpfr_init_set_str(r39215, "0.0007936505811533753", 10, MPFR_RNDN);
        mpfr_init(r39216);
        mpfr_init(r39217);
        mpfr_init(r39218);
        mpfr_init(r39219);
        mpfr_init_set_str(r39220, "0.0027777777775172263", 10, MPFR_RNDN);
        mpfr_init(r39221);
        mpfr_init_set_str(r39222, "0.08333333333333323", 10, MPFR_RNDN);
        mpfr_init(r39223);
        mpfr_init(r39224);
        mpfr_init(r39225);
        mpfr_init(r39226);
        mpfr_init(r39227);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r39198, z, MPFR_RNDN);
        ;
        mpfr_set_si(r39200, mpfr_cmp(r39198, r39199) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r39203, r39202, r39198, MPFR_RNDN);
        mpfr_sub(r39204, r39201, r39203, MPFR_RNDN);
        mpfr_set_d(r39205, y, MPFR_RNDN);
        mpfr_div(r39206, r39205, r39198, MPFR_RNDN);
        mpfr_mul(r39207, r39204, r39206, MPFR_RNDN);
        ;
        mpfr_mul(r39209, r39205, r39208, MPFR_RNDN);
        mpfr_set_d(r39210, x, MPFR_RNDN);
        mpfr_add(r39211, r39209, r39210, MPFR_RNDN);
        mpfr_add(r39212, r39207, r39211, MPFR_RNDN);
        ;
        mpfr_set_si(r39214, mpfr_cmp(r39198, r39213) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r39216, r39215, r39205, MPFR_RNDN);
        mpfr_sqr(r39217, r39198, MPFR_RNDN);
        mpfr_mul(r39218, r39216, r39217, MPFR_RNDN);
        mpfr_add(r39219, r39210, r39218, MPFR_RNDN);
        ;
        mpfr_mul(r39221, r39198, r39220, MPFR_RNDN);
        ;
        mpfr_sub(r39223, r39221, r39222, MPFR_RNDN);
        mpfr_mul(r39224, r39205, r39223, MPFR_RNDN);
        mpfr_sub(r39225, r39219, r39224, MPFR_RNDN);
        if (mpfr_get_si(r39214, MPFR_RNDN)) { mpfr_set(r39226, r39225, MPFR_RNDN); } else { mpfr_set(r39226, r39212, MPFR_RNDN); };
        if (mpfr_get_si(r39200, MPFR_RNDN)) { mpfr_set(r39227, r39212, MPFR_RNDN); } else { mpfr_set(r39227, r39226, MPFR_RNDN); };
        return mpfr_get_d(r39227, MPFR_RNDN);
}

static mpfr_t r39228, r39229, r39230, r39231, r39232, r39233, r39234, r39235, r39236, r39237, r39238, r39239, r39240, r39241, r39242, r39243, r39244, r39245, r39246, r39247, r39248, r39249, r39250, r39251, r39252, r39253, r39254, r39255, r39256, r39257;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r39228);
        mpfr_init_set_str(r39229, "-103.50161844807882", 10, MPFR_RNDN);
        mpfr_init(r39230);
        mpfr_init_set_str(r39231, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init_set_str(r39232, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r39233);
        mpfr_init(r39234);
        mpfr_init(r39235);
        mpfr_init(r39236);
        mpfr_init(r39237);
        mpfr_init_set_str(r39238, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r39239);
        mpfr_init(r39240);
        mpfr_init(r39241);
        mpfr_init(r39242);
        mpfr_init_set_str(r39243, "85.36504497937187", 10, MPFR_RNDN);
        mpfr_init(r39244);
        mpfr_init_set_str(r39245, "0.0007936505811533753", 10, MPFR_RNDN);
        mpfr_init(r39246);
        mpfr_init(r39247);
        mpfr_init(r39248);
        mpfr_init(r39249);
        mpfr_init_set_str(r39250, "0.0027777777775172263", 10, MPFR_RNDN);
        mpfr_init(r39251);
        mpfr_init_set_str(r39252, "0.08333333333333323", 10, MPFR_RNDN);
        mpfr_init(r39253);
        mpfr_init(r39254);
        mpfr_init(r39255);
        mpfr_init(r39256);
        mpfr_init(r39257);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r39228, z, MPFR_RNDN);
        ;
        mpfr_set_si(r39230, mpfr_cmp(r39228, r39229) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r39233, r39232, r39228, MPFR_RNDN);
        mpfr_sub(r39234, r39231, r39233, MPFR_RNDN);
        mpfr_set_d(r39235, y, MPFR_RNDN);
        mpfr_div(r39236, r39235, r39228, MPFR_RNDN);
        mpfr_mul(r39237, r39234, r39236, MPFR_RNDN);
        ;
        mpfr_mul(r39239, r39235, r39238, MPFR_RNDN);
        mpfr_set_d(r39240, x, MPFR_RNDN);
        mpfr_add(r39241, r39239, r39240, MPFR_RNDN);
        mpfr_add(r39242, r39237, r39241, MPFR_RNDN);
        ;
        mpfr_set_si(r39244, mpfr_cmp(r39228, r39243) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r39246, r39245, r39235, MPFR_RNDN);
        mpfr_sqr(r39247, r39228, MPFR_RNDN);
        mpfr_mul(r39248, r39246, r39247, MPFR_RNDN);
        mpfr_add(r39249, r39240, r39248, MPFR_RNDN);
        ;
        mpfr_mul(r39251, r39228, r39250, MPFR_RNDN);
        ;
        mpfr_sub(r39253, r39251, r39252, MPFR_RNDN);
        mpfr_mul(r39254, r39235, r39253, MPFR_RNDN);
        mpfr_sub(r39255, r39249, r39254, MPFR_RNDN);
        if (mpfr_get_si(r39244, MPFR_RNDN)) { mpfr_set(r39256, r39255, MPFR_RNDN); } else { mpfr_set(r39256, r39242, MPFR_RNDN); };
        if (mpfr_get_si(r39230, MPFR_RNDN)) { mpfr_set(r39257, r39242, MPFR_RNDN); } else { mpfr_set(r39257, r39256, MPFR_RNDN); };
        return mpfr_get_d(r39257, MPFR_RNDN);
}

