#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 r43595 = 1.0;
        float r43596 = x;
        float r43597 = y;
        float r43598 = r43596 - r43597;
        float r43599 = r43595 - r43597;
        float r43600 = r43598 / r43599;
        float r43601 = r43595 - r43600;
        float r43602 = log(r43601);
        float r43603 = r43595 - r43602;
        return r43603;
}

double f_id(double x, double y) {
        double r43604 = 1.0;
        double r43605 = x;
        double r43606 = y;
        double r43607 = r43605 - r43606;
        double r43608 = r43604 - r43606;
        double r43609 = r43607 / r43608;
        double r43610 = r43604 - r43609;
        double r43611 = log(r43610);
        double r43612 = r43604 - r43611;
        return r43612;
}


double f_of(float x, float y) {
        float r43613 = x;
        float r43614 = y;
        float r43615 = r43613 - r43614;
        float r43616 = 1.0;
        float r43617 = r43616 - r43614;
        float r43618 = r43615 / r43617;
        float r43619 = 0.9995693633938032;
        bool r43620 = r43618 <= r43619;
        float r43621 = exp(r43616);
        float r43622 = r43616 - r43618;
        float r43623 = r43621 / r43622;
        float r43624 = log(r43623);
        float r43625 = r43613 * r43616;
        float r43626 = r43614 * r43614;
        float r43627 = r43625 / r43626;
        float r43628 = r43613 / r43614;
        float r43629 = r43616 / r43614;
        float r43630 = r43628 - r43629;
        float r43631 = r43627 + r43630;
        float r43632 = log(r43631);
        float r43633 = r43616 - r43632;
        float r43634 = r43620 ? r43624 : r43633;
        return r43634;
}

double f_od(double x, double y) {
        double r43635 = x;
        double r43636 = y;
        double r43637 = r43635 - r43636;
        double r43638 = 1.0;
        double r43639 = r43638 - r43636;
        double r43640 = r43637 / r43639;
        double r43641 = 0.9995693633938032;
        bool r43642 = r43640 <= r43641;
        double r43643 = exp(r43638);
        double r43644 = r43638 - r43640;
        double r43645 = r43643 / r43644;
        double r43646 = log(r43645);
        double r43647 = r43635 * r43638;
        double r43648 = r43636 * r43636;
        double r43649 = r43647 / r43648;
        double r43650 = r43635 / r43636;
        double r43651 = r43638 / r43636;
        double r43652 = r43650 - r43651;
        double r43653 = r43649 + r43652;
        double r43654 = log(r43653);
        double r43655 = r43638 - r43654;
        double r43656 = r43642 ? r43646 : r43655;
        return r43656;
}

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 r43657, r43658, r43659, r43660, r43661, r43662, r43663, r43664, r43665;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r43657, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43658);
        mpfr_init(r43659);
        mpfr_init(r43660);
        mpfr_init(r43661);
        mpfr_init(r43662);
        mpfr_init(r43663);
        mpfr_init(r43664);
        mpfr_init(r43665);
}

double f_im(double x, double y) {
        ;
        mpfr_set_d(r43658, x, MPFR_RNDN);
        mpfr_set_d(r43659, y, MPFR_RNDN);
        mpfr_sub(r43660, r43658, r43659, MPFR_RNDN);
        mpfr_sub(r43661, r43657, r43659, MPFR_RNDN);
        mpfr_div(r43662, r43660, r43661, MPFR_RNDN);
        mpfr_sub(r43663, r43657, r43662, MPFR_RNDN);
        mpfr_log(r43664, r43663, MPFR_RNDN);
        mpfr_sub(r43665, r43657, r43664, MPFR_RNDN);
        return mpfr_get_d(r43665, MPFR_RNDN);
}

static mpfr_t r43666, r43667, r43668, r43669, r43670, r43671, r43672, r43673, r43674, r43675, r43676, r43677, r43678, r43679, r43680, r43681, r43682, r43683, r43684, r43685, r43686, r43687;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r43666);
        mpfr_init(r43667);
        mpfr_init(r43668);
        mpfr_init_set_str(r43669, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43670);
        mpfr_init(r43671);
        mpfr_init_set_str(r43672, "0.9995693633938032", 10, MPFR_RNDN);
        mpfr_init(r43673);
        mpfr_init(r43674);
        mpfr_init(r43675);
        mpfr_init(r43676);
        mpfr_init(r43677);
        mpfr_init(r43678);
        mpfr_init(r43679);
        mpfr_init(r43680);
        mpfr_init(r43681);
        mpfr_init(r43682);
        mpfr_init(r43683);
        mpfr_init(r43684);
        mpfr_init(r43685);
        mpfr_init(r43686);
        mpfr_init(r43687);
}

