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

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

double f_if(float x, float y) {
        float r43412 = 1.0;
        float r43413 = x;
        float r43414 = y;
        float r43415 = r43413 - r43414;
        float r43416 = r43412 - r43414;
        float r43417 = r43415 / r43416;
        float r43418 = r43412 - r43417;
        float r43419 = log(r43418);
        float r43420 = r43412 - r43419;
        return r43420;
}

double f_id(double x, double y) {
        double r43421 = 1.0;
        double r43422 = x;
        double r43423 = y;
        double r43424 = r43422 - r43423;
        double r43425 = r43421 - r43423;
        double r43426 = r43424 / r43425;
        double r43427 = r43421 - r43426;
        double r43428 = log(r43427);
        double r43429 = r43421 - r43428;
        return r43429;
}


double f_of(float x, float y) {
        float r43430 = x;
        float r43431 = y;
        float r43432 = r43430 - r43431;
        float r43433 = 1.0;
        float r43434 = r43433 - r43431;
        float r43435 = r43432 / r43434;
        float r43436 = 0.9996997279733931;
        bool r43437 = r43435 <= r43436;
        float r43438 = r43433 - r43435;
        float r43439 = sqrt(r43438);
        float r43440 = r43439 * r43439;
        float r43441 = log(r43440);
        float r43442 = r43433 - r43441;
        float r43443 = r43430 * r43433;
        float r43444 = r43431 * r43431;
        float r43445 = r43443 / r43444;
        float r43446 = r43430 / r43431;
        float r43447 = r43433 / r43431;
        float r43448 = r43446 - r43447;
        float r43449 = r43445 + r43448;
        float r43450 = log(r43449);
        float r43451 = r43433 - r43450;
        float r43452 = r43437 ? r43442 : r43451;
        return r43452;
}

double f_od(double x, double y) {
        double r43453 = x;
        double r43454 = y;
        double r43455 = r43453 - r43454;
        double r43456 = 1.0;
        double r43457 = r43456 - r43454;
        double r43458 = r43455 / r43457;
        double r43459 = 0.9996997279733931;
        bool r43460 = r43458 <= r43459;
        double r43461 = r43456 - r43458;
        double r43462 = sqrt(r43461);
        double r43463 = r43462 * r43462;
        double r43464 = log(r43463);
        double r43465 = r43456 - r43464;
        double r43466 = r43453 * r43456;
        double r43467 = r43454 * r43454;
        double r43468 = r43466 / r43467;
        double r43469 = r43453 / r43454;
        double r43470 = r43456 / r43454;
        double r43471 = r43469 - r43470;
        double r43472 = r43468 + r43471;
        double r43473 = log(r43472);
        double r43474 = r43456 - r43473;
        double r43475 = r43460 ? r43465 : r43474;
        return r43475;
}

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 r43476, r43477, r43478, r43479, r43480, r43481, r43482, r43483, r43484;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r43476, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43477);
        mpfr_init(r43478);
        mpfr_init(r43479);
        mpfr_init(r43480);
        mpfr_init(r43481);
        mpfr_init(r43482);
        mpfr_init(r43483);
        mpfr_init(r43484);
}

double f_im(double x, double y) {
        ;
        mpfr_set_d(r43477, x, MPFR_RNDN);
        mpfr_set_d(r43478, y, MPFR_RNDN);
        mpfr_sub(r43479, r43477, r43478, MPFR_RNDN);
        mpfr_sub(r43480, r43476, r43478, MPFR_RNDN);
        mpfr_div(r43481, r43479, r43480, MPFR_RNDN);
        mpfr_sub(r43482, r43476, r43481, MPFR_RNDN);
        mpfr_log(r43483, r43482, MPFR_RNDN);
        mpfr_sub(r43484, r43476, r43483, MPFR_RNDN);
        return mpfr_get_d(r43484, MPFR_RNDN);
}

static mpfr_t r43485, r43486, r43487, r43488, r43489, r43490, r43491, r43492, r43493, r43494, r43495, r43496, r43497, r43498, r43499, r43500, r43501, r43502, r43503, r43504, r43505, r43506, r43507;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r43485);
        mpfr_init(r43486);
        mpfr_init(r43487);
        mpfr_init_set_str(r43488, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43489);
        mpfr_init(r43490);
        mpfr_init_set_str(r43491, "0.9996997279733931", 10, MPFR_RNDN);
        mpfr_init(r43492);
        mpfr_init(r43493);
        mpfr_init(r43494);
        mpfr_init(r43495);
        mpfr_init(r43496);
        mpfr_init(r43497);
        mpfr_init(r43498);
        mpfr_init(r43499);
        mpfr_init(r43500);
        mpfr_init(r43501);
        mpfr_init(r43502);
        mpfr_init(r43503);
        mpfr_init(r43504);
        mpfr_init(r43505);
        mpfr_init(r43506);
        mpfr_init(r43507);
}

