#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 r42955 = x;
        float r42956 = y;
        float r42957 = z;
        float r42958 = 0.0692910599291889;
        float r42959 = r42957 * r42958;
        float r42960 = 0.4917317610505968;
        float r42961 = r42959 + r42960;
        float r42962 = r42961 * r42957;
        float r42963 = 0.279195317918525;
        float r42964 = r42962 + r42963;
        float r42965 = r42956 * r42964;
        float r42966 = 6.012459259764103;
        float r42967 = r42957 + r42966;
        float r42968 = r42967 * r42957;
        float r42969 = 3.350343815022304;
        float r42970 = r42968 + r42969;
        float r42971 = r42965 / r42970;
        float r42972 = r42955 + r42971;
        return r42972;
}

double f_id(double x, double y, double z) {
        double r42973 = x;
        double r42974 = y;
        double r42975 = z;
        double r42976 = 0.0692910599291889;
        double r42977 = r42975 * r42976;
        double r42978 = 0.4917317610505968;
        double r42979 = r42977 + r42978;
        double r42980 = r42979 * r42975;
        double r42981 = 0.279195317918525;
        double r42982 = r42980 + r42981;
        double r42983 = r42974 * r42982;
        double r42984 = 6.012459259764103;
        double r42985 = r42975 + r42984;
        double r42986 = r42985 * r42975;
        double r42987 = 3.350343815022304;
        double r42988 = r42986 + r42987;
        double r42989 = r42983 / r42988;
        double r42990 = r42973 + r42989;
        return r42990;
}


double f_of(float x, float y, float z) {
        float r42991 = z;
        float r42992 = -354554309650.3642;
        bool r42993 = r42991 <= r42992;
        float r42994 = x;
        float r42995 = y;
        float r42996 = 0.0692910599291889;
        float r42997 = r42995 * r42996;
        float r42998 = r42994 + r42997;
        float r42999 = r42995 / r42991;
        float r43000 = 0.40462203869992125;
        float r43001 = r43000 / r42991;
        float r43002 = 0.07512208616047561;
        float r43003 = r43001 - r43002;
        float r43004 = r42999 * r43003;
        float r43005 = r42998 - r43004;
        float r43006 = 1.1570910217973246e-07;
        bool r43007 = r42991 <= r43006;
        float r43008 = 6.012459259764103;
        float r43009 = r42991 + r43008;
        float r43010 = r43009 * r42991;
        float r43011 = 3.350343815022304;
        float r43012 = r43010 + r43011;
        float r43013 = sqrt(r43012);
        float r43014 = r42995 / r43013;
        float r43015 = r42991 * r42996;
        float r43016 = 0.4917317610505968;
        float r43017 = r43015 + r43016;
        float r43018 = r43017 * r42991;
        float r43019 = 0.279195317918525;
        float r43020 = r43018 + r43019;
        float r43021 = r43020 / r43013;
        float r43022 = r43014 * r43021;
        float r43023 = r42994 + r43022;
        float r43024 = r43007 ? r43023 : r43005;
        float r43025 = r42993 ? r43005 : r43024;
        return r43025;
}

double f_od(double x, double y, double z) {
        double r43026 = z;
        double r43027 = -354554309650.3642;
        bool r43028 = r43026 <= r43027;
        double r43029 = x;
        double r43030 = y;
        double r43031 = 0.0692910599291889;
        double r43032 = r43030 * r43031;
        double r43033 = r43029 + r43032;
        double r43034 = r43030 / r43026;
        double r43035 = 0.40462203869992125;
        double r43036 = r43035 / r43026;
        double r43037 = 0.07512208616047561;
        double r43038 = r43036 - r43037;
        double r43039 = r43034 * r43038;
        double r43040 = r43033 - r43039;
        double r43041 = 1.1570910217973246e-07;
        bool r43042 = r43026 <= r43041;
        double r43043 = 6.012459259764103;
        double r43044 = r43026 + r43043;
        double r43045 = r43044 * r43026;
        double r43046 = 3.350343815022304;
        double r43047 = r43045 + r43046;
        double r43048 = sqrt(r43047);
        double r43049 = r43030 / r43048;
        double r43050 = r43026 * r43031;
        double r43051 = 0.4917317610505968;
        double r43052 = r43050 + r43051;
        double r43053 = r43052 * r43026;
        double r43054 = 0.279195317918525;
        double r43055 = r43053 + r43054;
        double r43056 = r43055 / r43048;
        double r43057 = r43049 * r43056;
        double r43058 = r43029 + r43057;
        double r43059 = r43042 ? r43058 : r43040;
        double r43060 = r43028 ? r43040 : r43059;
        return r43060;
}

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 r43061, r43062, r43063, r43064, r43065, r43066, r43067, r43068, r43069, r43070, r43071, r43072, r43073, r43074, r43075, r43076, r43077, r43078;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r43061);
        mpfr_init(r43062);
        mpfr_init(r43063);
        mpfr_init_set_str(r43064, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r43065);
        mpfr_init_set_str(r43066, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r43067);
        mpfr_init(r43068);
        mpfr_init_set_str(r43069, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r43070);
        mpfr_init(r43071);
        mpfr_init_set_str(r43072, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r43073);
        mpfr_init(r43074);
        mpfr_init_set_str(r43075, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r43076);
        mpfr_init(r43077);
        mpfr_init(r43078);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r43061, x, MPFR_RNDN);
        mpfr_set_d(r43062, y, MPFR_RNDN);
        mpfr_set_d(r43063, z, MPFR_RNDN);
        ;
        mpfr_mul(r43065, r43063, r43064, MPFR_RNDN);
        ;
        mpfr_add(r43067, r43065, r43066, MPFR_RNDN);
        mpfr_mul(r43068, r43067, r43063, MPFR_RNDN);
        ;
        mpfr_add(r43070, r43068, r43069, MPFR_RNDN);
        mpfr_mul(r43071, r43062, r43070, MPFR_RNDN);
        ;
        mpfr_add(r43073, r43063, r43072, MPFR_RNDN);
        mpfr_mul(r43074, r43073, r43063, MPFR_RNDN);
        ;
        mpfr_add(r43076, r43074, r43075, MPFR_RNDN);
        mpfr_div(r43077, r43071, r43076, MPFR_RNDN);
        mpfr_add(r43078, r43061, r43077, MPFR_RNDN);
        return mpfr_get_d(r43078, MPFR_RNDN);
}

