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

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

double f_if(float x, float y, float z, float t, float a, float b) {
        float r45103 = x;
        float r45104 = y;
        float r45105 = z;
        float r45106 = log(r45105);
        float r45107 = t;
        float r45108 = r45106 - r45107;
        float r45109 = r45104 * r45108;
        float r45110 = a;
        float r45111 = 1.0;
        float r45112 = r45111 - r45105;
        float r45113 = log(r45112);
        float r45114 = b;
        float r45115 = r45113 - r45114;
        float r45116 = r45110 * r45115;
        float r45117 = r45109 + r45116;
        float r45118 = exp(r45117);
        float r45119 = r45103 * r45118;
        return r45119;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r45120 = x;
        double r45121 = y;
        double r45122 = z;
        double r45123 = log(r45122);
        double r45124 = t;
        double r45125 = r45123 - r45124;
        double r45126 = r45121 * r45125;
        double r45127 = a;
        double r45128 = 1.0;
        double r45129 = r45128 - r45122;
        double r45130 = log(r45129);
        double r45131 = b;
        double r45132 = r45130 - r45131;
        double r45133 = r45127 * r45132;
        double r45134 = r45126 + r45133;
        double r45135 = exp(r45134);
        double r45136 = r45120 * r45135;
        return r45136;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r45137 = x;
        float r45138 = 6.162182387522347e-283;
        bool r45139 = r45137 <= r45138;
        float r45140 = 1.0;
        float r45141 = z;
        float r45142 = r45140 - r45141;
        float r45143 = log(r45142);
        float r45144 = b;
        float r45145 = r45143 - r45144;
        float r45146 = a;
        float r45147 = r45145 * r45146;
        float r45148 = exp(r45147);
        float r45149 = r45137 * r45148;
        float r45150 = y;
        float r45151 = log(r45141);
        float r45152 = t;
        float r45153 = r45151 - r45152;
        float r45154 = r45150 * r45153;
        float r45155 = exp(r45154);
        float r45156 = r45149 * r45155;
        float r45157 = log(r45137);
        float r45158 = r45154 + r45157;
        float r45159 = r45158 + r45147;
        float r45160 = exp(r45159);
        float r45161 = r45139 ? r45156 : r45160;
        return r45161;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r45162 = x;
        double r45163 = 6.162182387522347e-283;
        bool r45164 = r45162 <= r45163;
        double r45165 = 1.0;
        double r45166 = z;
        double r45167 = r45165 - r45166;
        double r45168 = log(r45167);
        double r45169 = b;
        double r45170 = r45168 - r45169;
        double r45171 = a;
        double r45172 = r45170 * r45171;
        double r45173 = exp(r45172);
        double r45174 = r45162 * r45173;
        double r45175 = y;
        double r45176 = log(r45166);
        double r45177 = t;
        double r45178 = r45176 - r45177;
        double r45179 = r45175 * r45178;
        double r45180 = exp(r45179);
        double r45181 = r45174 * r45180;
        double r45182 = log(r45162);
        double r45183 = r45179 + r45182;
        double r45184 = r45183 + r45172;
        double r45185 = exp(r45184);
        double r45186 = r45164 ? r45181 : r45185;
        return r45186;
}

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 r45187, r45188, r45189, r45190, r45191, r45192, r45193, r45194, r45195, r45196, r45197, r45198, r45199, r45200, r45201, r45202, r45203;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init(r45187);
        mpfr_init(r45188);
        mpfr_init(r45189);
        mpfr_init(r45190);
        mpfr_init(r45191);
        mpfr_init(r45192);
        mpfr_init(r45193);
        mpfr_init(r45194);
        mpfr_init_set_str(r45195, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45196);
        mpfr_init(r45197);
        mpfr_init(r45198);
        mpfr_init(r45199);
        mpfr_init(r45200);
        mpfr_init(r45201);
        mpfr_init(r45202);
        mpfr_init(r45203);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r45187, x, MPFR_RNDN);
        mpfr_set_d(r45188, y, MPFR_RNDN);
        mpfr_set_d(r45189, z, MPFR_RNDN);
        mpfr_log(r45190, r45189, MPFR_RNDN);
        mpfr_set_d(r45191, t, MPFR_RNDN);
        mpfr_sub(r45192, r45190, r45191, MPFR_RNDN);
        mpfr_mul(r45193, r45188, r45192, MPFR_RNDN);
        mpfr_set_d(r45194, a, MPFR_RNDN);
        ;
        mpfr_sub(r45196, r45195, r45189, MPFR_RNDN);
        mpfr_log(r45197, r45196, MPFR_RNDN);
        mpfr_set_d(r45198, b, MPFR_RNDN);
        mpfr_sub(r45199, r45197, r45198, MPFR_RNDN);
        mpfr_mul(r45200, r45194, r45199, MPFR_RNDN);
        mpfr_add(r45201, r45193, r45200, MPFR_RNDN);
        mpfr_exp(r45202, r45201, MPFR_RNDN);
        mpfr_mul(r45203, r45187, r45202, MPFR_RNDN);
        return mpfr_get_d(r45203, MPFR_RNDN);
}

