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

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

double f_if(float x, float y, float z) {
        float r43941 = x;
        float r43942 = y;
        float r43943 = z;
        float r43944 = r43943 + r43942;
        float r43945 = r43942 / r43944;
        float r43946 = log(r43945);
        float r43947 = r43942 * r43946;
        float r43948 = exp(r43947);
        float r43949 = r43948 / r43942;
        float r43950 = r43941 + r43949;
        return r43950;
}

double f_id(double x, double y, double z) {
        double r43951 = x;
        double r43952 = y;
        double r43953 = z;
        double r43954 = r43953 + r43952;
        double r43955 = r43952 / r43954;
        double r43956 = log(r43955);
        double r43957 = r43952 * r43956;
        double r43958 = exp(r43957);
        double r43959 = r43958 / r43952;
        double r43960 = r43951 + r43959;
        return r43960;
}


double f_of(float x, float y, float z) {
        float r43961 = y;
        float r43962 = z;
        float r43963 = r43962 + r43961;
        float r43964 = r43961 / r43963;
        float r43965 = 0.0;
        bool r43966 = r43964 <= r43965;
        float r43967 = 1;
        float r43968 = r43967 / r43962;
        float r43969 = -r43968;
        float r43970 = exp(r43969);
        float r43971 = r43970 / r43961;
        float r43972 = x;
        float r43973 = r43971 + r43972;
        float r43974 = pow(r43964, r43961);
        float r43975 = 3;
        float r43976 = pow(r43974, r43975);
        float r43977 = cbrt(r43976);
        float r43978 = r43977 / r43961;
        float r43979 = r43978 + r43972;
        float r43980 = r43966 ? r43973 : r43979;
        return r43980;
}

double f_od(double x, double y, double z) {
        double r43981 = y;
        double r43982 = z;
        double r43983 = r43982 + r43981;
        double r43984 = r43981 / r43983;
        double r43985 = 0.0;
        bool r43986 = r43984 <= r43985;
        double r43987 = 1;
        double r43988 = r43987 / r43982;
        double r43989 = -r43988;
        double r43990 = exp(r43989);
        double r43991 = r43990 / r43981;
        double r43992 = x;
        double r43993 = r43991 + r43992;
        double r43994 = pow(r43984, r43981);
        double r43995 = 3;
        double r43996 = pow(r43994, r43995);
        double r43997 = cbrt(r43996);
        double r43998 = r43997 / r43981;
        double r43999 = r43998 + r43992;
        double r44000 = r43986 ? r43993 : r43999;
        return r44000;
}

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 r44001, r44002, r44003, r44004, r44005, r44006, r44007, r44008, r44009, r44010;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r44001);
        mpfr_init(r44002);
        mpfr_init(r44003);
        mpfr_init(r44004);
        mpfr_init(r44005);
        mpfr_init(r44006);
        mpfr_init(r44007);
        mpfr_init(r44008);
        mpfr_init(r44009);
        mpfr_init(r44010);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r44001, x, MPFR_RNDN);
        mpfr_set_d(r44002, y, MPFR_RNDN);
        mpfr_set_d(r44003, z, MPFR_RNDN);
        mpfr_add(r44004, r44003, r44002, MPFR_RNDN);
        mpfr_div(r44005, r44002, r44004, MPFR_RNDN);
        mpfr_log(r44006, r44005, MPFR_RNDN);
        mpfr_mul(r44007, r44002, r44006, MPFR_RNDN);
        mpfr_exp(r44008, r44007, MPFR_RNDN);
        mpfr_div(r44009, r44008, r44002, MPFR_RNDN);
        mpfr_add(r44010, r44001, r44009, MPFR_RNDN);
        return mpfr_get_d(r44010, MPFR_RNDN);
}

