#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 r45251 = x;
        float r45252 = y;
        float r45253 = z;
        float r45254 = log(r45253);
        float r45255 = t;
        float r45256 = r45254 - r45255;
        float r45257 = r45252 * r45256;
        float r45258 = a;
        float r45259 = 1.0;
        float r45260 = r45259 - r45253;
        float r45261 = log(r45260);
        float r45262 = b;
        float r45263 = r45261 - r45262;
        float r45264 = r45258 * r45263;
        float r45265 = r45257 + r45264;
        float r45266 = exp(r45265);
        float r45267 = r45251 * r45266;
        return r45267;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r45268 = x;
        double r45269 = y;
        double r45270 = z;
        double r45271 = log(r45270);
        double r45272 = t;
        double r45273 = r45271 - r45272;
        double r45274 = r45269 * r45273;
        double r45275 = a;
        double r45276 = 1.0;
        double r45277 = r45276 - r45270;
        double r45278 = log(r45277);
        double r45279 = b;
        double r45280 = r45278 - r45279;
        double r45281 = r45275 * r45280;
        double r45282 = r45274 + r45281;
        double r45283 = exp(r45282);
        double r45284 = r45268 * r45283;
        return r45284;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r45285 = y;
        float r45286 = 3.439646959482297e-130;
        bool r45287 = r45285 <= r45286;
        float r45288 = x;
        float r45289 = 1.0;
        float r45290 = z;
        float r45291 = r45289 - r45290;
        float r45292 = log(r45291);
        float r45293 = b;
        float r45294 = r45292 - r45293;
        float r45295 = a;
        float r45296 = r45294 * r45295;
        float r45297 = exp(r45296);
        float r45298 = r45288 * r45297;
        float r45299 = 1/2;
        float r45300 = t;
        float r45301 = 2;
        float r45302 = pow(r45300, r45301);
        float r45303 = r45290 * r45302;
        float r45304 = r45299 * r45303;
        float r45305 = r45290 + r45304;
        float r45306 = r45290 * r45300;
        float r45307 = r45305 - r45306;
        float r45308 = pow(r45307, r45285);
        float r45309 = r45298 * r45308;
        float r45310 = exp(r45300);
        float r45311 = r45290 / r45310;
        float r45312 = pow(r45311, r45285);
        float r45313 = r45298 * r45312;
        float r45314 = r45287 ? r45309 : r45313;
        return r45314;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r45315 = y;
        double r45316 = 3.439646959482297e-130;
        bool r45317 = r45315 <= r45316;
        double r45318 = x;
        double r45319 = 1.0;
        double r45320 = z;
        double r45321 = r45319 - r45320;
        double r45322 = log(r45321);
        double r45323 = b;
        double r45324 = r45322 - r45323;
        double r45325 = a;
        double r45326 = r45324 * r45325;
        double r45327 = exp(r45326);
        double r45328 = r45318 * r45327;
        double r45329 = 1/2;
        double r45330 = t;
        double r45331 = 2;
        double r45332 = pow(r45330, r45331);
        double r45333 = r45320 * r45332;
        double r45334 = r45329 * r45333;
        double r45335 = r45320 + r45334;
        double r45336 = r45320 * r45330;
        double r45337 = r45335 - r45336;
        double r45338 = pow(r45337, r45315);
        double r45339 = r45328 * r45338;
        double r45340 = exp(r45330);
        double r45341 = r45320 / r45340;
        double r45342 = pow(r45341, r45315);
        double r45343 = r45328 * r45342;
        double r45344 = r45317 ? r45339 : r45343;
        return r45344;
}

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 r45345, r45346, r45347, r45348, r45349, r45350, r45351, r45352, r45353, r45354, r45355, r45356, r45357, r45358, r45359, r45360, r45361;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r45345);
        mpfr_init(r45346);
        mpfr_init(r45347);
        mpfr_init(r45348);
        mpfr_init(r45349);
        mpfr_init(r45350);
        mpfr_init(r45351);
        mpfr_init(r45352);
        mpfr_init_set_str(r45353, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45354);
        mpfr_init(r45355);
        mpfr_init(r45356);
        mpfr_init(r45357);
        mpfr_init(r45358);
        mpfr_init(r45359);
        mpfr_init(r45360);
        mpfr_init(r45361);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r45345, x, MPFR_RNDN);
        mpfr_set_d(r45346, y, MPFR_RNDN);
        mpfr_set_d(r45347, z, MPFR_RNDN);
        mpfr_log(r45348, r45347, MPFR_RNDN);
        mpfr_set_d(r45349, t, MPFR_RNDN);
        mpfr_sub(r45350, r45348, r45349, MPFR_RNDN);
        mpfr_mul(r45351, r45346, r45350, MPFR_RNDN);
        mpfr_set_d(r45352, a, MPFR_RNDN);
        ;
        mpfr_sub(r45354, r45353, r45347, MPFR_RNDN);
        mpfr_log(r45355, r45354, MPFR_RNDN);
        mpfr_set_d(r45356, b, MPFR_RNDN);
        mpfr_sub(r45357, r45355, r45356, MPFR_RNDN);
        mpfr_mul(r45358, r45352, r45357, MPFR_RNDN);
        mpfr_add(r45359, r45351, r45358, MPFR_RNDN);
        mpfr_exp(r45360, r45359, MPFR_RNDN);
        mpfr_mul(r45361, r45345, r45360, MPFR_RNDN);
        return mpfr_get_d(r45361, MPFR_RNDN);
}