double f_fm(double x, double y) {
        mpfr_set_d(r43666, x, MPFR_RNDN);
        mpfr_set_d(r43667, y, MPFR_RNDN);
        mpfr_sub(r43668, r43666, r43667, MPFR_RNDN);
        ;
        mpfr_sub(r43670, r43669, r43667, MPFR_RNDN);
        mpfr_div(r43671, r43668, r43670, MPFR_RNDN);
        ;
        mpfr_set_si(r43673, mpfr_cmp(r43671, r43672) <= 0, MPFR_RNDN);
        mpfr_exp(r43674, r43669, MPFR_RNDN);
        mpfr_sub(r43675, r43669, r43671, MPFR_RNDN);
        mpfr_div(r43676, r43674, r43675, MPFR_RNDN);
        mpfr_log(r43677, r43676, MPFR_RNDN);
        mpfr_mul(r43678, r43666, r43669, MPFR_RNDN);
        mpfr_mul(r43679, r43667, r43667, MPFR_RNDN);
        mpfr_div(r43680, r43678, r43679, MPFR_RNDN);
        mpfr_div(r43681, r43666, r43667, MPFR_RNDN);
        mpfr_div(r43682, r43669, r43667, MPFR_RNDN);
        mpfr_sub(r43683, r43681, r43682, MPFR_RNDN);
        mpfr_add(r43684, r43680, r43683, MPFR_RNDN);
        mpfr_log(r43685, r43684, MPFR_RNDN);
        mpfr_sub(r43686, r43669, r43685, MPFR_RNDN);
        if (mpfr_get_si(r43673, MPFR_RNDN)) { mpfr_set(r43687, r43677, MPFR_RNDN); } else { mpfr_set(r43687, r43686, MPFR_RNDN); };
        return mpfr_get_d(r43687, MPFR_RNDN);
}

static mpfr_t r43688, r43689, r43690, r43691, r43692, r43693, r43694, r43695, r43696, r43697, r43698, r43699, r43700, r43701, r43702, r43703, r43704, r43705, r43706, r43707, r43708, r43709;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r43688);
        mpfr_init(r43689);
        mpfr_init(r43690);
        mpfr_init_set_str(r43691, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43692);
        mpfr_init(r43693);
        mpfr_init_set_str(r43694, "0.9995693633938032", 10, MPFR_RNDN);
        mpfr_init(r43695);
        mpfr_init(r43696);
        mpfr_init(r43697);
        mpfr_init(r43698);
        mpfr_init(r43699);
        mpfr_init(r43700);
        mpfr_init(r43701);
        mpfr_init(r43702);
        mpfr_init(r43703);
        mpfr_init(r43704);
        mpfr_init(r43705);
        mpfr_init(r43706);
        mpfr_init(r43707);
        mpfr_init(r43708);
        mpfr_init(r43709);
}

double f_dm(double x, double y) {
        mpfr_set_d(r43688, x, MPFR_RNDN);
        mpfr_set_d(r43689, y, MPFR_RNDN);
        mpfr_sub(r43690, r43688, r43689, MPFR_RNDN);
        ;
        mpfr_sub(r43692, r43691, r43689, MPFR_RNDN);
        mpfr_div(r43693, r43690, r43692, MPFR_RNDN);
        ;
        mpfr_set_si(r43695, mpfr_cmp(r43693, r43694) <= 0, MPFR_RNDN);
        mpfr_exp(r43696, r43691, MPFR_RNDN);
        mpfr_sub(r43697, r43691, r43693, MPFR_RNDN);
        mpfr_div(r43698, r43696, r43697, MPFR_RNDN);
        mpfr_log(r43699, r43698, MPFR_RNDN);
        mpfr_mul(r43700, r43688, r43691, MPFR_RNDN);
        mpfr_mul(r43701, r43689, r43689, MPFR_RNDN);
        mpfr_div(r43702, r43700, r43701, MPFR_RNDN);
        mpfr_div(r43703, r43688, r43689, MPFR_RNDN);
        mpfr_div(r43704, r43691, r43689, MPFR_RNDN);
        mpfr_sub(r43705, r43703, r43704, MPFR_RNDN);
        mpfr_add(r43706, r43702, r43705, MPFR_RNDN);
        mpfr_log(r43707, r43706, MPFR_RNDN);
        mpfr_sub(r43708, r43691, r43707, MPFR_RNDN);
        if (mpfr_get_si(r43695, MPFR_RNDN)) { mpfr_set(r43709, r43699, MPFR_RNDN); } else { mpfr_set(r43709, r43708, MPFR_RNDN); };
        return mpfr_get_d(r43709, MPFR_RNDN);
}