static mpfr_t r43079, r43080, r43081, r43082, r43083, r43084, r43085, r43086, r43087, r43088, r43089, r43090, r43091, r43092, r43093, r43094, r43095, r43096, r43097, r43098, r43099, r43100, r43101, r43102, r43103, r43104, r43105, r43106, r43107, r43108, r43109, r43110, r43111, r43112, r43113;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r43079);
        mpfr_init_set_str(r43080, "-354554309650.3642", 10, MPFR_RNDN);
        mpfr_init(r43081);
        mpfr_init(r43082);
        mpfr_init(r43083);
        mpfr_init_set_str(r43084, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r43085);
        mpfr_init(r43086);
        mpfr_init(r43087);
        mpfr_init_set_str(r43088, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r43089);
        mpfr_init_set_str(r43090, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r43091);
        mpfr_init(r43092);
        mpfr_init(r43093);
        mpfr_init_set_str(r43094, "1.1570910217973246e-07", 10, MPFR_RNDN);
        mpfr_init(r43095);
        mpfr_init_set_str(r43096, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r43097);
        mpfr_init(r43098);
        mpfr_init_set_str(r43099, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r43100);
        mpfr_init(r43101);
        mpfr_init(r43102);
        mpfr_init(r43103);
        mpfr_init_set_str(r43104, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r43105);
        mpfr_init(r43106);
        mpfr_init_set_str(r43107, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r43108);
        mpfr_init(r43109);
        mpfr_init(r43110);
        mpfr_init(r43111);
        mpfr_init(r43112);
        mpfr_init(r43113);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r43079, z, MPFR_RNDN);
        ;
        mpfr_set_si(r43081, mpfr_cmp(r43079, r43080) <= 0, MPFR_RNDN);
        mpfr_set_d(r43082, x, MPFR_RNDN);
        mpfr_set_d(r43083, y, MPFR_RNDN);
        ;
        mpfr_mul(r43085, r43083, r43084, MPFR_RNDN);
        mpfr_add(r43086, r43082, r43085, MPFR_RNDN);
        mpfr_div(r43087, r43083, r43079, MPFR_RNDN);
        ;
        mpfr_div(r43089, r43088, r43079, MPFR_RNDN);
        ;
        mpfr_sub(r43091, r43089, r43090, MPFR_RNDN);
        mpfr_mul(r43092, r43087, r43091, MPFR_RNDN);
        mpfr_sub(r43093, r43086, r43092, MPFR_RNDN);
        ;
        mpfr_set_si(r43095, mpfr_cmp(r43079, r43094) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r43097, r43079, r43096, MPFR_RNDN);
        mpfr_mul(r43098, r43097, r43079, MPFR_RNDN);
        ;
        mpfr_add(r43100, r43098, r43099, MPFR_RNDN);
        mpfr_sqrt(r43101, r43100, MPFR_RNDN);
        mpfr_div(r43102, r43083, r43101, MPFR_RNDN);
        mpfr_mul(r43103, r43079, r43084, MPFR_RNDN);
        ;
        mpfr_add(r43105, r43103, r43104, MPFR_RNDN);
        mpfr_mul(r43106, r43105, r43079, MPFR_RNDN);
        ;
        mpfr_add(r43108, r43106, r43107, MPFR_RNDN);
        mpfr_div(r43109, r43108, r43101, MPFR_RNDN);
        mpfr_mul(r43110, r43102, r43109, MPFR_RNDN);
        mpfr_add(r43111, r43082, r43110, MPFR_RNDN);
        if (mpfr_get_si(r43095, MPFR_RNDN)) { mpfr_set(r43112, r43111, MPFR_RNDN); } else { mpfr_set(r43112, r43093, MPFR_RNDN); };
        if (mpfr_get_si(r43081, MPFR_RNDN)) { mpfr_set(r43113, r43093, MPFR_RNDN); } else { mpfr_set(r43113, r43112, MPFR_RNDN); };
        return mpfr_get_d(r43113, MPFR_RNDN);
}