static mpfr_t r45362, r45363, r45364, r45365, r45366, r45367, r45368, r45369, r45370, r45371, r45372, r45373, r45374, r45375, r45376, r45377, r45378, r45379, r45380, r45381, r45382, r45383, r45384, r45385, r45386, r45387, r45388, r45389, r45390, r45391;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r45362);
        mpfr_init_set_str(r45363, "3.439646959482297e-130", 10, MPFR_RNDN);
        mpfr_init(r45364);
        mpfr_init(r45365);
        mpfr_init_set_str(r45366, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45367);
        mpfr_init(r45368);
        mpfr_init(r45369);
        mpfr_init(r45370);
        mpfr_init(r45371);
        mpfr_init(r45372);
        mpfr_init(r45373);
        mpfr_init(r45374);
        mpfr_init(r45375);
        mpfr_init_set_str(r45376, "1/2", 10, MPFR_RNDN);
        mpfr_init(r45377);
        mpfr_init_set_str(r45378, "2", 10, MPFR_RNDN);
        mpfr_init(r45379);
        mpfr_init(r45380);
        mpfr_init(r45381);
        mpfr_init(r45382);
        mpfr_init(r45383);
        mpfr_init(r45384);
        mpfr_init(r45385);
        mpfr_init(r45386);
        mpfr_init(r45387);
        mpfr_init(r45388);
        mpfr_init(r45389);
        mpfr_init(r45390);
        mpfr_init(r45391);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r45362, y, MPFR_RNDN);
        ;
        mpfr_set_si(r45364, mpfr_cmp(r45362, r45363) <= 0, MPFR_RNDN);
        mpfr_set_d(r45365, x, MPFR_RNDN);
        ;
        mpfr_set_d(r45367, z, MPFR_RNDN);
        mpfr_sub(r45368, r45366, r45367, MPFR_RNDN);
        mpfr_log(r45369, r45368, MPFR_RNDN);
        mpfr_set_d(r45370, b, MPFR_RNDN);
        mpfr_sub(r45371, r45369, r45370, MPFR_RNDN);
        mpfr_set_d(r45372, a, MPFR_RNDN);
        mpfr_mul(r45373, r45371, r45372, MPFR_RNDN);
        mpfr_exp(r45374, r45373, MPFR_RNDN);
        mpfr_mul(r45375, r45365, r45374, MPFR_RNDN);
        ;
        mpfr_set_d(r45377, t, MPFR_RNDN);
        ;
        mpfr_pow(r45379, r45377, r45378, MPFR_RNDN);
        mpfr_mul(r45380, r45367, r45379, MPFR_RNDN);
        mpfr_mul(r45381, r45376, r45380, MPFR_RNDN);
        mpfr_add(r45382, r45367, r45381, MPFR_RNDN);
        mpfr_mul(r45383, r45367, r45377, MPFR_RNDN);
        mpfr_sub(r45384, r45382, r45383, MPFR_RNDN);
        mpfr_pow(r45385, r45384, r45362, MPFR_RNDN);
        mpfr_mul(r45386, r45375, r45385, MPFR_RNDN);
        mpfr_exp(r45387, r45377, MPFR_RNDN);
        mpfr_div(r45388, r45367, r45387, MPFR_RNDN);
        mpfr_pow(r45389, r45388, r45362, MPFR_RNDN);
        mpfr_mul(r45390, r45375, r45389, MPFR_RNDN);
        if (mpfr_get_si(r45364, MPFR_RNDN)) { mpfr_set(r45391, r45386, MPFR_RNDN); } else { mpfr_set(r45391, r45390, MPFR_RNDN); };
        return mpfr_get_d(r45391, MPFR_RNDN);
}