static mpfr_t r45204, r45205, r45206, r45207, r45208, r45209, r45210, r45211, r45212, r45213, r45214, r45215, r45216, r45217, r45218, r45219, r45220, r45221, r45222, r45223, r45224, r45225, r45226, r45227, r45228;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init(r45204);
        mpfr_init_set_str(r45205, "6.162182387522347e-283", 10, MPFR_RNDN);
        mpfr_init(r45206);
        mpfr_init_set_str(r45207, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45208);
        mpfr_init(r45209);
        mpfr_init(r45210);
        mpfr_init(r45211);
        mpfr_init(r45212);
        mpfr_init(r45213);
        mpfr_init(r45214);
        mpfr_init(r45215);
        mpfr_init(r45216);
        mpfr_init(r45217);
        mpfr_init(r45218);
        mpfr_init(r45219);
        mpfr_init(r45220);
        mpfr_init(r45221);
        mpfr_init(r45222);
        mpfr_init(r45223);
        mpfr_init(r45224);
        mpfr_init(r45225);
        mpfr_init(r45226);
        mpfr_init(r45227);
        mpfr_init(r45228);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r45204, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45206, mpfr_cmp(r45204, r45205) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r45208, z, MPFR_RNDN);
        mpfr_sub(r45209, r45207, r45208, MPFR_RNDN);
        mpfr_log(r45210, r45209, MPFR_RNDN);
        mpfr_set_d(r45211, b, MPFR_RNDN);
        mpfr_sub(r45212, r45210, r45211, MPFR_RNDN);
        mpfr_set_d(r45213, a, MPFR_RNDN);
        mpfr_mul(r45214, r45212, r45213, MPFR_RNDN);
        mpfr_exp(r45215, r45214, MPFR_RNDN);
        mpfr_mul(r45216, r45204, r45215, MPFR_RNDN);
        mpfr_set_d(r45217, y, MPFR_RNDN);
        mpfr_log(r45218, r45208, MPFR_RNDN);
        mpfr_set_d(r45219, t, MPFR_RNDN);
        mpfr_sub(r45220, r45218, r45219, MPFR_RNDN);
        mpfr_mul(r45221, r45217, r45220, MPFR_RNDN);
        mpfr_exp(r45222, r45221, MPFR_RNDN);
        mpfr_mul(r45223, r45216, r45222, MPFR_RNDN);
        mpfr_log(r45224, r45204, MPFR_RNDN);
        mpfr_add(r45225, r45221, r45224, MPFR_RNDN);
        mpfr_add(r45226, r45225, r45214, MPFR_RNDN);
        mpfr_exp(r45227, r45226, MPFR_RNDN);
        if (mpfr_get_si(r45206, MPFR_RNDN)) { mpfr_set(r45228, r45223, MPFR_RNDN); } else { mpfr_set(r45228, r45227, MPFR_RNDN); };
        return mpfr_get_d(r45228, MPFR_RNDN);
}

static mpfr_t r45229, r45230, r45231, r45232, r45233, r45234, r45235, r45236, r45237, r45238, r45239, r45240, r45241, r45242, r45243, r45244, r45245, r45246, r45247, r45248, r45249, r45250, r45251, r45252, r45253;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init(r45229);
        mpfr_init_set_str(r45230, "6.162182387522347e-283", 10, MPFR_RNDN);
        mpfr_init(r45231);
        mpfr_init_set_str(r45232, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45233);
        mpfr_init(r45234);
        mpfr_init(r45235);
        mpfr_init(r45236);
        mpfr_init(r45237);
        mpfr_init(r45238);
        mpfr_init(r45239);
        mpfr_init(r45240);
        mpfr_init(r45241);
        mpfr_init(r45242);
        mpfr_init(r45243);
        mpfr_init(r45244);
        mpfr_init(r45245);
        mpfr_init(r45246);
        mpfr_init(r45247);
        mpfr_init(r45248);
        mpfr_init(r45249);
        mpfr_init(r45250);
        mpfr_init(r45251);
        mpfr_init(r45252);
        mpfr_init(r45253);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r45229, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45231, mpfr_cmp(r45229, r45230) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r45233, z, MPFR_RNDN);
        mpfr_sub(r45234, r45232, r45233, MPFR_RNDN);
        mpfr_log(r45235, r45234, MPFR_RNDN);
        mpfr_set_d(r45236, b, MPFR_RNDN);
        mpfr_sub(r45237, r45235, r45236, MPFR_RNDN);
        mpfr_set_d(r45238, a, MPFR_RNDN);
        mpfr_mul(r45239, r45237, r45238, MPFR_RNDN);
        mpfr_exp(r45240, r45239, MPFR_RNDN);
        mpfr_mul(r45241, r45229, r45240, MPFR_RNDN);
        mpfr_set_d(r45242, y, MPFR_RNDN);
        mpfr_log(r45243, r45233, MPFR_RNDN);
        mpfr_set_d(r45244, t, MPFR_RNDN);
        mpfr_sub(r45245, r45243, r45244, MPFR_RNDN);
        mpfr_mul(r45246, r45242, r45245, MPFR_RNDN);
        mpfr_exp(r45247, r45246, MPFR_RNDN);
        mpfr_mul(r45248, r45241, r45247, MPFR_RNDN);
        mpfr_log(r45249, r45229, MPFR_RNDN);
        mpfr_add(r45250, r45246, r45249, MPFR_RNDN);
        mpfr_add(r45251, r45250, r45239, MPFR_RNDN);
        mpfr_exp(r45252, r45251, MPFR_RNDN);
        if (mpfr_get_si(r45231, MPFR_RNDN)) { mpfr_set(r45253, r45248, MPFR_RNDN); } else { mpfr_set(r45253, r45252, MPFR_RNDN); };
        return mpfr_get_d(r45253, MPFR_RNDN);
}