double f_fm(double x, double y) {
        mpfr_set_d(r43485, x, MPFR_RNDN);
        mpfr_set_d(r43486, y, MPFR_RNDN);
        mpfr_sub(r43487, r43485, r43486, MPFR_RNDN);
        ;
        mpfr_sub(r43489, r43488, r43486, MPFR_RNDN);
        mpfr_div(r43490, r43487, r43489, MPFR_RNDN);
        ;
        mpfr_set_si(r43492, mpfr_cmp(r43490, r43491) <= 0, MPFR_RNDN);
        mpfr_sub(r43493, r43488, r43490, MPFR_RNDN);
        mpfr_sqrt(r43494, r43493, MPFR_RNDN);
        mpfr_mul(r43495, r43494, r43494, MPFR_RNDN);
        mpfr_log(r43496, r43495, MPFR_RNDN);
        mpfr_sub(r43497, r43488, r43496, MPFR_RNDN);
        mpfr_mul(r43498, r43485, r43488, MPFR_RNDN);
        mpfr_mul(r43499, r43486, r43486, MPFR_RNDN);
        mpfr_div(r43500, r43498, r43499, MPFR_RNDN);
        mpfr_div(r43501, r43485, r43486, MPFR_RNDN);
        mpfr_div(r43502, r43488, r43486, MPFR_RNDN);
        mpfr_sub(r43503, r43501, r43502, MPFR_RNDN);
        mpfr_add(r43504, r43500, r43503, MPFR_RNDN);
        mpfr_log(r43505, r43504, MPFR_RNDN);
        mpfr_sub(r43506, r43488, r43505, MPFR_RNDN);
        if (mpfr_get_si(r43492, MPFR_RNDN)) { mpfr_set(r43507, r43497, MPFR_RNDN); } else { mpfr_set(r43507, r43506, MPFR_RNDN); };
        return mpfr_get_d(r43507, MPFR_RNDN);
}

static mpfr_t r43508, r43509, r43510, r43511, r43512, r43513, r43514, r43515, r43516, r43517, r43518, r43519, r43520, r43521, r43522, r43523, r43524, r43525, r43526, r43527, r43528, r43529, r43530;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r43508);
        mpfr_init(r43509);
        mpfr_init(r43510);
        mpfr_init_set_str(r43511, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43512);
        mpfr_init(r43513);
        mpfr_init_set_str(r43514, "0.9996997279733931", 10, MPFR_RNDN);
        mpfr_init(r43515);
        mpfr_init(r43516);
        mpfr_init(r43517);
        mpfr_init(r43518);
        mpfr_init(r43519);
        mpfr_init(r43520);
        mpfr_init(r43521);
        mpfr_init(r43522);
        mpfr_init(r43523);
        mpfr_init(r43524);
        mpfr_init(r43525);
        mpfr_init(r43526);
        mpfr_init(r43527);
        mpfr_init(r43528);
        mpfr_init(r43529);
        mpfr_init(r43530);
}

double f_dm(double x, double y) {
        mpfr_set_d(r43508, x, MPFR_RNDN);
        mpfr_set_d(r43509, y, MPFR_RNDN);
        mpfr_sub(r43510, r43508, r43509, MPFR_RNDN);
        ;
        mpfr_sub(r43512, r43511, r43509, MPFR_RNDN);
        mpfr_div(r43513, r43510, r43512, MPFR_RNDN);
        ;
        mpfr_set_si(r43515, mpfr_cmp(r43513, r43514) <= 0, MPFR_RNDN);
        mpfr_sub(r43516, r43511, r43513, MPFR_RNDN);
        mpfr_sqrt(r43517, r43516, MPFR_RNDN);
        mpfr_mul(r43518, r43517, r43517, MPFR_RNDN);
        mpfr_log(r43519, r43518, MPFR_RNDN);
        mpfr_sub(r43520, r43511, r43519, MPFR_RNDN);
        mpfr_mul(r43521, r43508, r43511, MPFR_RNDN);
        mpfr_mul(r43522, r43509, r43509, MPFR_RNDN);
        mpfr_div(r43523, r43521, r43522, MPFR_RNDN);
        mpfr_div(r43524, r43508, r43509, MPFR_RNDN);
        mpfr_div(r43525, r43511, r43509, MPFR_RNDN);
        mpfr_sub(r43526, r43524, r43525, MPFR_RNDN);
        mpfr_add(r43527, r43523, r43526, MPFR_RNDN);
        mpfr_log(r43528, r43527, MPFR_RNDN);
        mpfr_sub(r43529, r43511, r43528, MPFR_RNDN);
        if (mpfr_get_si(r43515, MPFR_RNDN)) { mpfr_set(r43530, r43520, MPFR_RNDN); } else { mpfr_set(r43530, r43529, MPFR_RNDN); };
        return mpfr_get_d(r43530, MPFR_RNDN);
}