static mpfr_t r45392, r45393, r45394, r45395, r45396, r45397, r45398, r45399, r45400, r45401, r45402, r45403, r45404, r45405, r45406, r45407, r45408, r45409, r45410, r45411, r45412, r45413, r45414, r45415, r45416, r45417, r45418, r45419, r45420, r45421;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r45392);
        mpfr_init_set_str(r45393, "3.439646959482297e-130", 10, MPFR_RNDN);
        mpfr_init(r45394);
        mpfr_init(r45395);
        mpfr_init_set_str(r45396, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45397);
        mpfr_init(r45398);
        mpfr_init(r45399);
        mpfr_init(r45400);
        mpfr_init(r45401);
        mpfr_init(r45402);
        mpfr_init(r45403);
        mpfr_init(r45404);
        mpfr_init(r45405);
        mpfr_init_set_str(r45406, "1/2", 10, MPFR_RNDN);
        mpfr_init(r45407);
        mpfr_init_set_str(r45408, "2", 10, MPFR_RNDN);
        mpfr_init(r45409);
        mpfr_init(r45410);
        mpfr_init(r45411);
        mpfr_init(r45412);
        mpfr_init(r45413);
        mpfr_init(r45414);
        mpfr_init(r45415);
        mpfr_init(r45416);
        mpfr_init(r45417);
        mpfr_init(r45418);
        mpfr_init(r45419);
        mpfr_init(r45420);
        mpfr_init(r45421);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r45392, y, MPFR_RNDN);
        ;
        mpfr_set_si(r45394, mpfr_cmp(r45392, r45393) <= 0, MPFR_RNDN);
        mpfr_set_d(r45395, x, MPFR_RNDN);
        ;
        mpfr_set_d(r45397, z, MPFR_RNDN);
        mpfr_sub(r45398, r45396, r45397, MPFR_RNDN);
        mpfr_log(r45399, r45398, MPFR_RNDN);
        mpfr_set_d(r45400, b, MPFR_RNDN);
        mpfr_sub(r45401, r45399, r45400, MPFR_RNDN);
        mpfr_set_d(r45402, a, MPFR_RNDN);
        mpfr_mul(r45403, r45401, r45402, MPFR_RNDN);
        mpfr_exp(r45404, r45403, MPFR_RNDN);
        mpfr_mul(r45405, r45395, r45404, MPFR_RNDN);
        ;
        mpfr_set_d(r45407, t, MPFR_RNDN);
        ;
        mpfr_pow(r45409, r45407, r45408, MPFR_RNDN);
        mpfr_mul(r45410, r45397, r45409, MPFR_RNDN);
        mpfr_mul(r45411, r45406, r45410, MPFR_RNDN);
        mpfr_add(r45412, r45397, r45411, MPFR_RNDN);
        mpfr_mul(r45413, r45397, r45407, MPFR_RNDN);
        mpfr_sub(r45414, r45412, r45413, MPFR_RNDN);
        mpfr_pow(r45415, r45414, r45392, MPFR_RNDN);
        mpfr_mul(r45416, r45405, r45415, MPFR_RNDN);
        mpfr_exp(r45417, r45407, MPFR_RNDN);
        mpfr_div(r45418, r45397, r45417, MPFR_RNDN);
        mpfr_pow(r45419, r45418, r45392, MPFR_RNDN);
        mpfr_mul(r45420, r45405, r45419, MPFR_RNDN);
        if (mpfr_get_si(r45394, MPFR_RNDN)) { mpfr_set(r45421, r45416, MPFR_RNDN); } else { mpfr_set(r45421, r45420, MPFR_RNDN); };
        return mpfr_get_d(r45421, MPFR_RNDN);
}