static mpfr_t r43114, r43115, r43116, r43117, r43118, r43119, r43120, r43121, r43122, r43123, r43124, r43125, r43126, r43127, r43128, r43129, r43130, r43131, r43132, r43133, r43134, r43135, r43136, r43137, r43138, r43139, r43140, r43141, r43142, r43143, r43144, r43145, r43146, r43147, r43148;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r43114);
        mpfr_init_set_str(r43115, "-354554309650.3642", 10, MPFR_RNDN);
        mpfr_init(r43116);
        mpfr_init(r43117);
        mpfr_init(r43118);
        mpfr_init_set_str(r43119, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r43120);
        mpfr_init(r43121);
        mpfr_init(r43122);
        mpfr_init_set_str(r43123, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r43124);
        mpfr_init_set_str(r43125, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r43126);
        mpfr_init(r43127);
        mpfr_init(r43128);
        mpfr_init_set_str(r43129, "1.1570910217973246e-07", 10, MPFR_RNDN);
        mpfr_init(r43130);
        mpfr_init_set_str(r43131, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r43132);
        mpfr_init(r43133);
        mpfr_init_set_str(r43134, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r43135);
        mpfr_init(r43136);
        mpfr_init(r43137);
        mpfr_init(r43138);
        mpfr_init_set_str(r43139, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r43140);
        mpfr_init(r43141);
        mpfr_init_set_str(r43142, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r43143);
        mpfr_init(r43144);
        mpfr_init(r43145);
        mpfr_init(r43146);
        mpfr_init(r43147);
        mpfr_init(r43148);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r43114, z, MPFR_RNDN);
        ;
        mpfr_set_si(r43116, mpfr_cmp(r43114, r43115) <= 0, MPFR_RNDN);
        mpfr_set_d(r43117, x, MPFR_RNDN);
        mpfr_set_d(r43118, y, MPFR_RNDN);
        ;
        mpfr_mul(r43120, r43118, r43119, MPFR_RNDN);
        mpfr_add(r43121, r43117, r43120, MPFR_RNDN);
        mpfr_div(r43122, r43118, r43114, MPFR_RNDN);
        ;
        mpfr_div(r43124, r43123, r43114, MPFR_RNDN);
        ;
        mpfr_sub(r43126, r43124, r43125, MPFR_RNDN);
        mpfr_mul(r43127, r43122, r43126, MPFR_RNDN);
        mpfr_sub(r43128, r43121, r43127, MPFR_RNDN);
        ;
        mpfr_set_si(r43130, mpfr_cmp(r43114, r43129) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r43132, r43114, r43131, MPFR_RNDN);
        mpfr_mul(r43133, r43132, r43114, MPFR_RNDN);
        ;
        mpfr_add(r43135, r43133, r43134, MPFR_RNDN);
        mpfr_sqrt(r43136, r43135, MPFR_RNDN);
        mpfr_div(r43137, r43118, r43136, MPFR_RNDN);
        mpfr_mul(r43138, r43114, r43119, MPFR_RNDN);
        ;
        mpfr_add(r43140, r43138, r43139, MPFR_RNDN);
        mpfr_mul(r43141, r43140, r43114, MPFR_RNDN);
        ;
        mpfr_add(r43143, r43141, r43142, MPFR_RNDN);
        mpfr_div(r43144, r43143, r43136, MPFR_RNDN);
        mpfr_mul(r43145, r43137, r43144, MPFR_RNDN);
        mpfr_add(r43146, r43117, r43145, MPFR_RNDN);
        if (mpfr_get_si(r43130, MPFR_RNDN)) { mpfr_set(r43147, r43146, MPFR_RNDN); } else { mpfr_set(r43147, r43128, MPFR_RNDN); };
        if (mpfr_get_si(r43116, MPFR_RNDN)) { mpfr_set(r43148, r43128, MPFR_RNDN); } else { mpfr_set(r43148, r43147, MPFR_RNDN); };
        return mpfr_get_d(r43148, MPFR_RNDN);
}