static mpfr_t r44011, r44012, r44013, r44014, r44015, r44016, r44017, r44018, r44019, r44020, r44021, r44022, r44023, r44024, r44025, r44026, r44027, r44028, r44029, r44030;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r44011);
        mpfr_init(r44012);
        mpfr_init(r44013);
        mpfr_init(r44014);
        mpfr_init_set_str(r44015, "0.0", 10, MPFR_RNDN);
        mpfr_init(r44016);
        mpfr_init_set_str(r44017, "1", 10, MPFR_RNDN);
        mpfr_init(r44018);
        mpfr_init(r44019);
        mpfr_init(r44020);
        mpfr_init(r44021);
        mpfr_init(r44022);
        mpfr_init(r44023);
        mpfr_init(r44024);
        mpfr_init_set_str(r44025, "3", 10, MPFR_RNDN);
        mpfr_init(r44026);
        mpfr_init(r44027);
        mpfr_init(r44028);
        mpfr_init(r44029);
        mpfr_init(r44030);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r44011, y, MPFR_RNDN);
        mpfr_set_d(r44012, z, MPFR_RNDN);
        mpfr_add(r44013, r44012, r44011, MPFR_RNDN);
        mpfr_div(r44014, r44011, r44013, MPFR_RNDN);
        ;
        mpfr_set_si(r44016, mpfr_cmp(r44014, r44015) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r44018, r44017, r44012, MPFR_RNDN);
        mpfr_neg(r44019, r44018, MPFR_RNDN);
        mpfr_exp(r44020, r44019, MPFR_RNDN);
        mpfr_div(r44021, r44020, r44011, MPFR_RNDN);
        mpfr_set_d(r44022, x, MPFR_RNDN);
        mpfr_add(r44023, r44021, r44022, MPFR_RNDN);
        mpfr_pow(r44024, r44014, r44011, MPFR_RNDN);
        ;
        mpfr_pow(r44026, r44024, r44025, MPFR_RNDN);
        mpfr_cbrt(r44027, r44026, MPFR_RNDN);
        mpfr_div(r44028, r44027, r44011, MPFR_RNDN);
        mpfr_add(r44029, r44028, r44022, MPFR_RNDN);
        if (mpfr_get_si(r44016, MPFR_RNDN)) { mpfr_set(r44030, r44023, MPFR_RNDN); } else { mpfr_set(r44030, r44029, MPFR_RNDN); };
        return mpfr_get_d(r44030, MPFR_RNDN);
}

static mpfr_t r44031, r44032, r44033, r44034, r44035, r44036, r44037, r44038, r44039, r44040, r44041, r44042, r44043, r44044, r44045, r44046, r44047, r44048, r44049, r44050;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r44031);
        mpfr_init(r44032);
        mpfr_init(r44033);
        mpfr_init(r44034);
        mpfr_init_set_str(r44035, "0.0", 10, MPFR_RNDN);
        mpfr_init(r44036);
        mpfr_init_set_str(r44037, "1", 10, MPFR_RNDN);
        mpfr_init(r44038);
        mpfr_init(r44039);
        mpfr_init(r44040);
        mpfr_init(r44041);
        mpfr_init(r44042);
        mpfr_init(r44043);
        mpfr_init(r44044);
        mpfr_init_set_str(r44045, "3", 10, MPFR_RNDN);
        mpfr_init(r44046);
        mpfr_init(r44047);
        mpfr_init(r44048);
        mpfr_init(r44049);
        mpfr_init(r44050);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r44031, y, MPFR_RNDN);
        mpfr_set_d(r44032, z, MPFR_RNDN);
        mpfr_add(r44033, r44032, r44031, MPFR_RNDN);
        mpfr_div(r44034, r44031, r44033, MPFR_RNDN);
        ;
        mpfr_set_si(r44036, mpfr_cmp(r44034, r44035) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r44038, r44037, r44032, MPFR_RNDN);
        mpfr_neg(r44039, r44038, MPFR_RNDN);
        mpfr_exp(r44040, r44039, MPFR_RNDN);
        mpfr_div(r44041, r44040, r44031, MPFR_RNDN);
        mpfr_set_d(r44042, x, MPFR_RNDN);
        mpfr_add(r44043, r44041, r44042, MPFR_RNDN);
        mpfr_pow(r44044, r44034, r44031, MPFR_RNDN);
        ;
        mpfr_pow(r44046, r44044, r44045, MPFR_RNDN);
        mpfr_cbrt(r44047, r44046, MPFR_RNDN);
        mpfr_div(r44048, r44047, r44031, MPFR_RNDN);
        mpfr_add(r44049, r44048, r44042, MPFR_RNDN);
        if (mpfr_get_si(r44036, MPFR_RNDN)) { mpfr_set(r44050, r44043, MPFR_RNDN); } else { mpfr_set(r44050, r44049, MPFR_RNDN); };
        return mpfr_get_d(r44050, MPFR_RNDN);
}

